diff --git a/Code/Editor/Lib/Tests/test_ClickableLabel.cpp b/Code/Editor/Lib/Tests/test_ClickableLabel.cpp index 905e91b64c..a676714992 100644 --- a/Code/Editor/Lib/Tests/test_ClickableLabel.cpp +++ b/Code/Editor/Lib/Tests/test_ClickableLabel.cpp @@ -19,7 +19,7 @@ using namespace ::testing; namespace UnitTest { class TestingClickableLabel - : public testing::Test + : public ScopedAllocatorSetupFixture { public: ClickableLabel m_clickableLabel; diff --git a/Code/Editor/Lib/Tests/test_CryEditDocPythonBindings.cpp b/Code/Editor/Lib/Tests/test_CryEditDocPythonBindings.cpp index f4e029cb7a..5bab9cb24b 100644 --- a/Code/Editor/Lib/Tests/test_CryEditDocPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_CryEditDocPythonBindings.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -22,7 +23,7 @@ namespace CryEditDocPythonBindingsUnitTests { class CryEditDocPythonBindingsFixture - : public testing::Test + : public ::UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -30,7 +31,6 @@ namespace CryEditDocPythonBindingsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Editor/Lib/Tests/test_CryEditPythonBindings.cpp b/Code/Editor/Lib/Tests/test_CryEditPythonBindings.cpp index 30afa07304..5246fcdee5 100644 --- a/Code/Editor/Lib/Tests/test_CryEditPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_CryEditPythonBindings.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -24,7 +25,7 @@ namespace CryEditPythonBindingsUnitTests { class CryEditPythonBindingsFixture - : public testing::Test + : public ::UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -32,7 +33,6 @@ namespace CryEditPythonBindingsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Editor/Lib/Tests/test_DisplaySettingsPythonBindings.cpp b/Code/Editor/Lib/Tests/test_DisplaySettingsPythonBindings.cpp index e6af0bdeff..1fd70cb88c 100644 --- a/Code/Editor/Lib/Tests/test_DisplaySettingsPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_DisplaySettingsPythonBindings.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -22,7 +23,7 @@ namespace DisplaySettingsPythonBindingsUnitTests { class DisplaySettingsPythonBindingsFixture - : public testing::Test + : public ::UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -30,7 +31,6 @@ namespace DisplaySettingsPythonBindingsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); m_app.RegisterComponentDescriptor(AzToolsFramework::DisplaySettingsPythonFuncsHandler::CreateDescriptor()); @@ -52,7 +52,7 @@ namespace DisplaySettingsPythonBindingsUnitTests } class DisplaySettingsComponentFixture - : public testing::Test + : public ::UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -60,7 +60,6 @@ namespace DisplaySettingsPythonBindingsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); m_app.RegisterComponentDescriptor(AzToolsFramework::DisplaySettingsComponent::CreateDescriptor()); diff --git a/Code/Editor/Lib/Tests/test_EditorPythonBindings.cpp b/Code/Editor/Lib/Tests/test_EditorPythonBindings.cpp index de0eb5df6f..49b65f7ffc 100644 --- a/Code/Editor/Lib/Tests/test_EditorPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_EditorPythonBindings.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -79,7 +80,7 @@ namespace EditorPythonBindingsUnitTests }; class EditorPythonBindingsFixture - : public testing::Test + : public ::UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -87,7 +88,6 @@ namespace EditorPythonBindingsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Editor/Lib/Tests/test_EditorUtils.cpp b/Code/Editor/Lib/Tests/test_EditorUtils.cpp index 3556757ae3..c0515a77ad 100644 --- a/Code/Editor/Lib/Tests/test_EditorUtils.cpp +++ b/Code/Editor/Lib/Tests/test_EditorUtils.cpp @@ -11,6 +11,7 @@ #include #include #include +#include namespace EditorUtilsTest { @@ -39,7 +40,7 @@ namespace EditorUtilsTest class TestWarningAbsorber - : public testing::Test + : public ::UnitTest::ScopedAllocatorSetupFixture { }; diff --git a/Code/Editor/Lib/Tests/test_MainWindowPythonBindings.cpp b/Code/Editor/Lib/Tests/test_MainWindowPythonBindings.cpp index 3963ae990f..e3268704bc 100644 --- a/Code/Editor/Lib/Tests/test_MainWindowPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_MainWindowPythonBindings.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -22,7 +23,7 @@ namespace MainWindowPythonBindingsUnitTests { class MainWindowPythonBindingsFixture - : public testing::Test + : public ::UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -30,7 +31,6 @@ namespace MainWindowPythonBindingsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Editor/Lib/Tests/test_ObjectManagerPythonBindings.cpp b/Code/Editor/Lib/Tests/test_ObjectManagerPythonBindings.cpp index 64b7d36d30..6766b6a1fa 100644 --- a/Code/Editor/Lib/Tests/test_ObjectManagerPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_ObjectManagerPythonBindings.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -22,7 +23,7 @@ namespace ObjectManagerPythonBindingsUnitTests { class ObjectManagerPythonBindingsFixture - : public testing::Test + : public ::UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -30,7 +31,6 @@ namespace ObjectManagerPythonBindingsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Editor/Lib/Tests/test_TerrainHoleToolPythonBindings.cpp b/Code/Editor/Lib/Tests/test_TerrainHoleToolPythonBindings.cpp index e163004d75..fc292b1f52 100644 --- a/Code/Editor/Lib/Tests/test_TerrainHoleToolPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_TerrainHoleToolPythonBindings.cpp @@ -23,7 +23,7 @@ namespace TerrainFuncsUnitTests { class TerrainHoleToolPythonBindingsFixture - : public testing::Test + : public UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -31,7 +31,6 @@ namespace TerrainFuncsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Editor/Lib/Tests/test_TerrainLayerPythonBindings.cpp b/Code/Editor/Lib/Tests/test_TerrainLayerPythonBindings.cpp index ad7baa44a5..3296572ed2 100644 --- a/Code/Editor/Lib/Tests/test_TerrainLayerPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_TerrainLayerPythonBindings.cpp @@ -23,7 +23,7 @@ namespace TerrainFuncsUnitTests { class TerrainLayerPythonBindingsFixture - : public testing::Test + : public UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -31,7 +31,6 @@ namespace TerrainFuncsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Editor/Lib/Tests/test_TerrainModifyPythonBindings.cpp b/Code/Editor/Lib/Tests/test_TerrainModifyPythonBindings.cpp index 166e4c0be5..37afbe5f37 100644 --- a/Code/Editor/Lib/Tests/test_TerrainModifyPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_TerrainModifyPythonBindings.cpp @@ -22,7 +22,7 @@ namespace TerrainModifyPythonBindingsUnitTests { class TerrainModifyPythonBindingsFixture - : public testing::Test + : public UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -30,7 +30,6 @@ namespace TerrainModifyPythonBindingsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Editor/Lib/Tests/test_TerrainPainterPythonBindings.cpp b/Code/Editor/Lib/Tests/test_TerrainPainterPythonBindings.cpp index 7a2cf786cd..3281da8078 100644 --- a/Code/Editor/Lib/Tests/test_TerrainPainterPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_TerrainPainterPythonBindings.cpp @@ -23,7 +23,7 @@ namespace TerrainFuncsUnitTests { class TerrainPainterPythonBindingsFixture - : public testing::Test + : public UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -31,7 +31,6 @@ namespace TerrainFuncsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Editor/Lib/Tests/test_TerrainPythonBindings.cpp b/Code/Editor/Lib/Tests/test_TerrainPythonBindings.cpp index 6a0df6b62a..786158afb3 100644 --- a/Code/Editor/Lib/Tests/test_TerrainPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_TerrainPythonBindings.cpp @@ -23,7 +23,7 @@ namespace TerrainFuncsUnitTests { class TerrainPythonBindingsFixture - : public testing::Test + : public UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -31,7 +31,6 @@ namespace TerrainFuncsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Editor/Lib/Tests/test_TerrainTexturePythonBindings.cpp b/Code/Editor/Lib/Tests/test_TerrainTexturePythonBindings.cpp index 23d30c0b82..7bd81772e1 100644 --- a/Code/Editor/Lib/Tests/test_TerrainTexturePythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_TerrainTexturePythonBindings.cpp @@ -23,7 +23,7 @@ namespace TerrainFuncsUnitTests { class TerrainTexturePythonBindingsFixture - : public testing::Test + : public UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -31,7 +31,6 @@ namespace TerrainFuncsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Editor/Lib/Tests/test_TrackViewPythonBindings.cpp b/Code/Editor/Lib/Tests/test_TrackViewPythonBindings.cpp index 88a4b4f63f..558bdaaabc 100644 --- a/Code/Editor/Lib/Tests/test_TrackViewPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_TrackViewPythonBindings.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -22,7 +23,7 @@ namespace TrackViewPythonBindingsUnitTests { class TrackViewPythonBindingsFixture - : public testing::Test + : public UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -30,7 +31,6 @@ namespace TrackViewPythonBindingsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is @@ -82,7 +82,7 @@ namespace TrackViewPythonBindingsUnitTests } class TrackViewComponentFixture - : public testing::Test + : public UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -90,7 +90,6 @@ namespace TrackViewPythonBindingsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); m_app.RegisterComponentDescriptor(AzToolsFramework::TrackViewComponent::CreateDescriptor()); diff --git a/Code/Editor/Lib/Tests/test_ViewPanePythonBindings.cpp b/Code/Editor/Lib/Tests/test_ViewPanePythonBindings.cpp index 88ce6d5767..047cea3aad 100644 --- a/Code/Editor/Lib/Tests/test_ViewPanePythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_ViewPanePythonBindings.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -22,7 +23,7 @@ namespace ViewPaneFuncsUnitTests { class ViewPanePythonBindingsFixture - : public testing::Test + : public ::UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -30,7 +31,6 @@ namespace ViewPaneFuncsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Editor/Lib/Tests/test_ViewportTitleDlgPythonBindings.cpp b/Code/Editor/Lib/Tests/test_ViewportTitleDlgPythonBindings.cpp index c3d6be1fdd..c3f7fe35f5 100644 --- a/Code/Editor/Lib/Tests/test_ViewportTitleDlgPythonBindings.cpp +++ b/Code/Editor/Lib/Tests/test_ViewportTitleDlgPythonBindings.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -22,7 +23,7 @@ namespace ViewportTitleDlgFuncsUnitTests { class ViewportTitleDlgPythonBindingsFixture - : public testing::Test + : public UnitTest::ScopedAllocatorSetupFixture { public: AzToolsFramework::ToolsApplication m_app; @@ -30,7 +31,6 @@ namespace ViewportTitleDlgFuncsUnitTests void SetUp() override { AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Start(appDesc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Framework/AtomCore/Tests/Main.cpp b/Code/Framework/AtomCore/Tests/Main.cpp index eb4c6bc835..728624d427 100644 --- a/Code/Framework/AtomCore/Tests/Main.cpp +++ b/Code/Framework/AtomCore/Tests/Main.cpp @@ -37,7 +37,7 @@ namespace AZ using namespace AZ; // Handle asserts -class TraceDrillerHook +class TestEnvironmentHook : public AZ::Test::ITestEnvironment , public UnitTest::TraceBusRedirector { @@ -57,5 +57,5 @@ public: } }; -AZ_UNIT_TEST_HOOK(new TraceDrillerHook()); +AZ_UNIT_TEST_HOOK(new TestEnvironmentHook()); diff --git a/Code/Framework/AzCore/AzCore/Asset/AssetCommon.h b/Code/Framework/AzCore/AzCore/Asset/AssetCommon.h index 0b181f6782..2459764e52 100644 --- a/Code/Framework/AzCore/AzCore/Asset/AssetCommon.h +++ b/Code/Framework/AzCore/AzCore/Asset/AssetCommon.h @@ -19,7 +19,6 @@ #include #include #include -#include #include namespace AZ @@ -581,7 +580,6 @@ namespace AZ template using ConnectionPolicy = AssetConnectionPolicy; - using EventProcessingPolicy = Debug::AssetTrackingEventProcessingPolicy<>; ////////////////////////////////////////////////////////////////////////// virtual ~AssetEvents() {} diff --git a/Code/Framework/AzCore/AzCore/Asset/AssetManager.cpp b/Code/Framework/AzCore/AzCore/Asset/AssetManager.cpp index e419666a32..afe3330bd3 100644 --- a/Code/Framework/AzCore/AzCore/Asset/AssetManager.cpp +++ b/Code/Framework/AzCore/AzCore/Asset/AssetManager.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include @@ -164,8 +163,6 @@ namespace AZ::Data AZ_PROFILE_SCOPE(AzCore, "AZ::Data::LoadAssetJob::Process: %s", asset.GetHint().c_str()); - AZ_ASSET_ATTACH_TO_SCOPE(this); - if (m_owner->ValidateAndRegisterAssetLoading(asset)) { LoadAndSignal(asset); @@ -200,7 +197,6 @@ namespace AZ::Data AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(cl_assetLoadDelay)); } - AZ_ASSET_NAMED_SCOPE(asset.GetHint().c_str()); bool loadedSuccessfully = false; if (!cl_assetLoadError && m_requestState == AZ::IO::IStreamerTypes::RequestStatus::Completed) @@ -982,7 +978,6 @@ namespace AZ::Data } AZ_PROFILE_SCOPE(AzCore, "GetAsset: %s", assetInfo.m_relativePath.c_str()); - AZ_ASSET_NAMED_SCOPE("GetAsset: %s", assetInfo.m_relativePath.c_str()); AZStd::shared_ptr dataStream; AssetStreamInfo loadInfo; diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp index 06cb2c3740..693b2f1648 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp @@ -48,10 +48,6 @@ #include #include -#include -#include -#include -#include #include #include @@ -156,7 +152,6 @@ namespace AZ m_reservedDebug = 0; m_recordingMode = Debug::AllocationRecords::RECORD_STACK_IF_NO_FILE_LINE; m_stackRecordLevels = 5; - m_enableDrilling = false; m_useOverrunDetection = false; m_useMalloc = false; } @@ -328,7 +323,6 @@ namespace AZ ->Field("blockSize", &Descriptor::m_memoryBlocksByteSize) ->Field("reservedOS", &Descriptor::m_reservedOS) ->Field("reservedDebug", &Descriptor::m_reservedDebug) - ->Field("enableDrilling", &Descriptor::m_enableDrilling) ->Field("useOverrunDetection", &Descriptor::m_useOverrunDetection) ->Field("useMalloc", &Descriptor::m_useMalloc) ->Field("allocatorRemappings", &Descriptor::m_allocatorRemappings) @@ -367,7 +361,6 @@ namespace AZ ->Attribute(Edit::Attributes::Step, &Descriptor::m_pageSize) ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_reservedOS, "OS reserved memory", "System memory reserved for OS (used only when 'Allocate all memory at startup' is true)") ->DataElement(Edit::UIHandlers::SpinBox, &Descriptor::m_reservedDebug, "Memory reserved for debugger", "System memory reserved for Debug allocator, like memory tracking (used only when 'Allocate all memory at startup' is true)") - ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_enableDrilling, "Enable Driller", "Enable Drilling support for the application (ignored in Release builds)") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_useOverrunDetection, "Use Overrun Detection", "Use the overrun detection memory manager (only available on some platforms, ignored in Release builds)") ->DataElement(Edit::UIHandlers::CheckBox, &Descriptor::m_useMalloc, "Use Malloc", "Use malloc for memory allocations (for memory debugging only, ignored in Release builds)") ; diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h index f245b5f5da..d53b8e1a4e 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h @@ -41,7 +41,6 @@ namespace AZ } namespace AZ::Debug { - class DrillerManager; class LocalFileEventLogger; } @@ -143,7 +142,6 @@ namespace AZ AZ::u64 m_reservedDebug; //!< Reserved memory for Debugging (allocation,etc.). Used only when m_grabAllMemory is set to true. (default: 0) Debug::AllocationRecords::Mode m_recordingMode; //!< When to record stack traces (default: AZ::Debug::AllocationRecords::RECORD_STACK_IF_NO_FILE_LINE) AZ::u64 m_stackRecordLevels; //!< If stack recording is enabled, how many stack levels to record. (default: 5) - bool m_enableDrilling; //!< True to enabled drilling support for the application. RegisterDrillers will be called. Ignored in release. (default: true) bool m_useOverrunDetection; //!< True to use the overrun detection memory management scheme. Only available on some platforms; greatly increases memory consumption. bool m_useMalloc; //!< True to use malloc instead of the internal memory manager. Intended for debugging purposes only. diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h index feefa95973..10f35d6e00 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h @@ -37,11 +37,6 @@ namespace AZ class ComponentFactoryInterface; } - namespace Debug - { - class DrillerManager; - } - struct ApplicationTypeQuery { bool IsEditor() const; diff --git a/Code/Framework/AzCore/AzCore/Component/TickBus.h b/Code/Framework/AzCore/AzCore/Component/TickBus.h index e65efb93f2..1b588f41cc 100644 --- a/Code/Framework/AzCore/AzCore/Component/TickBus.h +++ b/Code/Framework/AzCore/AzCore/Component/TickBus.h @@ -16,7 +16,6 @@ #define AZCORE_COMPONENT_TICK_BUS_H #include -#include #include #include // For TickBus thread events. #include @@ -112,10 +111,6 @@ namespace AZ AZ_FORCE_INLINE bool operator()(TickEvents* left, TickEvents* right) const { return left->GetTickOrder() < right->GetTickOrder(); } }; - /** - * Enable tick bus to work with the AssetTracking - */ - using EventProcessingPolicy = Debug::AssetTrackingEventProcessingPolicy<>; ////////////////////////////////////////////////////////////////////////// /** @@ -217,10 +212,6 @@ namespace AZ */ typedef AZStd::mutex EventQueueMutexType; - /** - * Enable tick bus to work with the AssetTracking - */ - using EventProcessingPolicy = Debug::AssetTrackingEventProcessingPolicy<>; ////////////////////////////////////////////////////////////////////////// /** diff --git a/Code/Framework/AzCore/AzCore/Debug/AssetTracking.cpp b/Code/Framework/AzCore/AzCore/Debug/AssetTracking.cpp deleted file mode 100644 index c03b75d118..0000000000 --- a/Code/Framework/AzCore/AzCore/Debug/AssetTracking.cpp +++ /dev/null @@ -1,326 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include "AssetTracking.h" - -#include -#include -#include -#include -#include - -namespace AZ::Debug -{ - namespace - { - struct AssetTreeNode; - - // Per-thread data that needs to be stored. - struct ThreadData - { - AZStd::vector m_currentAssetStack; - }; - - // Access thread data through a virtual function to ensure that the same thread-local data is being shared across DLLs. - // Otherwise, the thread_local variables are replicated across DLLs that link the AzCore library, and you'll get a - // different version in each module. - class ThreadDataProvider - { - public: - virtual ThreadData& GetThreadData() = 0; - }; - } - - class AssetTrackingImpl final : - public ThreadDataProvider - { - public: - AZ_TYPE_INFO(AssetTrackingImpl, "{01E2A099-3523-40BE-80E0-E0ADD861BEE1}"); - AZ_CLASS_ALLOCATOR(AssetTrackingImpl, OSAllocator, 0); - - AssetTrackingImpl(AssetTreeBase* assetTree, AssetAllocationTableBase* allocationTable); - ~AssetTrackingImpl(); - - void AssetBegin(const char* id, const char* file, int line); - void AssetAttach(void* otherAllocation, const char* file, int line); - void AssetEnd(); - - ThreadData& GetThreadData() override; - - private: - static EnvironmentVariable& GetEnvironmentVariable(); - static AssetTrackingImpl* GetSharedInstance(); - static ThreadData& GetSharedThreadData(); - - using PrimaryAssets = AZStd::unordered_map, AZStd::equal_to, AZStdAssetTrackingAllocator>; - using ThreadData = ThreadData; - using mutex_type = AZStd::mutex; - using lock_type = AZStd::lock_guard; - - mutex_type m_mutex; - PrimaryAssets m_primaryAssets; - AssetTreeNodeBase* m_assetRoot = nullptr; - AssetAllocationTableBase* m_allocationTable = nullptr; - bool m_performingAnalysis = false; - - friend class AssetTracking; - friend class AssetTracking::Scope; - }; - - -/////////////////////////////////////////////////////////////////////////////// -// AssetTrackingImpl methods -/////////////////////////////////////////////////////////////////////////////// - - AssetTrackingImpl::AssetTrackingImpl(AssetTreeBase* assetTree, AssetAllocationTableBase* allocationTable) : - m_assetRoot(&assetTree->GetRoot()), - m_allocationTable(allocationTable) - { - AZ_Assert(!GetSharedInstance(), "Only one AssetTrackingImpl can exist!"); - - GetEnvironmentVariable().Set(this); - AllocatorManager::Instance().EnterProfilingMode(); - } - - AssetTrackingImpl::~AssetTrackingImpl() - { - AllocatorManager::Instance().ExitProfilingMode(); - GetEnvironmentVariable().Reset(); - } - - void AssetTrackingImpl::AssetBegin(const char* id, const char* file, int line) - { - // In the future it may be desirable to organize assets based on where in code the asset was entered into. - // For now these are ignored. - AZ_UNUSED(file); - AZ_UNUSED(line); - - using namespace Internal; - - AssetTrackingId assetId(id); - auto& threadData = GetSharedThreadData(); - AssetTreeNodeBase* parentAsset = threadData.m_currentAssetStack.empty() ? nullptr : threadData.m_currentAssetStack.back(); - AssetTreeNodeBase* childAsset; - AssetPrimaryInfo* assetPrimaryInfo; - - if (!parentAsset) - { - parentAsset = m_assetRoot; - } - - { - lock_type lock(m_mutex); - - // Locate or create the primary record for this asset - auto primaryItr = m_primaryAssets.find(assetId); - - if (primaryItr != m_primaryAssets.end()) - { - assetPrimaryInfo = &primaryItr->second; - } - else - { - auto insertResult = m_primaryAssets.emplace(assetId, AssetPrimaryInfo()); - assetPrimaryInfo = &insertResult.first->second; - assetPrimaryInfo->m_id = &insertResult.first->first; - } - - // Add this asset to the stack for this thread's context - childAsset = parentAsset->FindOrAddChild(assetId, assetPrimaryInfo); - } - - threadData.m_currentAssetStack.push_back(childAsset); - } - - void AssetTrackingImpl::AssetAttach(void* otherAllocation, const char* file, int line) - { - AZ_UNUSED(file); - AZ_UNUSED(line); - - using namespace Internal; - - AssetTreeNodeBase* assetInfo = m_allocationTable->FindAllocation(otherAllocation); - - // We will push back a nullptr if there is no asset, this is necessary to balance the call to AssetEnd() - GetSharedThreadData().m_currentAssetStack.push_back(assetInfo); - } - - void AssetTrackingImpl::AssetEnd() - { - AZ_Assert(!GetSharedThreadData().m_currentAssetStack.empty(), "AssetEnd() called without matching AssetBegin() or AssetAttach. Use the AZ_ASSET_NAMED_SCOPE and AZ_ASSET_ATTACH_TO_SCOPE macros to avoid this!"); - GetSharedThreadData().m_currentAssetStack.pop_back(); - } - - AssetTrackingImpl* AssetTrackingImpl::GetSharedInstance() - { - auto environmentVariable = GetEnvironmentVariable(); - - if(environmentVariable) - { - return *environmentVariable; - } - - return nullptr; - } - - ThreadData& AssetTrackingImpl::GetSharedThreadData() - { - // Cast to the base type so our virtual call doesn't get optimized away. We require GetThreadData() to be executed in the same DLL every time. - return static_cast(GetSharedInstance())->GetThreadData(); - } - - AssetTrackingImpl::ThreadData& AssetTrackingImpl::GetThreadData() - { - static thread_local ThreadData* data = nullptr; - static thread_local typename AZStd::aligned_storage_t storage; - - if (!data) - { - data = new (&storage) ThreadData; - } - - return *data; - } - - EnvironmentVariable& AssetTrackingImpl::GetEnvironmentVariable() - { - static EnvironmentVariable assetTrackingImpl = Environment::CreateVariable(AzTypeInfo::Name()); - - return assetTrackingImpl; - } - - /////////////////////////////////////////////////////////////////////////////// - // AssetTracking::Scope functions - /////////////////////////////////////////////////////////////////////////////// - - AssetTracking::Scope AssetTracking::Scope::ScopeFromAssetId(const char* file, int line, const char* fmt, ...) - { - if (auto impl = AssetTrackingImpl::GetSharedInstance()) - { - static const int BUFFER_SIZE = 1024; - - char buffer[BUFFER_SIZE]; - va_list args; - va_start(args, fmt); - azvsnprintf(buffer, BUFFER_SIZE, fmt, args); - va_end(args); - - impl->AssetBegin(buffer, file, line); - } - - return Scope(); - } - - AssetTracking::Scope AssetTracking::Scope::ScopeFromAttachment(void* attachTo, const char* file, int line) - { - if (auto impl = AssetTrackingImpl::GetSharedInstance()) - { - impl->AssetAttach(attachTo, file, line); - } - - return Scope(); - } - - AssetTracking::Scope::~Scope() - { - if (auto impl = AssetTrackingImpl::GetSharedInstance()) - { - impl->AssetEnd(); - } - } - - AssetTracking::Scope::Scope() - { - } - - /////////////////////////////////////////////////////////////////////////////// - // AssetTracking functions - /////////////////////////////////////////////////////////////////////////////// - - void AssetTracking::EnterScopeByAssetId(const char* file, int line, const char* fmt, ...) - { - if (auto impl = AssetTrackingImpl::GetSharedInstance()) - { - static const int BUFFER_SIZE = 1024; - - char buffer[BUFFER_SIZE]; - va_list args; - va_start(args, fmt); - azvsnprintf(buffer, BUFFER_SIZE, fmt, args); - va_end(args); - - impl->AssetBegin(buffer, file, line); - } - } - - void AssetTracking::EnterScopeByAttachment(void* attachTo, const char* file, int line) - { - if (auto impl = AssetTrackingImpl::GetSharedInstance()) - { - impl->AssetAttach(attachTo, file, line); - } - } - - void AssetTracking::ExitScope() - { - if (auto impl = AssetTrackingImpl::GetSharedInstance()) - { - impl->AssetEnd(); - } - } - - const char* AssetTracking::GetDebugScope() - { - // Output debug information about the current asset scope in the current thread. - // Do not use in production code. -#ifndef RELEASE - static const int BUFFER_SIZE = 1024; - static char buffer[BUFFER_SIZE]; - const auto& assetStack = AssetTrackingImpl::GetSharedInstance()->GetThreadData().m_currentAssetStack; - - if (assetStack.empty()) - { - azsnprintf(buffer, BUFFER_SIZE, ""); - } - else - { - char* pos = buffer; - for (auto itr = assetStack.rbegin(); itr != assetStack.rend(); ++itr) - { - pos += azsnprintf(pos, BUFFER_SIZE - (pos - buffer), "%s\n", (*itr)->GetAssetPrimaryInfo()->m_id->m_id.c_str()); - - if (pos >= buffer + BUFFER_SIZE) - { - break; - } - } - } - - return buffer; -#else - return ""; -#endif - } - - AssetTracking::AssetTracking(AssetTreeBase* assetTree, AssetAllocationTableBase* allocationTable) - { - m_impl.reset(aznew AssetTrackingImpl(assetTree, allocationTable)); - } - - AssetTracking::~AssetTracking() - { - } - - AssetTreeNodeBase* AssetTracking::GetCurrentThreadAsset() const - { - const auto& assetStack = m_impl->GetThreadData().m_currentAssetStack; - AssetTreeNodeBase* result = assetStack.empty() ? nullptr : assetStack.back(); - - return result; - } -} // namespace AzFramework diff --git a/Code/Framework/AzCore/AzCore/Debug/AssetTracking.h b/Code/Framework/AzCore/AzCore/Debug/AssetTracking.h deleted file mode 100644 index 615634c05a..0000000000 --- a/Code/Framework/AzCore/AzCore/Debug/AssetTracking.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include -#include -#include - -#ifndef AZ_TRACK_ASSET_SCOPES -// You may manually uncomment this to enable asset tracking. -//# define AZ_TRACK_ASSET_SCOPES -#endif - -#if !defined(AZ_TRACK_ASSET_SCOPES) -// Default to enabling asset tracking when memory tracking is enabled -# define AZ_TRACK_ASSET_SCOPES -#endif - - -#ifdef AZ_TRACK_ASSET_SCOPES -#define AZ_ASSET_SCOPE_VARIABLE_NAME(line) AZ_JOIN(_az_assettracking_scope_, line) - -/////////////////////////////////////////////////////////////////////////////// -// Preferred macros to use at the top of a scope you want to to track asset memory for. -/////////////////////////////////////////////////////////////////////////////// - -// Creates a new scope with a name, usually the name of an asset being loaded. (This may be a format-string, e.g. "Foo: %s", bar.c_str()) -# define AZ_ASSET_NAMED_SCOPE(...) AZ::Debug::AssetTracking::Scope AZ_ASSET_SCOPE_VARIABLE_NAME(__LINE__) (AZ::Debug::AssetTracking::Scope::ScopeFromAssetId(__FILE__, __LINE__, __VA_ARGS__)) - -// Attempts to enter an existing scope that already owns some other allocation. -# define AZ_ASSET_ATTACH_TO_SCOPE(other) AZ::Debug::AssetTracking::Scope AZ_ASSET_SCOPE_VARIABLE_NAME(__LINE__) (AZ::Debug::AssetTracking::Scope::ScopeFromAttachment((other), __FILE__, __LINE__)) - -/////////////////////////////////////////////////////////////////////////////// -// Optional macros to manually enter and exit a scope. -// It is the responsibility of the user to make sure every call to AZ_ASSET_ENTER_SCOPE_* is matched by a corresponding call to AZ_ASSET_EXIT_SCOPE. -/////////////////////////////////////////////////////////////////////////////// -# define AZ_ASSET_ENTER_SCOPE_BY_ASSET_ID(...) AZ::Debug::AssetTracking::EnterScopeByAssetId(__FILE__, __LINE__, __VA_ARGS__) -# define AZ_ASSET_ENTER_SCOPE_BY_ATTACHMENT(other) AZ::Debug::AssetTracking::EnterScopeByAttachment((other), __FILE__, __LINE__) -# define AZ_ASSET_EXIT_SCOPE AZ::Debug::AssetTracking::ExitScope() - -#else -# define AZ_ASSET_NAMED_SCOPE(...) (void)0 -# define AZ_ASSET_ATTACH_TO_SCOPE(other) (void)0 - -# define AZ_ASSET_ENTER_SCOPE_BY_ASSET_ID(...) (void)0 -# define AZ_ASSET_ENTER_SCOPE_BY_ATTACHMENT(other) (void)0 -# define AZ_ASSET_EXIT_SCOPE (void)0 - -#endif - -namespace AZ -{ - class ReflectContext; - - namespace Debug - { - class AssetTrackingImpl; - class AssetTreeBase; - class AssetTreeNodeBase; - class AssetAllocationTableBase; - - class AssetTracking - { - public: - AZ_TYPE_INFO(AssetTracking, "{D4335180-09A2-415A-8B50-9B734E7CE1E6}"); - AZ_CLASS_ALLOCATOR(AssetTracking, OSAllocator, 0); - - // Provide RAII method for entering and exiting scopes. - // Generally you will want to use the macros at the top of this file rather than instantiating this object directly. - class Scope - { - public: - static Scope ScopeFromAssetId(const char* file, int line, const char* fmt, ...); - static Scope ScopeFromAttachment(void* attachTo, const char* file, int line); - - Scope(Scope&&) = default; - ~Scope(); - - private: - Scope(); - }; - - // Generally you will want to use the macros at the top of this file rather than calling these functions directly. - static void EnterScopeByAssetId(const char* file, int line, const char* fmt, ...); - static void EnterScopeByAttachment(void* attachTo, const char* file, int line); - static void ExitScope(); - static const char* GetDebugScope(); - - AssetTracking(AssetTreeBase* assetTree, AssetAllocationTableBase* allocationTable); - ~AssetTracking(); - - AssetTreeNodeBase* GetCurrentThreadAsset() const; - - private: - AZStd::unique_ptr m_impl; - }; - - // An EBus processing policy that attempts to attach to an existing scope before calling a handler. - // - // Use this on EBuses where you want the callees to track asset memory during their event handlers. - // This will work so long as the callees were themselves allocated inside an existing asset scope. - // - // May be added to an existing EBus with the following code: - // using EventProcessingPolicy = Debug::AssetTrackingEventProcessingPolicy; - // - template - struct AssetTrackingEventProcessingPolicy - { - template - static void CallResult(Results& results, Function&& func, Interface&& iface, InputArgs&&... args) - { - AZ_ASSET_ATTACH_TO_SCOPE(iface); - Parent::CallResult(results, AZStd::forward(func), AZStd::forward(iface), AZStd::forward(args)...); - } - - template - static void Call(Function&& func, Interface&& iface, InputArgs&&... args) - { - AZ_ASSET_ATTACH_TO_SCOPE(iface); - Parent::Call(AZStd::forward(func), AZStd::forward(iface), AZStd::forward(args)...); - } - }; - } - -} // namespace AzFramework diff --git a/Code/Framework/AzCore/AzCore/Debug/AssetTrackingTypes.h b/Code/Framework/AzCore/AzCore/Debug/AssetTrackingTypes.h deleted file mode 100644 index f538c516c3..0000000000 --- a/Code/Framework/AzCore/AzCore/Debug/AssetTrackingTypes.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include -#include -#include - -namespace AZ -{ - namespace Debug - { - struct AssetTrackingId; - } -} - -namespace AZStd -{ - // Declare hash specializations for types that need them; implementations will have to come after the classes are fully defined - template<> - struct hash - { - size_t operator()(const AZ::Debug::AssetTrackingId& id) const; - }; -} - -namespace AZ -{ - namespace Debug - { - class AssetTrackingImpl; - - // Custom allocator for the Analyzer that doesn't go through profiling tools and cannot be overridden - class AssetTrackingAllocator : public AZ::SimpleSchemaAllocator - { - public: - AZ_TYPE_INFO(AssetTrackingAllocator, "{F6C08E92-559C-4153-9620-6A8491F78F10}"); - - using Base = AZ::SimpleSchemaAllocator; - using Descriptor = Base::Descriptor; - - AssetTrackingAllocator() - : Base("AssetTrackingAllocator", "Allocator for the AssetTracking") - { - DisableOverriding(); - } - }; - - using AZStdAssetTrackingAllocator = AZ::AZStdAlloc; - using AssetTrackingString = AZStd::basic_string, AZStdAssetTrackingAllocator>; - - template - using AssetTrackingMap = AZStd::unordered_map, AZStd::equal_to, AZStdAssetTrackingAllocator>; - - - // ID for an asset that is hashable. - // Currently only contains one string identifier, but we may want to store a more sophisticated ID in the future. - struct AssetTrackingId - { - AssetTrackingId(const char* id) : m_id(id) - { - } - - bool operator==(const AssetTrackingId& other) const - { - return m_id == other.m_id; - } - - AssetTrackingString m_id; - }; - - // Primary information about an asset. - // Currently just contains the ID of the asset, but in the future may carry additional information about that asset (such as where in code it was initialized). - struct AssetPrimaryInfo - { - const AssetTrackingId* m_id; - }; - - // Base class for a node in the asset tree. Implemented by the template AssetTreeNode<>. - class AssetTreeNodeBase - { - public: - virtual ~AssetTreeNodeBase() = default; - virtual const AssetPrimaryInfo* GetAssetPrimaryInfo() const = 0; - virtual AssetTreeNodeBase* FindOrAddChild(const AssetTrackingId& id, const AssetPrimaryInfo* info) = 0; - }; - - // Base class for an asset tree. Implemented by the template AssetTree<>. - class AssetTreeBase - { - public: - virtual ~AssetTreeBase() = default; - virtual AssetTreeNodeBase& GetRoot() = 0; - }; - - // Base class for an asset allocation table. Implemented by the template AssetAllocationTable<>. - class AssetAllocationTableBase - { - public: - virtual ~AssetAllocationTableBase() = default; - virtual AssetTreeNodeBase* FindAllocation(void* ptr) const = 0; - }; - } -} - -/////////////////////////////////////////////////////////////////////////////// -// Hash functions for map support -/////////////////////////////////////////////////////////////////////////////// - -inline size_t AZStd::hash::operator()(const AZ::Debug::AssetTrackingId& info) const -{ - return AZStd::hash()(info.m_id); -} - diff --git a/Code/Framework/AzCore/AzCore/Debug/AssetTrackingTypesImpl.h b/Code/Framework/AzCore/AzCore/Debug/AssetTrackingTypesImpl.h deleted file mode 100644 index eac809c406..0000000000 --- a/Code/Framework/AzCore/AzCore/Debug/AssetTrackingTypesImpl.h +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include - -#include - -namespace AZ -{ - namespace Debug - { - // A node in the current asset state tree. - // Each thread maintains a stack of currently in-scope assets. As this stack changes the asset tree forms. - // The same asset may appear in multiple places in the tree, e.g. if asset A is a common asset loaded by both asset B and asset C, the tree may look like: - // Root -> B -> A - // \--> C -> A - template - class AssetTreeNode : public AssetTreeNodeBase - { - public: - AssetTreeNode(const AssetPrimaryInfo* primaryInfo = nullptr, AssetTreeNode* parent = nullptr) : - m_primaryinfo(primaryInfo), - m_parent(parent) - { - } - - ~AssetTreeNode() override = default; - - const AssetPrimaryInfo* GetAssetPrimaryInfo() const override - { - return m_primaryinfo; - } - - AssetTreeNodeBase* FindOrAddChild(const AssetTrackingId& id, const AssetPrimaryInfo* info) override - { - AssetTreeNodeBase* result = nullptr; - auto childItr = m_children.find(id); - - if (childItr != m_children.end()) - { - result = &childItr->second; - } - else - { - auto childResult = m_children.emplace(id, AssetTreeNode(info, this)); - result = &childResult.first->second; - } - - return result; - } - - - using AssetMap = AssetTrackingMap; - - const AssetPrimaryInfo* m_primaryinfo; - AssetTreeNode* m_parent; - AssetMap m_children; - AssetDataT m_data; - }; - - template - class AssetTree : public AssetTreeBase - { - public: - ~AssetTree() override = default; - - AssetTreeNodeBase& GetRoot() override - { - return m_rootAssets; - } - - using NodeType = AssetTreeNode; - - NodeType m_rootAssets; - }; - - - template - struct AllocationRecord - { - AssetTreeNodeBase* m_asset; - uint32_t m_size; - AllocationDataT m_data; - }; - - - template - class AllocationTable : public AssetAllocationTableBase - { - public: - using RecordType = AllocationRecord; - using AllocationReverseMap = AZStd::map, AZStdAssetTrackingAllocator>; - using mutex_type = AZStd::mutex; - using lock_type = AZStd::lock_guard; - - AllocationTable(mutex_type& mutex) : m_mutex(mutex) - { - } - ~AllocationTable() override = default; - - AssetTreeNodeBase* FindAllocation(void* ptr) const override - { - // Note that ptr is not guaranteed to have an exact entry in the map. For instance, ptr may point to a member of the original object that was allocated, or - // ptr may be a different "this" pointer in the case of multiple inheritance. - // - // To solve this, we use lower_bound() and check to see if ptr falls in the range of the nearest allocation. Our map uses AZStd::greater instead of - // AZStd::less as its sorting function, and thus sorts largest-to-smallest instead of smallest-to-largest. This causes lower_bound() to return the first - // iterator that is not greater than otherAllocation, i.e. less than or equal to ptr. - lock_type lock(m_mutex); - auto itr = m_allocationTable.lower_bound(ptr); - AssetTreeNodeBase* result = nullptr; - - if (itr != m_allocationTable.end()) - { - // Check if otherAllocation is within the size range of the allocation we found - if (reinterpret_cast(ptr) <= reinterpret_cast(itr->first) + itr->second.m_size) - { - result = itr->second.m_asset; - } - } - - return result; - } - - void ReallocateAllocation(void* prevAddress, void* newAddress, size_t newByteSize) - { - lock_type lock(m_mutex); - auto itr = m_allocationTable.find(prevAddress); - - if (itr != m_allocationTable.end()) - { - RecordType newAllocation = itr->second; - newAllocation.m_size = (uint32_t)newByteSize; - - m_allocationTable.erase(itr); - m_allocationTable.emplace(newAddress, AZStd::move(newAllocation)); - } - } - - void ResizeAllocation(void* address, size_t newSize) - { - // Resize an existing allocation if we can find it - lock_type lock(m_mutex); - auto itr = m_allocationTable.find(address); - - if (itr != m_allocationTable.end()) - { - itr->second.m_size = (uint32_t)newSize; - } - } - - AllocationReverseMap& Get() - { - return m_allocationTable; - } - - const AllocationReverseMap& Get() const - { - return m_allocationTable; - } - - private: - AllocationReverseMap m_allocationTable; - mutex_type& m_mutex; - }; - } -} diff --git a/Code/Framework/AzCore/AzCore/Debug/EventTrace.cpp b/Code/Framework/AzCore/AzCore/Debug/EventTrace.cpp deleted file mode 100644 index 58fa1f6cca..0000000000 --- a/Code/Framework/AzCore/AzCore/Debug/EventTrace.cpp +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include -#include -#include - -namespace AZ::Debug -{ - EventTrace::ScopedSlice::ScopedSlice(const char* name, const char* category) - : m_Name(name) - , m_Category(category) - , m_Time(AZStd::GetTimeNowMicroSecond()) - { - } - - EventTrace::ScopedSlice::~ScopedSlice() - { - EventTraceDrillerBus::TryQueueBroadcast( - &EventTraceDrillerInterface::RecordSlice, m_Name, m_Category, AZStd::this_thread::get_id(), m_Time, - (uint32_t)(AZStd::GetTimeNowMicroSecond() - m_Time)); - } -} // namespace AZ::Debug diff --git a/Code/Framework/AzCore/AzCore/Debug/EventTrace.h b/Code/Framework/AzCore/AzCore/Debug/EventTrace.h deleted file mode 100644 index 1bc7ee20a6..0000000000 --- a/Code/Framework/AzCore/AzCore/Debug/EventTrace.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include -#include -#include - -namespace AZStd -{ - struct thread_id; -} - -namespace AZ -{ - namespace Debug - { - namespace EventTrace - { - class ScopedSlice - { - public: - ScopedSlice(const char* name, const char* category); - ~ScopedSlice(); - - private: - const char* m_Name; - const char* m_Category; - u64 m_Time; - }; - } - } -} - -#define AZ_TRACE_METHOD_NAME_CATEGORY(name, category) -#define AZ_TRACE_METHOD_NAME(name) AZ_TRACE_METHOD_NAME_CATEGORY(name, "") -#define AZ_TRACE_METHOD() AZ_TRACE_METHOD_NAME(AZ_FUNCTION_SIGNATURE) diff --git a/Code/Framework/AzCore/AzCore/Debug/EventTraceDriller.cpp b/Code/Framework/AzCore/AzCore/Debug/EventTraceDriller.cpp deleted file mode 100644 index d0722616f3..0000000000 --- a/Code/Framework/AzCore/AzCore/Debug/EventTraceDriller.cpp +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include -#include -#include - -namespace AZ::Debug -{ - namespace Crc - { - constexpr u32 EventTraceDriller = AZ_CRC_CE("EventTraceDriller"); - constexpr u32 Slice = AZ_CRC_CE("Slice"); - constexpr u32 ThreadInfo = AZ_CRC_CE("ThreadInfo"); - constexpr u32 Name = AZ_CRC_CE("Name"); - constexpr u32 Category = AZ_CRC_CE("Category"); - constexpr u32 ThreadId = AZ_CRC_CE("ThreadId"); - constexpr u32 Timestamp = AZ_CRC_CE("Timestamp"); - constexpr u32 Duration = AZ_CRC_CE("Duration"); - constexpr u32 Instant = AZ_CRC_CE("Instant"); - } - - EventTraceDriller::EventTraceDriller() - { - EventTraceDrillerSetupBus::Handler::BusConnect(); - AZStd::ThreadDrillerEventBus::Handler::BusConnect(); - } - - EventTraceDriller::~EventTraceDriller() - { - AZStd::ThreadDrillerEventBus::Handler::BusDisconnect(); - EventTraceDrillerSetupBus::Handler::BusDisconnect(); - } - - void EventTraceDriller::Start(const Param* params, int numParams) - { - (void)params; - (void)numParams; - - EventTraceDrillerBus::Handler::BusConnect(); - TickBus::Handler::BusConnect(); - - EventTraceDrillerBus::AllowFunctionQueuing(true); - } - - void EventTraceDriller::Stop() - { - EventTraceDrillerBus::AllowFunctionQueuing(false); - EventTraceDrillerBus::ClearQueuedEvents(); - - EventTraceDrillerBus::Handler::BusDisconnect(); - TickBus::Handler::BusDisconnect(); - } - - void EventTraceDriller::OnTick(float deltaTime, ScriptTimePoint time) - { - (void)deltaTime; - (void)time; - - AZ_TRACE_METHOD(); - RecordThreads(); - EventTraceDrillerBus::ExecuteQueuedEvents(); - } - - void EventTraceDriller::SetThreadName(const AZStd::thread_id& id, const char* name) - { - AZStd::lock_guard lock(m_ThreadMutex); - m_Threads[(size_t)id.m_id] = ThreadData{ name }; - } - - void EventTraceDriller::OnThreadEnter(const AZStd::thread::id& id, const AZStd::thread_desc* desc) - { - if (desc && desc->m_name) - { - SetThreadName(id, desc->m_name); - } - } - - void EventTraceDriller::OnThreadExit(const AZStd::thread::id& id) - { - AZStd::lock_guard lock(m_ThreadMutex); - m_Threads.erase((size_t)id.m_id); - } - - void EventTraceDriller::RecordThreads() - { - if (!m_output || m_Threads.empty()) - { - return; - } - // Main bus mutex guards m_output. - auto& context = EventTraceDrillerBus::GetOrCreateContext(); - - AZStd::scoped_lock lock(context.m_contextMutex, m_ThreadMutex); - for (const auto& keyValue : m_Threads) - { - m_output->BeginTag(Crc::EventTraceDriller); - m_output->BeginTag(Crc::ThreadInfo); - m_output->Write(Crc::ThreadId, keyValue.first); - m_output->Write(Crc::Name, keyValue.second.name); - m_output->EndTag(Crc::ThreadInfo); - m_output->EndTag(Crc::EventTraceDriller); - } - } - - void EventTraceDriller::RecordSlice( - const char* name, - const char* category, - const AZStd::thread_id threadId, - AZ::u64 timestamp, - AZ::u32 duration) - { - m_output->BeginTag(Crc::EventTraceDriller); - m_output->BeginTag(Crc::Slice); - m_output->Write(Crc::Name, name); - m_output->Write(Crc::Category, category); - m_output->Write(Crc::ThreadId, (size_t)threadId.m_id); - m_output->Write(Crc::Timestamp, timestamp); - m_output->Write(Crc::Duration, std::max(duration, 1u)); - m_output->EndTag(Crc::Slice); - m_output->EndTag(Crc::EventTraceDriller); - } - - void EventTraceDriller::RecordInstantGlobal( - const char* name, - const char* category, - AZ::u64 timestamp) - { - m_output->BeginTag(Crc::EventTraceDriller); - m_output->BeginTag(Crc::Instant); - m_output->Write(Crc::Name, name); - m_output->Write(Crc::Category, category); - m_output->Write(Crc::Timestamp, timestamp); - m_output->EndTag(Crc::Instant); - m_output->EndTag(Crc::EventTraceDriller); - } - - void EventTraceDriller::RecordInstantThread( - const char* name, - const char* category, - const AZStd::thread_id threadId, - AZ::u64 timestamp) - { - m_output->BeginTag(Crc::EventTraceDriller); - m_output->BeginTag(Crc::Instant); - m_output->Write(Crc::Name, name); - m_output->Write(Crc::Category, category); - m_output->Write(Crc::ThreadId, (size_t)threadId.m_id); - m_output->Write(Crc::Timestamp, timestamp); - m_output->EndTag(Crc::Instant); - m_output->EndTag(Crc::EventTraceDriller); - } -} // namespace AZ::Debug diff --git a/Code/Framework/AzCore/AzCore/Debug/EventTraceDriller.h b/Code/Framework/AzCore/AzCore/Debug/EventTraceDriller.h deleted file mode 100644 index fee71147ca..0000000000 --- a/Code/Framework/AzCore/AzCore/Debug/EventTraceDriller.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include -#include -#include -#include -#include - -namespace AZ -{ - namespace Debug - { - class EventTraceDriller - : public Driller - , public EventTraceDrillerBus::Handler - , public EventTraceDrillerSetupBus::Handler - , public AZStd::ThreadDrillerEventBus::Handler - , public AZ::TickBus::Handler - { - public: - AZ_CLASS_ALLOCATOR(EventTraceDriller, OSAllocator, 0) - - EventTraceDriller(); - virtual ~EventTraceDriller(); - - private: - // Driller - ////////////////////////////////////////////////////////////////////////// - const char* GroupName() const override { return "SystemDrillers"; } - const char* GetName() const override { return "EventTraceDriller"; } - const char* GetDescription() const override { return "Handles timed events for a Chrome Tracing."; } - void Start(const Param* params = NULL, int numParams = 0) override; - void Stop() override; - - // ThreadBus - ////////////////////////////////////////////////////////////////////////// - void OnThreadEnter(const AZStd::thread::id& id, const AZStd::thread_desc* desc) override; - void OnThreadExit(const AZStd::thread::id& id) override; - - // TickBus - ////////////////////////////////////////////////////////////////////////// - void OnTick(float deltaTime, ScriptTimePoint time) override; - - // EventTraceDrillerSetupBus - ////////////////////////////////////////////////////////////////////////// - void SetThreadName(const AZStd::thread_id& threadId, const char* name) override; - - // EventTraceDrillerBus - ////////////////////////////////////////////////////////////////////////// - void RecordSlice( - const char* name, - const char* category, - const AZStd::thread_id threadId, - AZ::u64 timestamp, - AZ::u32 duration) override; - - void RecordInstantGlobal( - const char* name, - const char* category, - AZ::u64 timestamp) override; - - void RecordInstantThread( - const char* name, - const char* category, - const AZStd::thread_id threadId, - AZ::u64 timestamp) override; - - void RecordThreads(); - - struct ThreadData - { - AZStd::string name; - }; - - AZStd::recursive_mutex m_ThreadMutex; - AZStd::unordered_map, AZStd::equal_to, OSStdAllocator> m_Threads; - }; - } -} // namespace AZ diff --git a/Code/Framework/AzCore/AzCore/Debug/EventTraceDrillerBus.h b/Code/Framework/AzCore/AzCore/Debug/EventTraceDrillerBus.h deleted file mode 100644 index c588559088..0000000000 --- a/Code/Framework/AzCore/AzCore/Debug/EventTraceDrillerBus.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include -#include -#include - -namespace AZStd -{ - struct thread_id; -} - -namespace AZ -{ - namespace Debug - { - class EventTraceDrillerInterface - : public DrillerEBusTraits - { - public: - ////////////////////////////////////////////////////////////////////////// - // EBusTraits overrides - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; - static const bool EnableEventQueue = true; - static const bool EventQueueingActiveByDefault = false; - ////////////////////////////////////////////////////////////////////////// - - virtual ~EventTraceDrillerInterface() {} - - virtual void RecordSlice( - const char* name, - const char* category, - const AZStd::thread_id threadId, - AZ::u64 timestamp, - AZ::u32 duration) = 0; - - virtual void RecordInstantThread( - const char* name, - const char* category, - const AZStd::thread_id threadId, - AZ::u64 timestamp) = 0; - - virtual void RecordInstantGlobal( - const char* name, - const char* category, - AZ::u64 timestamp) = 0; - }; - - typedef AZ::EBus EventTraceDrillerBus; - - class EventTraceDrillerSetupInterface - : public DrillerEBusTraits - { - public: - ////////////////////////////////////////////////////////////////////////// - // EBusTraits overrides - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; - ////////////////////////////////////////////////////////////////////////// - - virtual ~EventTraceDrillerSetupInterface() {} - - virtual void SetThreadName(const AZStd::thread_id& threadId, const char* name) = 0; - }; - - typedef AZ::EBus EventTraceDrillerSetupBus; - } -} - -#define AZ_TRACE_INSTANT_GLOBAL_CATEGORY(name, category) \ - EBUS_QUEUE_EVENT(AZ::Debug::EventTraceDrillerBus, RecordInstantGlobal, name, category, AZStd::GetTimeNowMicroSecond()) -#define AZ_TRACE_INSTANT_GLOBAL(name) AZ_TRACE_INSTANT_GLOBAL_CATEGORY(name, "") - -#define AZ_TRACE_INSTANT_THREAD_CATEGORY(name, category) \ - EBUS_QUEUE_EVENT(AZ::Debug::EventTraceDrillerBus, RecordInstantThread, name, category, AZStd::this_thread::get_id(), AZStd::GetTimeNowMicroSecond()) -#define AZ_TRACE_INSTANT_THREAD(name) AZ_TRACE_INSTANT_THREAD_CATEGORY(name, "") diff --git a/Code/Framework/AzCore/AzCore/Debug/MemoryProfiler.h b/Code/Framework/AzCore/AzCore/Debug/MemoryProfiler.h index 5b22e20c60..827f00134d 100644 --- a/Code/Framework/AzCore/AzCore/Debug/MemoryProfiler.h +++ b/Code/Framework/AzCore/AzCore/Debug/MemoryProfiler.h @@ -8,7 +8,7 @@ #pragma once #ifndef AZ_PROFILE_MEMORY_ALLOC -// No other profiler has defined the performance markers AZ_PROFILE_MEMORY_ALLOC (and friends), fall back to a Driller implementation (currently empty) +// No other profiler has defined the performance markers AZ_PROFILE_MEMORY_ALLOC (and friends), fall back to current implementation (empty) # define AZ_PROFILE_MEMORY_ALLOC(category, address, size, context) # define AZ_PROFILE_MEMORY_ALLOC_EX(category, filename, lineNumber, address, size, context) # define AZ_PROFILE_MEMORY_FREE(category, address) diff --git a/Code/Framework/AzCore/AzCore/Debug/Trace.cpp b/Code/Framework/AzCore/AzCore/Debug/Trace.cpp index 2c2b8215c0..74f27481c1 100644 --- a/Code/Framework/AzCore/AzCore/Debug/Trace.cpp +++ b/Code/Framework/AzCore/AzCore/Debug/Trace.cpp @@ -12,7 +12,6 @@ #include #include -#include #include #include @@ -276,8 +275,6 @@ namespace AZ::Debug logger->Flush(); // Flush as an assert may indicate a crash is imminent. } - EBUS_EVENT(TraceMessageDrillerBus, OnPreAssert, fileName, line, funcName, message); - TraceMessageResult result; EBUS_EVENT_RESULT(result, TraceMessageBus, OnPreAssert, fileName, line, funcName, message); @@ -302,7 +299,6 @@ namespace AZ::Debug azstrcat(message, g_maxMessageLength, "\n"); Output(g_dbgSystemWnd, message); - EBUS_EVENT(TraceMessageDrillerBus, OnAssert, message); EBUS_EVENT_RESULT(result, TraceMessageBus, OnAssert, message); if (result.m_value) { @@ -405,8 +401,6 @@ namespace AZ::Debug logger->RecordStringEvent(ErrorEventId, message); } - EBUS_EVENT(TraceMessageDrillerBus, OnPreError, window, fileName, line, funcName, message); - TraceMessageResult result; EBUS_EVENT_RESULT(result, TraceMessageBus, OnPreError, window, fileName, line, funcName, message); if (result.m_value) @@ -421,7 +415,6 @@ namespace AZ::Debug azstrcat(message, g_maxMessageLength, "\n"); Output(window, message); - EBUS_EVENT(TraceMessageDrillerBus, OnError, window, message); EBUS_EVENT_RESULT(result, TraceMessageBus, OnError, window, message); Output(window, "==================================================================\n"); if (result.m_value) @@ -457,8 +450,6 @@ namespace AZ::Debug logger->RecordStringEvent(WarningEventId, message); } - EBUS_EVENT(TraceMessageDrillerBus, OnPreWarning, window, fileName, line, funcName, message); - TraceMessageResult result; EBUS_EVENT_RESULT(result, TraceMessageBus, OnPreWarning, window, fileName, line, funcName, message); if (result.m_value) @@ -472,7 +463,6 @@ namespace AZ::Debug azstrcat(message, g_maxMessageLength, "\n"); Output(window, message); - EBUS_EVENT(TraceMessageDrillerBus, OnWarning, window, message); EBUS_EVENT_RESULT(result, TraceMessageBus, OnWarning, window, message); Output(window, "==================================================================\n"); } @@ -501,8 +491,6 @@ namespace AZ::Debug logger->RecordStringEvent(PrintfEventId, message); } - EBUS_EVENT(TraceMessageDrillerBus, OnPrintf, window, message); - TraceMessageResult result; EBUS_EVENT_RESULT(result, TraceMessageBus, OnPrintf, window, message); if (result.m_value) @@ -531,7 +519,6 @@ namespace AZ::Debug // only call into Ebusses if we are not in a recursive-exception situation as that // would likely just lead to even more exceptions. - EBUS_EVENT(TraceMessageDrillerBus, OnOutput, window, message); TraceMessageResult result; EBUS_EVENT_RESULT(result, TraceMessageBus, OnOutput, window, message); if (result.m_value) diff --git a/Code/Framework/AzCore/AzCore/Debug/TraceMessagesDriller.cpp b/Code/Framework/AzCore/AzCore/Debug/TraceMessagesDriller.cpp deleted file mode 100644 index dbe66838a4..0000000000 --- a/Code/Framework/AzCore/AzCore/Debug/TraceMessagesDriller.cpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include - -namespace AZ::Debug -{ - //========================================================================= - // Start - // [2/6/2013] - //========================================================================= - void TraceMessagesDriller::Start(const Param* params, int numParams) - { - (void)params; - (void)numParams; - BusConnect(); - } - - //========================================================================= - // Stop - // [2/6/2013] - //========================================================================= - void TraceMessagesDriller::Stop() - { - BusDisconnect(); - } - - //========================================================================= - // OnAssert - // [2/6/2013] - //========================================================================= - void TraceMessagesDriller::OnAssert(const char* message) - { - // Not sure if we can really capture assert since the code will stop executing very soon. - m_output->BeginTag(AZ_CRC_CE("TraceMessagesDriller")); - m_output->Write(AZ_CRC_CE("OnAssert"), message); - m_output->EndTag(AZ_CRC_CE("TraceMessagesDriller")); - } - - //========================================================================= - // OnException - // [2/6/2013] - //========================================================================= - void TraceMessagesDriller::OnException(const char* message) - { - // Not sure if we can really capture exception since the code will stop executing very soon. - m_output->BeginTag(AZ_CRC_CE("TraceMessagesDriller")); - m_output->Write(AZ_CRC_CE("OnException"), message); - m_output->EndTag(AZ_CRC_CE("TraceMessagesDriller")); - } - - //========================================================================= - // OnError - // [2/6/2013] - //========================================================================= - void TraceMessagesDriller::OnError(const char* window, const char* message) - { - m_output->BeginTag(AZ_CRC_CE("TraceMessagesDriller")); - m_output->BeginTag(AZ_CRC_CE("OnError")); - m_output->Write(AZ_CRC_CE("Window"), window); - m_output->Write(AZ_CRC_CE("Message"), message); - m_output->EndTag(AZ_CRC_CE("OnError")); - m_output->EndTag(AZ_CRC_CE("TraceMessagesDriller")); - } - - //========================================================================= - // OnWarning - // [2/6/2013] - //========================================================================= - void TraceMessagesDriller::OnWarning(const char* window, const char* message) - { - m_output->BeginTag(AZ_CRC_CE("TraceMessagesDriller")); - m_output->BeginTag(AZ_CRC_CE("OnWarning")); - m_output->Write(AZ_CRC_CE("Window"), window); - m_output->Write(AZ_CRC_CE("Message"), message); - m_output->EndTag(AZ_CRC_CE("OnWarning")); - m_output->EndTag(AZ_CRC_CE("TraceMessagesDriller")); - } - - //========================================================================= - // OnPrintf - // [2/6/2013] - //========================================================================= - void TraceMessagesDriller::OnPrintf(const char* window, const char* message) - { - m_output->BeginTag(AZ_CRC_CE("TraceMessagesDriller")); - m_output->BeginTag(AZ_CRC_CE("OnPrintf")); - m_output->Write(AZ_CRC_CE("Window"), window); - m_output->Write(AZ_CRC_CE("Message"), message); - m_output->EndTag(AZ_CRC_CE("OnPrintf")); - m_output->EndTag(AZ_CRC_CE("TraceMessagesDriller")); - } -} // namespace AZ diff --git a/Code/Framework/AzCore/AzCore/Debug/TraceMessagesDriller.h b/Code/Framework/AzCore/AzCore/Debug/TraceMessagesDriller.h deleted file mode 100644 index 32726931fc..0000000000 --- a/Code/Framework/AzCore/AzCore/Debug/TraceMessagesDriller.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include -#include - -namespace AZ -{ - namespace Debug - { - /** - * Trace messages driller class - */ - class TraceMessagesDriller - : public Driller - , public TraceMessageDrillerBus::Handler - { - public: - AZ_CLASS_ALLOCATOR(TraceMessagesDriller, OSAllocator, 0) - - protected: - ////////////////////////////////////////////////////////////////////////// - // Driller - const char* GroupName() const override { return "SystemDrillers"; } - const char* GetName() const override { return "TraceMessagesDriller"; } - const char* GetDescription() const override { return "Handles all system messages like Assert, Exception, Error, Warning, Printf, etc."; } - void Start(const Param* params = NULL, int numParams = 0) override; - void Stop() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // TraceMessagesDrillerBus - /// Triggered when a AZ_Assert failed. This is terminating event! (the code will break, crash). - void OnAssert(const char* message) override; - void OnException(const char* message) override; - void OnError(const char* window, const char* message) override; - void OnWarning(const char* window, const char* message) override; - void OnPrintf(const char* window, const char* message) override; - ////////////////////////////////////////////////////////////////////////// - }; - } // namespace Debug -} // namespace AZ diff --git a/Code/Framework/AzCore/AzCore/Debug/TraceMessagesDrillerBus.h b/Code/Framework/AzCore/AzCore/Debug/TraceMessagesDrillerBus.h deleted file mode 100644 index 6230f4af21..0000000000 --- a/Code/Framework/AzCore/AzCore/Debug/TraceMessagesDrillerBus.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once - -#include - -namespace AZ -{ - namespace Debug - { - /** - * Trace messages event handle. - * All messages are optional (they have default implementation) and you can handle only one at a time. - * Driller messages are similar to TraceMessages, but do not provide a return value, - * as we only care about collecting driller messages, not operating on them. - * - * We use a driller bus so all messages are sending in exclusive matter no other driller messages - * can be triggered at that moment, so we already preserve the calling order. You can assume - * all access code in the driller framework in guarded. You can manually lock the driller mutex are you - * use by using \ref AZ::Debug::DrillerEBusMutex. - */ - class TraceMessageDrillerEvents - : public DrillerEBusTraits - { - public: - virtual ~TraceMessageDrillerEvents() {} - - /// Triggered when a AZ_Assert failed. This is terminating event! (the code will break, crash). - virtual void OnPreAssert(const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) {} - virtual void OnAssert(const char* /*message*/) {} - virtual void OnException(const char* /*message*/) {} - virtual void OnPreError(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) {} - virtual void OnError(const char* /*window*/, const char* /*message*/) {} - virtual void OnPreWarning(const char* /*window*/, const char* /*fileName*/, int /*line*/, const char* /*func*/, const char* /*message*/) {} - virtual void OnWarning(const char* /*window*/, const char* /*message*/) {} - virtual void OnPrintf(const char* /*window*/, const char* /*message*/) {} - /** - * All trace functions you output to anything. So if you want to handle all the output this is the place. - * You are not given the choice to disable the system output as if you listen at that level you can't make - * that decision. Otherwise we can trigger an assert without even one line of message send to the console/debugger. - */ - virtual void OnOutput(const char* /*window*/, const char* /*message*/) {} - }; - - typedef AZ::EBus TraceMessageDrillerBus; - } // namespace Debug -} // namespace AZ diff --git a/Code/Framework/AzCore/AzCore/Driller/DefaultStringPool.h b/Code/Framework/AzCore/AzCore/Driller/DefaultStringPool.h deleted file mode 100644 index 630061f089..0000000000 --- a/Code/Framework/AzCore/AzCore/Driller/DefaultStringPool.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#ifndef AZCORE_DRILLER_DEFAULT_STRING_POOL_H -#define AZCORE_DRILLER_DEFAULT_STRING_POOL_H - -#include - -#include -#include - -namespace AZ -{ - namespace Debug - { - template - struct unordered_map - { - typedef AZStd::unordered_map, AZStd::equal_to, OSStdAllocator> type; - }; - - template - struct unordered_set - { - typedef AZStd::unordered_set, AZStd::equal_to, OSStdAllocator> type; - }; - - /** - * Default implementation of a string pool. - */ - class DrillerDefaultStringPool - : public DrillerStringPool - { - public: - virtual ~DrillerDefaultStringPool() - { - Reset(); - } - - typedef unordered_map::type CrcToStringMapType; - typedef unordered_set::type OwnedStringsMapType; - - /** - * Add a copy of the string to the pool. If we return true the string was added otherwise it was already in the bool. - * In both cases the crc32 of the string and the pointer to the shared copy is returned (optional for poolStringAddress)! - */ - virtual bool InsertCopy(const char* string, unsigned int length, AZ::u32& crc32, const char** poolStringAddress = nullptr) - { - crc32 = AZ::Crc32(string, length); - CrcToStringMapType::pair_iter_bool insertIt = m_crcToStringMap.insert_key(crc32); - if (insertIt.second) - { - char* newString = reinterpret_cast(azmalloc(length + 1, 1, AZ::OSAllocator)); - memcpy(newString, string, length); - newString[length] = '\0'; // terminate - m_ownedStrings.insert(newString); - insertIt.first->second = newString; - } - if (poolStringAddress) - { - *poolStringAddress = insertIt.first->second; - } - return insertIt.second; - } - - /** - * Same as the InsertCopy above without actually coping the string into the pool. The pool assumes that - * none of the strings added to the pool will be deleted. - */ - virtual bool Insert(const char* string, unsigned int length, AZ::u32& crc32) - { - crc32 = AZ::Crc32(string, length); - return m_crcToStringMap.insert(AZStd::make_pair(crc32, string)).second; - } - - /// Finds a string in the pool by crc32. - virtual const char* Find(AZ::u32 crc32) - { - CrcToStringMapType::iterator it = m_crcToStringMap.find(crc32); - if (it != m_crcToStringMap.end()) - { - return it->second; - } - return NULL; - } - - virtual void Erase(AZ::u32 crc32) - { - CrcToStringMapType::iterator it = m_crcToStringMap.find(crc32); - if (it != m_crcToStringMap.end()) - { - OwnedStringsMapType::iterator ownerIt = m_ownedStrings.find(it->second); - if (ownerIt != m_ownedStrings.end()) - { - azfree(const_cast(it->second), AZ::OSAllocator); - m_ownedStrings.erase(ownerIt); - } - m_crcToStringMap.erase(it); - } - } - - virtual void Reset() - { - for (OwnedStringsMapType::iterator it = m_ownedStrings.begin(); it != m_ownedStrings.end(); ++it) - { - azfree(const_cast(*it), AZ::OSAllocator); - } - m_crcToStringMap.clear(); - m_ownedStrings.clear(); - } - protected: - CrcToStringMapType m_crcToStringMap; - OwnedStringsMapType m_ownedStrings; - }; - } // namespace Debug -} // namespace AZ - -#endif // AZCORE_DRILLER_DEFAULT_STRING_POOL_H -#pragma once - - diff --git a/Code/Framework/AzCore/AzCore/Driller/Driller.cpp b/Code/Framework/AzCore/AzCore/Driller/Driller.cpp deleted file mode 100644 index 7e986be81e..0000000000 --- a/Code/Framework/AzCore/AzCore/Driller/Driller.cpp +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include - -#include -#include -#include - - -namespace AZ::Debug -{ - class DrillerManagerImpl - : public DrillerManager - { - public: - AZ_CLASS_ALLOCATOR(DrillerManagerImpl, OSAllocator, 0); - - using SessionListType = forward_list::type; - SessionListType m_sessions; - using DrillerArrayType = vector::type; - DrillerArrayType m_drillers; - - ~DrillerManagerImpl() override; - - void Register(Driller* factory) override; - void Unregister(Driller* factory) override; - - void FrameUpdate() override; - - DrillerSession* Start(DrillerOutputStream& output, const DrillerListType& drillerList, int numFrames = -1) override; - void Stop(DrillerSession* session) override; - - int GetNumDrillers() const override { return static_cast(m_drillers.size()); } - Driller* GetDriller(int index) override { return m_drillers[index]; } - }; - - ////////////////////////////////////////////////////////////////////////// - // Driller - - //========================================================================= - // Register - // [3/17/2011] - //========================================================================= - AZ::u32 Driller::GetId() const - { - return AZ::Crc32(GetName()); - } - - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // Driller Manager - - //========================================================================= - // Register - // [3/17/2011] - //========================================================================= - DrillerManager* DrillerManager::Create(/*const Descriptor& desc*/) - { - const bool createAllocator = !AZ::AllocatorInstance::IsReady(); - if (createAllocator) - { - AZ::AllocatorInstance::Create(); - } - - DrillerManagerImpl* impl = aznew DrillerManagerImpl; - impl->m_ownsOSAllocator = createAllocator; - return impl; - } - - //========================================================================= - // Register - // [3/17/2011] - //========================================================================= - void DrillerManager::Destroy(DrillerManager* manager) - { - const bool allocatorCreated = manager->m_ownsOSAllocator; - delete manager; - if (allocatorCreated) - { - AZ::AllocatorInstance::Destroy(); - } - } - - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // DrillerManagerImpl - - //========================================================================= - // ~DrillerManagerImpl - // [3/17/2011] - //========================================================================= - DrillerManagerImpl::~DrillerManagerImpl() - { - while (!m_sessions.empty()) - { - Stop(&m_sessions.front()); - } - - while (!m_drillers.empty()) - { - Driller* driller = m_drillers[0]; - Unregister(driller); - delete driller; - } - } - - //========================================================================= - // Register - // [3/17/2011] - //========================================================================= - void - DrillerManagerImpl::Register(Driller* driller) - { - AZ_Assert(driller, "You must provide a valid factory!"); - for (size_t i = 0; i < m_drillers.size(); ++i) - { - if (m_drillers[i]->GetId() == driller->GetId()) - { - AZ_Error("Debug", false, "Driller with id %08x has already been registered! You can't have two factory instances for the same driller type", driller->GetId()); - return; - } - } - m_drillers.push_back(driller); - } - - //========================================================================= - // Unregister - // [3/17/2011] - //========================================================================= - void - DrillerManagerImpl::Unregister(Driller* driller) - { - AZ_Assert(driller, "You must provide a valid factory!"); - for (DrillerArrayType::iterator iter = m_drillers.begin(); iter != m_drillers.end(); ++iter) - { - if ((*iter)->GetId() == driller->GetId()) - { - m_drillers.erase(iter); - return; - } - } - - AZ_Error("Debug", false, "Failed to find driller factory with id %08x", driller->GetId()); - } - - //========================================================================= - // FrameUpdate - // [3/17/2011] - //========================================================================= - void - DrillerManagerImpl::FrameUpdate() - { - if (m_sessions.empty()) - { - return; - } - - AZStd::lock_guard lock(DrillerEBusMutex::GetMutex()); ///< Make sure no driller is writing to the stream - for (SessionListType::iterator sessionIter = m_sessions.begin(); sessionIter != m_sessions.end(); ) - { - DrillerSession& s = *sessionIter; - - // tick the drillers directly if they care. - for (size_t i = 0; i < s.drillers.size(); ++i) - { - s.drillers[i]->Update(); - } - - s.output->EndTag(AZ_CRC("Frame", 0xb5f83ccd)); - - s.output->OnEndOfFrame(); - - s.curFrame++; - - if (s.numFrames != -1) - { - if (s.curFrame == s.numFrames) - { - Stop(&s); - continue; - } - } - - s.output->BeginTag(AZ_CRC("Frame", 0xb5f83ccd)); - s.output->Write(AZ_CRC("FrameNum", 0x85a1a919), s.curFrame); - - ++sessionIter; - } - } - - //========================================================================= - // Start - // [3/17/2011] - //========================================================================= - DrillerSession* - DrillerManagerImpl::Start(DrillerOutputStream& output, const DrillerListType& drillerList, int numFrames) - { - if (drillerList.empty()) - { - return nullptr; - } - - m_sessions.push_back(); - DrillerSession& s = m_sessions.back(); - s.curFrame = 0; - s.numFrames = numFrames; - s.output = &output; - - s.output->WriteHeader(); // first write the header in the stream - - s.output->BeginTag(AZ_CRC("StartData", 0xecf3f53f)); - s.output->Write(AZ_CRC("Platform", 0x3952d0cb), (unsigned int)g_currentPlatform); - for (DrillerListType::const_iterator iDriller = drillerList.begin(); iDriller != drillerList.end(); ++iDriller) - { - const DrillerInfo& di = *iDriller; - s.output->BeginTag(AZ_CRC("Driller", 0xa6e1fb73)); - s.output->Write(AZ_CRC("Name", 0x5e237e06), di.id); - for (int iParam = 0; iParam < (int)di.params.size(); ++iParam) - { - s.output->BeginTag(AZ_CRC("Param", 0xa4fa7c89)); - s.output->Write(AZ_CRC("Name", 0x5e237e06), di.params[iParam].name); - s.output->Write(AZ_CRC("Description", 0x6de44026), di.params[iParam].desc); - s.output->Write(AZ_CRC("Type", 0x8cde5729), di.params[iParam].type); - s.output->Write(AZ_CRC("Value", 0x1d775834), di.params[iParam].value); - s.output->EndTag(AZ_CRC("Param", 0xa4fa7c89)); - } - s.output->EndTag(AZ_CRC("Driller", 0xa6e1fb73)); - } - s.output->EndTag(AZ_CRC("StartData", 0xecf3f53f)); - - s.output->BeginTag(AZ_CRC("Frame", 0xb5f83ccd)); - s.output->Write(AZ_CRC("FrameNum", 0x85a1a919), s.curFrame); - - { - AZStd::lock_guard lock(DrillerEBusMutex::GetMutex()); ///< Make sure no driller is writing to the stream - for (DrillerListType::const_iterator iDriller = drillerList.begin(); iDriller != drillerList.end(); ++iDriller) - { - Driller* driller = nullptr; - const DrillerInfo& di = *iDriller; - for (size_t iDesc = 0; iDesc < m_drillers.size(); ++iDesc) - { - if (m_drillers[iDesc]->GetId() == di.id) - { - driller = m_drillers[iDesc]; - AZ_Assert(driller->m_output == nullptr, "Driller with id %08x is already have an output stream %p (currently we support only 1 at a time)", di.id, driller->m_output); - driller->m_output = &output; - driller->Start(di.params.data(), static_cast(di.params.size())); - s.drillers.push_back(driller); - break; - } - } - AZ_Warning("Driller", driller != nullptr, "We can't start a driller with id %d!", di.id); - } - } - return &s; - } - - - //========================================================================= - // Stop - // [3/17/2011] - //========================================================================= - void - DrillerManagerImpl::Stop(DrillerSession* session) - { - SessionListType::iterator iter; - for (iter = m_sessions.begin(); iter != m_sessions.end(); ++iter) - { - if (&*iter == session) - { - break; - } - } - - AZ_Assert(iter != m_sessions.end(), "We did not find session ID 0x%08x in the list!", session); - if (iter != m_sessions.end()) - { - DrillerSession& s = *session; - - { - AZStd::lock_guard lock(DrillerEBusMutex::GetMutex()); - for (size_t i = 0; i < s.drillers.size(); ++i) - { - s.drillers[i]->Stop(); - s.drillers[i]->m_output = nullptr; - } - } - s.output->EndTag(AZ_CRC("Frame", 0xb5f83ccd)); - m_sessions.erase(iter); - } - } -} // namespace AZ::Debug diff --git a/Code/Framework/AzCore/AzCore/Driller/Driller.h b/Code/Framework/AzCore/AzCore/Driller/Driller.h deleted file mode 100644 index bb2178e51f..0000000000 --- a/Code/Framework/AzCore/AzCore/Driller/Driller.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#ifndef AZCORE_DRILLER_H -#define AZCORE_DRILLER_H - -#include -namespace AZStd -{ - class mutex; -} -namespace AZ -{ - namespace Debug - { - class DrillerOutputStream; - - /** - * Driller base class. Every driller should inherit from this class. - * When a driller is need to start outputting data - * the DrillerManager will call Driller::Start() so the driller - * can output the initial state for all reported entities. - * The same applies for the Stop. - * Depending on the type of your driller you might choose to collect state - * even before the driller has started. This of course should be a fast as - * possible, as we don't want to burden engine systems and it's highly recommended - * that you use configuration parameters to change that behavior as not all drillers - * are used on a daily basis. - * All drillers should use DebugAllocators (AZ_CLASS_ALLOCATOR(Driller,OSAllocator,0)) - * and they should use 'aznew' to create one, as by default if you don't unregister a - * a driller, the manager will use "delete" to delete them. - * - * IMPORTANT: Driller systems works OUTSIDE engine systems, you should NOT use SystemAllocator or any other engine systems - * as they might be drilled or not available at the moment. - */ - class Driller - { - friend class DrillerManagerImpl; - - public: - struct Param - { - enum Type - { - PT_BOOL, - PT_INT, - PT_FLOAT - }; - const char* desc; - u32 name; - int type; - int value; - }; - - Driller() - : m_output(NULL) {} - virtual ~Driller() {} - - /// Returns the driller ID Crc32 of the name (Crc32(GetName()) - AZ::u32 GetId() const; - /// Driller group name, used only for organizational purpose - virtual const char* GroupName() const = 0; - /// Unique name of the Driller, driller ID is the Crc of the name - virtual const char* GetName() const = 0; - virtual const char* GetDescription() const = 0; - // @{ Managing the list of supported driller parameters. - virtual int GetNumParams() const { return 0; } - virtual const Param* GetParam(int index) const { (void)index; return NULL; } - - protected: - Driller& operator=(const Driller&); - - /// Called by DrillerManager - virtual void Start(const Param* params = NULL, int numParams = 0) { (void)params; (void)numParams; } - /// Called by DrillerManager - virtual void Stop() {} - /// Called every frame by DrillerManger (while the driller is started) - virtual void Update() {} - - DrillerOutputStream* m_output; ///< Session output stream. - }; - - /** - * Stores the information while an active - * driller(s) session is running. - */ - struct DrillerSession - { - int numFrames; - int curFrame; - typedef vector::type DrillerArrayType; - DrillerArrayType drillers; - DrillerOutputStream* output; - }; - - /** - * Driller manager will manage all active driller sessions and driller factories. Generally you will never - * need more than one driller manger. - * IMPORTANT: Driller systems works OUTSIDE engine systems, you should NOT use SystemAllocator or any other engine systems - * as they might be drilled or not available at the moment. - */ - class DrillerManager - { - friend class DrillerRemoteServer; - public: - struct DrillerInfo - { - AZ::u32 id; - vector::type params; - }; - typedef forward_list::type DrillerListType; - - virtual ~DrillerManager() {} - - static DrillerManager* Create(/*const Descriptor& desc*/); - static void Destroy(DrillerManager* manager); - - virtual void Register(Driller* driller) = 0; - virtual void Unregister(Driller* driller) = 0; - - virtual void FrameUpdate() = 0; - - virtual DrillerSession* Start(DrillerOutputStream& output, const DrillerListType& drillerList, int numFrames = -1) = 0; - virtual void Stop(DrillerSession* session) = 0; - - virtual int GetNumDrillers() const = 0; - virtual Driller* GetDriller(int index) = 0; - - private: - // If the manager created the allocator, it should destroy it when it gets destroyed - bool m_ownsOSAllocator = false; - }; - } -} - -#endif // AZCORE_DRILLER_H -#pragma once diff --git a/Code/Framework/AzCore/AzCore/Driller/DrillerBus.cpp b/Code/Framework/AzCore/AzCore/Driller/DrillerBus.cpp deleted file mode 100644 index a46736aa87..0000000000 --- a/Code/Framework/AzCore/AzCore/Driller/DrillerBus.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include - -#include -#include -#include - -namespace AZ::Debug -{ - ////////////////////////////////////////////////////////////////////////// - // Globals - // We need to synchronize all driller evens, so we have proper order, and access to the data - // We use a global mutex which should be used for all driller operations. - // The mutex is held in an environment variable so it works across DLLs. - EnvironmentVariable s_drillerGlobalMutex; - ////////////////////////////////////////////////////////////////////////// - - - //========================================================================= - // lock - // [4/11/2011] - //========================================================================= - void DrillerEBusMutex::lock() - { - GetMutex().lock(); - } - - //========================================================================= - // try_lock - // [4/11/2011] - //========================================================================= - bool DrillerEBusMutex::try_lock() - { - return GetMutex().try_lock(); - } - - //========================================================================= - // unlock - // [4/11/2011] - //========================================================================= - void DrillerEBusMutex::unlock() - { - GetMutex().unlock(); - } - - //========================================================================= - // unlock - // [4/11/2011] - //========================================================================= - AZStd::recursive_mutex& DrillerEBusMutex::GetMutex() - { - if (!s_drillerGlobalMutex) - { - s_drillerGlobalMutex = Environment::CreateVariable(AZ_FUNCTION_SIGNATURE); - } - return *s_drillerGlobalMutex; - } -} // namespace AZ::Debug diff --git a/Code/Framework/AzCore/AzCore/Driller/DrillerBus.h b/Code/Framework/AzCore/AzCore/Driller/DrillerBus.h deleted file mode 100644 index 4c625f007d..0000000000 --- a/Code/Framework/AzCore/AzCore/Driller/DrillerBus.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#ifndef AZCORE_DRILLER_BUS_H -#define AZCORE_DRILLER_BUS_H - -#include -#include -#include - -namespace AZStd -{ - class mutex; -} - -namespace AZ -{ - namespace Debug - { - class DrillerEBusMutex - { - public: - typedef AZStd::recursive_mutex MutexType; - - static MutexType& GetMutex(); - void lock(); - bool try_lock(); - void unlock(); - }; - - /** - * Specialization of the EBusTraits for a driller bus. We make sure - * all allocation are made using DebugAllocation (so no engine systems are involved). - * In addition we make sure all driller buses use the same Mutex to synchronize data across - * threads (so all events came in order all the time), they are still executed in the context of - * the thread. - */ - struct DrillerEBusTraits - : public AZ::EBusTraits - { - typedef DrillerEBusMutex MutexType; - typedef OSStdAllocator AllocatorType; - }; - } -} - -#endif // AZCORE_DRILLER_BUS_H -#pragma once diff --git a/Code/Framework/AzCore/AzCore/Driller/DrillerRootHandler.h b/Code/Framework/AzCore/AzCore/Driller/DrillerRootHandler.h deleted file mode 100644 index 6a12c0cb8b..0000000000 --- a/Code/Framework/AzCore/AzCore/Driller/DrillerRootHandler.h +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#ifndef AZCORE_DRILLER_ROOT_HANDLER_H -#define AZCORE_DRILLER_ROOT_HANDLER_H - -#include -#include - -namespace AZ -{ - namespace Debug - { - // Please check DrillerRootHandler class... this is the one for direct use. - - /** - * Handler for the tag. - */ - class DrillerDrillerdataHandler - : public DrillerHandlerParser - { - public: - class ParamHandler - : public DrillerHandlerParser - { - public: - virtual void OnData(const DrillerSAXParser::Data& dataNode) - { - if (dataNode.m_name == AZ_CRC("Name", 0x5e237e06)) - { - dataNode.Read(m_param->name); - } - else if (dataNode.m_name == AZ_CRC("Description", 0x6de44026)) - { - m_param->desc = NULL; // ignored - } - else if (dataNode.m_name == AZ_CRC("Type", 0x8cde5729)) - { - dataNode.Read(m_param->type); - } - else if (dataNode.m_name == AZ_CRC("Value", 0x1d775834)) - { - dataNode.Read(m_param->value); - } - } - Driller::Param* m_param; - }; - - virtual DrillerHandlerParser* OnEnterTag(u32 tagName) - { - if (tagName == AZ_CRC("Param", 0xa4fa7c89)) - { - m_drillerInfo->params.push_back(); - m_paramHandler.m_param = &m_drillerInfo->params.back(); - return &m_paramHandler; - } - return NULL; - } - - virtual void OnData(const DrillerSAXParser::Data& dataNode) - { - if (dataNode.m_name == AZ_CRC("Name", 0x5e237e06)) - { - dataNode.Read(m_drillerInfo->id); - } - } - - DrillerManager::DrillerInfo* m_drillerInfo; - ParamHandler m_paramHandler; - }; - - - /** - * Handler for the tag - */ - class DrillerStartdataHandler - : public DrillerHandlerParser - { - public: - virtual DrillerHandlerParser* OnEnterTag(u32 tagName) - { - if (tagName == AZ_CRC("Driller", 0xa6e1fb73)) - { - m_drillers.push_back(); - m_drillerDataHandler.m_drillerInfo = &m_drillers.back(); - return &m_drillerDataHandler; - } - return NULL; - } - virtual void OnData(const DrillerSAXParser::Data& dataNode) - { - if (dataNode.m_name == AZ_CRC("Platform", 0x3952d0cb)) - { - dataNode.Read(m_platform); - } - } - - unsigned int m_platform; - DrillerManager::DrillerListType m_drillers; - DrillerDrillerdataHandler m_drillerDataHandler; - }; - - /** - * Handler for the tag - */ - template - class FrameHandler - : public DrillerHandlerParser - { - public: - FrameHandler() - : DrillerHandlerParser(DrillerContainer::s_isWarnOnMissingDrillers) - , m_currentFrame(-1) {} - - virtual DrillerHandlerParser* OnEnterTag(u32 tagName) { return m_drillersContainer.FindDrillerHandler(tagName); } - virtual void OnData(const DrillerSAXParser::Data& dataNode) - { - if (dataNode.m_name == AZ_CRC("FrameNum", 0x85a1a919)) - { - dataNode.Read(m_currentFrame); - } - } - DrillerContainer m_drillersContainer; - int m_currentFrame; - }; - - /** - * Use this class a input parameter to DrillerSAXParserHandler::DrillerSAXParserHandler(). It will handle all root level - * tags for a standard driller input stream stream. - * - * DrillerContainer should comply to the following requirements: - * - default constructible - * - has a static const bool s_isWarnOnMissingDrillers member to indicate if you want to - * trigger a warning when a driller is not found in the class. - * - implement a function DrillerHandlerParser* DrillerContainer::FindDrillerHandler(u32 drillerName) - * - */ - template - class DrillerRootHandler - : public DrillerHandlerParser - { - public: - DrillerContainer* GetDrillerContainer() { return m_frameHandler.m_drillersContainer; } - - virtual DrillerHandlerParser* OnEnterTag(u32 tagName) - { - if (tagName == AZ_CRC("StartData", 0xecf3f53f)) - { - return &m_drillerSessionInfo; - } - if (tagName == AZ_CRC("Frame", 0xb5f83ccd)) - { - return &m_frameHandler; - } - return NULL; - } - DrillerStartdataHandler m_drillerSessionInfo; - FrameHandler m_frameHandler; - }; - } // namespace Debug -} // namespace AZ - -#endif // AZCORE_DRILLER_ROOT_HANDLER_H -#pragma once - - diff --git a/Code/Framework/AzCore/AzCore/Driller/Stream.cpp b/Code/Framework/AzCore/AzCore/Driller/Stream.cpp deleted file mode 100644 index c86755149c..0000000000 --- a/Code/Framework/AzCore/AzCore/Driller/Stream.cpp +++ /dev/null @@ -1,893 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include - -#include -#include -#include -#include -#include - -#include - -#if !defined(AZCORE_EXCLUDE_ZLIB) -# define AZ_FILE_STREAM_COMPRESSION -#endif // AZCORE_EXCLUDE_ZLIB - -#if defined(AZ_FILE_STREAM_COMPRESSION) -# include -#endif // AZ_FILE_STREAM_COMPRESSION - -namespace AZ::Debug -{ - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - // Driller output stream - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - void DrillerOutputStream::Write(u32 name, const AZ::Vector3& v) - { - float data[4]; - unsigned int dataSize = 3 * sizeof(float); - v.StoreToFloat4(data); - StreamEntry de; - de.name = name; - de.sizeAndFlags = dataSize; - WriteBinary(de); - WriteBinary(data, dataSize); - } - void DrillerOutputStream::Write(u32 name, const AZ::Vector4& v) - { - float data[4]; - unsigned int dataSize = 4 * sizeof(float); - v.StoreToFloat4(data); - StreamEntry de; - de.name = name; - de.sizeAndFlags = dataSize; - WriteBinary(de); - WriteBinary(data, dataSize); - } - void DrillerOutputStream::Write(u32 name, const AZ::Aabb& aabb) - { - float data[7]; - unsigned int dataSize = 6 * sizeof(float); - aabb.GetMin().StoreToFloat4(data); - aabb.GetMax().StoreToFloat4(&data[3]); - StreamEntry de; - de.name = name; - de.sizeAndFlags = dataSize; - WriteBinary(de); - WriteBinary(data, dataSize); - } - void DrillerOutputStream::Write(u32 name, const AZ::Obb& obb) - { - float data[10]; - unsigned int dataSize = 10 * sizeof(float); // position (Vector3), rotation (Quaternion) and halfLengths (Vector3) - obb.GetPosition().StoreToFloat3(data); - obb.GetRotation().StoreToFloat4(&data[3]); - obb.GetHalfLengths().StoreToFloat3(&data[7]); - StreamEntry de; - de.name = name; - de.sizeAndFlags = dataSize; - WriteBinary(de); - WriteBinary(data, dataSize); - } - void DrillerOutputStream::Write(u32 name, const AZ::Transform& tm) - { - float data[12]; - unsigned int dataSize = 12 * sizeof(float); - const Matrix3x4 matrix3x4 = Matrix3x4::CreateFromTransform(tm); - matrix3x4.StoreToRowMajorFloat12(data); - StreamEntry de; - de.name = name; - de.sizeAndFlags = dataSize; - WriteBinary(de); - WriteBinary(data, dataSize); - } - void DrillerOutputStream::Write(u32 name, const AZ::Matrix3x3& tm) - { - float data[9]; - unsigned int dataSize = 9 * sizeof(float); - tm.StoreToRowMajorFloat9(data); - StreamEntry de; - de.name = name; - de.sizeAndFlags = dataSize; - WriteBinary(de); - WriteBinary(data, dataSize); - } - void DrillerOutputStream::Write(u32 name, const AZ::Matrix4x4& tm) - { - float data[16]; - unsigned int dataSize = 16 * sizeof(float); - tm.StoreToRowMajorFloat16(data); - StreamEntry de; - de.name = name; - de.sizeAndFlags = dataSize; - WriteBinary(de); - WriteBinary(data, dataSize); - } - void DrillerOutputStream::Write(u32 name, const AZ::Quaternion& tm) - { - float data[4]; - unsigned int dataSize = 4 * sizeof(float); - tm.StoreToFloat4(data); - StreamEntry de; - de.name = name; - de.sizeAndFlags = dataSize; - WriteBinary(de); - WriteBinary(data, dataSize); - } - void DrillerOutputStream::Write(u32 name, const AZ::Plane& plane) - { - Write(name, plane.GetPlaneEquationCoefficients()); - } - void DrillerOutputStream::WriteHeader() - { - StreamHeader sh; // StreamHeader should be endianess independent. - WriteBinary(&sh, sizeof(sh)); - } - - void DrillerOutputStream::WriteTimeUTC(u32 name) - { - AZStd::sys_time_t now = AZStd::GetTimeUTCMilliSecond(); - Write(name, now); - } - - void DrillerOutputStream::WriteTimeMicrosecond(u32 name) - { - AZStd::sys_time_t now = AZStd::GetTimeNowMicroSecond(); - Write(name, now); - } - - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - // Driller Input Stream - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - bool DrillerInputStream::ReadHeader() - { - DrillerOutputStream::StreamHeader sh; // StreamHeader should be endianess independent. - unsigned int numRead = ReadBinary(&sh, sizeof(sh)); - (void)numRead; - AZ_Error("IO", numRead == sizeof(sh), "We should have atleast %d bytes in the stream to read the header!", sizeof(sh)); - if (numRead != sizeof(sh)) - { - return false; - } - m_isEndianSwap = AZ::IsBigEndian(static_cast(sh.platform)) != AZ::IsBigEndian(AZ::g_currentPlatform); - return true; - } - - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - // Driller file stream - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //========================================================================= - // DrillerOutputFileStream::DrillerOutputFileStream - // [3/23/2011] - //========================================================================= - DrillerOutputFileStream::DrillerOutputFileStream() - { -#if defined(AZ_FILE_STREAM_COMPRESSION) - m_zlib = azcreate(ZLib, (&AllocatorInstance::GetAllocator()), OSAllocator); - m_zlib->StartCompressor(2); -#endif - } - - //========================================================================= - // DrillerOutputFileStream::~DrillerOutputFileStream - // [3/23/2011] - //========================================================================= - DrillerOutputFileStream::~DrillerOutputFileStream() - { -#if defined(AZ_FILE_STREAM_COMPRESSION) - azdestroy(m_zlib, OSAllocator); -#endif - } - - //========================================================================= - // DrillerOutputFileStream::Open - // [3/23/2011] - //========================================================================= - bool DrillerOutputFileStream::Open(const char* fileName, int mode, int platformFlags) - { - if (IO::SystemFile::Open(fileName, mode, platformFlags)) - { - m_dataBuffer.reserve(100 * 1024); -#if defined(AZ_FILE_STREAM_COMPRESSION) - // // Enable optional: encode the file in the same format as the streamer so they are interchangeable - // IO::CompressorHeader ch; - // ch.SetAZCS(); - // ch.m_compressorId = IO::CompressorZLib::TypeId(); - // ch.m_uncompressedSize = 0; // will be updated later - // AZStd::endian_swap(ch.m_compressorId); - // AZStd::endian_swap(ch.m_uncompressedSize); - // IO::SystemFile::Write(&ch,sizeof(ch)); - // IO::CompressorZLibHeader zlibHdr; - // zlibHdr.m_numSeekPoints = 0; - // IO::SystemFile::Write(&zlibHdr,sizeof(zlibHdr)); -#endif - return true; - } - return false; - } - - //========================================================================= - // DrillerOutputFileStream::Close - // [3/23/2011] - //========================================================================= - void DrillerOutputFileStream::Close() - { - unsigned int dataSizeInBuffer = static_cast(m_dataBuffer.size()); - { -#if defined(AZ_FILE_STREAM_COMPRESSION) - unsigned int minCompressBufferSize = m_zlib->GetMinCompressedBufferSize(dataSizeInBuffer); - if (m_compressionBuffer.size() < minCompressBufferSize) // grow compression buffer if needed - { - m_compressionBuffer.clear(); - m_compressionBuffer.resize(minCompressBufferSize); - } - unsigned int compressedSize; - do - { - compressedSize = m_zlib->Compress(m_dataBuffer.data(), dataSizeInBuffer, m_compressionBuffer.data(), (unsigned)m_compressionBuffer.size(), ZLib::FT_FINISH); - if (compressedSize) - { - IO::SystemFile::Write(m_compressionBuffer.data(), compressedSize); - } - } while (compressedSize > 0); - m_zlib->ResetCompressor(); -#else - if (dataSizeInBuffer) - { - IO::SystemFile::Write(m_dataBuffer.data(), m_dataBuffer.size()); - } -#endif - m_dataBuffer.clear(); - } - IO::SystemFile::Close(); - } - //========================================================================= - // DrillerOutputFileStream::WriteBinary - // [3/23/2011] - //========================================================================= - void DrillerOutputFileStream::WriteBinary(const void* data, unsigned int dataSize) - { - size_t dataSizeInBuffer = m_dataBuffer.size(); - if (dataSizeInBuffer + dataSize > m_dataBuffer.capacity()) - { - if (dataSizeInBuffer > 0) - { -#if defined(AZ_FILE_STREAM_COMPRESSION) - // we need to flush the data - unsigned int dataToCompress = static_cast(dataSizeInBuffer); - unsigned int minCompressBufferSize = m_zlib->GetMinCompressedBufferSize(dataToCompress); - if (m_compressionBuffer.size() < minCompressBufferSize) // grow compression buffer if needed - { - m_compressionBuffer.clear(); - m_compressionBuffer.resize(minCompressBufferSize); - } - while (dataToCompress > 0) - { - unsigned int compressedSize = m_zlib->Compress(m_dataBuffer.data(), dataToCompress, m_compressionBuffer.data(), (unsigned)m_compressionBuffer.size()); - if (compressedSize) - { - IO::SystemFile::Write(m_compressionBuffer.data(), compressedSize); - } - } -#else - IO::SystemFile::Write(m_dataBuffer.data(), m_dataBuffer.size()); -#endif - m_dataBuffer.clear(); - } - } - m_dataBuffer.insert(m_dataBuffer.end(), reinterpret_cast(data), reinterpret_cast(data) + dataSize); - } - - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - // Driller file input stream - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - //========================================================================= - // DrillerInputFileStream::DrillerInputFileStream - // [3/23/2011] - //========================================================================= - DrillerInputFileStream::DrillerInputFileStream() - { -#if defined(AZ_FILE_STREAM_COMPRESSION) - m_zlib = azcreate(ZLib, (&AllocatorInstance::GetAllocator()), OSAllocator); - m_zlib->StartDecompressor(); -#endif - } - - //========================================================================= - // DrillerInputFileStream::DrillerInputFileStream - // [3/23/2011] - //========================================================================= - DrillerInputFileStream::~DrillerInputFileStream() - { -#if defined(AZ_FILE_STREAM_COMPRESSION) - azdestroy(m_zlib, OSAllocator); -#endif - } - - //========================================================================= - // DrillerInputFileStream::Open - // [3/23/2011] - //========================================================================= - bool DrillerInputFileStream::Open(const char* fileName, int mode, int platformFlags) - { - if (IO::SystemFile::Open(fileName, mode, platformFlags)) - { - DrillerOutputStream::StreamHeader sh; -#if defined(AZ_FILE_STREAM_COMPRESSION) - // TODO: optional encode the file in the same format as the streamer so they are interchangeable -#endif - // first read the header of the stream file. - return ReadHeader(); - } - return false; - } - //========================================================================= - // DrillerInputFileStream::ReadBinary - // [3/23/2011] - //========================================================================= - unsigned int DrillerInputFileStream::ReadBinary(void* data, unsigned int maxDataSize) - { - // make sure the compressed buffer if full enough... - size_t dataToLoad = maxDataSize * 2; - m_compressedData.reserve(dataToLoad); - while (m_compressedData.size() < dataToLoad) - { - unsigned char buffer[10 * 1024]; - IO::SystemFile::SizeType bytesRead = Read(AZ_ARRAY_SIZE(buffer), buffer); - if (bytesRead > 0) - { - m_compressedData.insert(m_compressedData.end(), (unsigned char*)buffer, buffer + bytesRead); - } - if (bytesRead < AZ_ARRAY_SIZE(buffer)) - { - break; - } - } -#if defined(AZ_FILE_STREAM_COMPRESSION) - unsigned int dataSize = maxDataSize; - unsigned int bytesProcessed = m_zlib->Decompress(m_compressedData.data(), (unsigned)m_compressedData.size(), data, dataSize); - unsigned int readSize = maxDataSize - dataSize; // Zlib::Decompress decrements the dataSize parameter by the amount uncompressed -#else - unsigned int bytesProcessed = AZStd::GetMin((unsigned int)m_compressedData.size(), maxDataSize); - unsigned int readSize = bytesProcessed; - memcpy(data, m_compressedData.data(), readSize); -#endif - m_compressedData.erase(m_compressedData.begin(), m_compressedData.begin() + bytesProcessed); - return readSize; - } - - //========================================================================= - // DrillerInputFileStream::Close - // [3/23/2011] - //========================================================================= - void DrillerInputFileStream::Close() - { -#if defined(AZ_FILE_STREAM_COMPRESSION) - if (m_zlib) - { - m_zlib->ResetDecompressor(); - } -#endif // AZ_FILE_STREAM_COMPRESSION - AZ::IO::SystemFile::Close(); - } - - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - // DrillerSAXParser - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //========================================================================= - // DrillerSAXParser - // [3/23/2011] - //========================================================================= - DrillerSAXParser::DrillerSAXParser(const TagCallbackType& tcb, const DataCallbackType& dcb) - : m_tagCallback(tcb) - , m_dataCallback(dcb) - { - } - - //========================================================================= - // ProcessStream - // [3/23/2011] - //========================================================================= - void - DrillerSAXParser::ProcessStream(DrillerInputStream& stream) - { - static const int processChunkSize = 15 * 1024; - char buffer[processChunkSize]; - unsigned int dataSize; - bool isEndianSwap = stream.IsEndianSwap(); - while ((dataSize = stream.ReadBinary(buffer, processChunkSize)) > 0) - { - char* dataStart = buffer; - char* dataEnd = dataStart + dataSize; - bool dataInBuffer = false; - if (!m_buffer.empty()) - { - m_buffer.insert(m_buffer.end(), dataStart, dataEnd); - dataStart = m_buffer.data(); - dataEnd = dataStart + m_buffer.size(); - dataInBuffer = true; - } - const int entrySize = sizeof(DrillerOutputStream::StreamEntry); - while (dataStart != dataEnd) - { - if ((dataEnd - dataStart) < entrySize) // we need at least one entry to proceed - { - // not enough data to process, buffer it. - if (!dataInBuffer) - { - m_buffer.insert(m_buffer.end(), dataStart, dataEnd); - } - break; - } - - DrillerOutputStream::StreamEntry* se = reinterpret_cast(dataStart); - if (isEndianSwap) - { - // endian swap - AZStd::endian_swap(se->name); - AZStd::endian_swap(se->sizeAndFlags); - } - - u32 dataType = (se->sizeAndFlags & DrillerOutputStream::StreamEntry::dataInternalMask) >> DrillerOutputStream::StreamEntry::dataInternalShift; - u32 value = se->sizeAndFlags & DrillerOutputStream::StreamEntry::dataSizeMask; - Data de; - de.m_name = se->name; - de.m_stringPool = stream.GetStringPool(); - de.m_isPooledString = false; - de.m_isPooledStringCrc32 = false; - switch (dataType) - { - case DrillerOutputStream::StreamEntry::INT_TAG: - { - bool isStart = (value != 0); - m_tagCallback(se->name, isStart); - dataStart += entrySize; - } break; - case DrillerOutputStream::StreamEntry::INT_DATA_U8: - { - u8 value8 = static_cast(value); - de.m_data = &value8; - de.m_dataSize = 1; - de.m_isEndianSwap = false; - m_dataCallback(de); - dataStart += entrySize; - } break; - case DrillerOutputStream::StreamEntry::INT_DATA_U16: - { - u16 value16 = static_cast(value); - de.m_data = &value16; - de.m_dataSize = 2; - de.m_isEndianSwap = false; - m_dataCallback(de); - dataStart += entrySize; - } break; - case DrillerOutputStream::StreamEntry::INT_DATA_U29: - { - de.m_data = &value; - de.m_dataSize = 4; - de.m_isEndianSwap = false; - m_dataCallback(de); - dataStart += entrySize; - } break; - case DrillerOutputStream::StreamEntry::INT_POOLED_STRING: - { - unsigned int userDataSize = value; - if ((userDataSize + entrySize) <= (unsigned)(dataEnd - dataStart)) - { - // Add string to the pool - AZ_Assert(de.m_stringPool != nullptr, "We require a string pool to parse this stream"); - AZ::u32 crc32; - const char* stringPtr; - dataStart += entrySize; - de.m_stringPool->InsertCopy(reinterpret_cast(dataStart), userDataSize, crc32, &stringPtr); - de.m_dataSize = userDataSize; - de.m_isEndianSwap = isEndianSwap; - de.m_isPooledString = true; - de.m_data = const_cast(static_cast(stringPtr)); - m_dataCallback(de); - dataStart += userDataSize; - } - else - { - // we can't process data right now add it to the buffer (if we have not done that already) - if (!dataInBuffer) - { - m_buffer.insert(m_buffer.end(), dataStart, dataEnd); - } - dataEnd = dataStart; // exit the loop - } - } break; - case DrillerOutputStream::StreamEntry::INT_POOLED_STRING_CRC32: - { - de.m_isPooledStringCrc32 = true; - AZ_Assert(value == 4, "The data size for a pooled string crc32 should be 4 bytes!"); - } // continue to INT_SIZE - case DrillerOutputStream::StreamEntry::INT_SIZE: - { - unsigned int userDataSize = value; - if ((userDataSize + entrySize) <= (unsigned)(dataEnd - dataStart)) // do we have all the date we need to process... - { - dataStart += entrySize; - de.m_data = dataStart; - de.m_dataSize = userDataSize; - de.m_isEndianSwap = isEndianSwap; - m_dataCallback(de); - dataStart += userDataSize; - } - else - { - // we can't process data right now add it to the buffer (if we have not done that already) - if (!dataInBuffer) - { - m_buffer.insert(m_buffer.end(), dataStart, dataEnd); - } - dataEnd = dataStart; // exit the loop - } - } break; - default: - { - AZ_Error("DrillerSAXParser",false,"Encounted unknown symbol (%i) while processing stream (%s). Aborting stream.\n",dataType, stream.GetIdentifier()); - - // If we can't process anything, we want to just escape the loop, to avoid spinning infinitely - dataEnd = dataStart; - } break; - } - } - if (dataInBuffer) // if the data was in the buffer remove the processed data! - { - m_buffer.erase(m_buffer.begin(), m_buffer.begin() + (dataStart - m_buffer.data())); - } - } - } - - void DrillerSAXParser::Data::Read(AZ::Vector3& v) const - { - AZ_Assert(m_dataSize == sizeof(float) * 3, "We are expecting 3 floats for Vector3 element 0x%08x with size %d bytes", m_name, m_dataSize); - float* data = reinterpret_cast(m_data); - if (m_isEndianSwap) - { - AZStd::endian_swap(data, data + 3); - m_isEndianSwap = false; - } - v = Vector3::CreateFromFloat3(data); - } - void DrillerSAXParser::Data::Read(AZ::Vector4& v) const - { - AZ_Assert(m_dataSize == sizeof(float) * 4, "We are expecting 4 floats for Vector4 element 0x%08x with size %d bytes", m_name, m_dataSize); - float* data = reinterpret_cast(m_data); - if (m_isEndianSwap) - { - AZStd::endian_swap(data, data + 4); - m_isEndianSwap = false; - } - v = Vector4::CreateFromFloat4(data); - } - void DrillerSAXParser::Data::Read(AZ::Aabb& aabb) const - { - AZ_Assert(m_dataSize == sizeof(float) * 6, "We are expecting 6 floats for Aabb element 0x%08x with size %d bytes", m_name, m_dataSize); - float* data = reinterpret_cast(m_data); - if (m_isEndianSwap) - { - AZStd::endian_swap(data, data + 6); - m_isEndianSwap = false; - } - Vector3 min = Vector3::CreateFromFloat3(data); - Vector3 max = Vector3::CreateFromFloat3(&data[3]); - aabb = Aabb::CreateFromMinMax(min, max); - } - void DrillerSAXParser::Data::Read(AZ::Obb& obb) const - { - AZ_Assert(m_dataSize == sizeof(float) * 10, "We are expecting 10 floats for Obb element 0x%08x with size %d bytes", m_name, m_dataSize); - float* data = reinterpret_cast(m_data); - if (m_isEndianSwap) - { - AZStd::endian_swap(data, data + 10); - m_isEndianSwap = false; - } - Vector3 position = Vector3::CreateFromFloat3(data); - Quaternion rotation = Quaternion::CreateFromFloat4(&data[3]); - Vector3 halfLengths = Vector3::CreateFromFloat3(&data[7]); - obb = Obb::CreateFromPositionRotationAndHalfLengths(position, rotation, halfLengths); - } - void DrillerSAXParser::Data::Read(AZ::Transform& tm) const - { - AZ_Assert(m_dataSize == sizeof(float) * 12, "We are expecting 12 floats for Transform element 0x%08x with size %d bytes", m_name, m_dataSize); - float* data = reinterpret_cast(m_data); - if (m_isEndianSwap) - { - AZStd::endian_swap(data, data + 12); - m_isEndianSwap = false; - } - const Matrix3x4 matrix3x4 = Matrix3x4::CreateFromRowMajorFloat12(data); - tm = Transform::CreateFromMatrix3x4(matrix3x4); - } - void DrillerSAXParser::Data::Read(AZ::Matrix3x3& tm) const - { - AZ_Assert(m_dataSize == sizeof(float) * 9, "We are expecting 9 floats for Matrix3x3 element 0x%08x with size %d bytes", m_name, m_dataSize); - float* data = reinterpret_cast(m_data); - if (m_isEndianSwap) - { - AZStd::endian_swap(data, data + 9); - m_isEndianSwap = false; - } - tm = Matrix3x3::CreateFromRowMajorFloat9(data); - } - void DrillerSAXParser::Data::Read(AZ::Matrix4x4& tm) const - { - AZ_Assert(m_dataSize == sizeof(float) * 16, "We are expecting 16 floats for Matrix4x4 element 0x%08x with size %d bytes", m_name, m_dataSize); - float* data = reinterpret_cast(m_data); - if (m_isEndianSwap) - { - AZStd::endian_swap(data, data + 16); - m_isEndianSwap = false; - } - tm = Matrix4x4::CreateFromRowMajorFloat16(data); - } - void DrillerSAXParser::Data::Read(AZ::Quaternion& tm) const - { - AZ_Assert(m_dataSize == sizeof(float) * 4, "We are expecting 4 floats for Quaternion element 0x%08x with size %d bytes", m_name, m_dataSize); - float* data = reinterpret_cast(m_data); - if (m_isEndianSwap) - { - AZStd::endian_swap(data, data + 4); - m_isEndianSwap = false; - } - tm = Quaternion::CreateFromFloat4(data); - } - void DrillerSAXParser::Data::Read(AZ::Plane& plane) const - { - AZ::Vector4 coeff; - Read(coeff); - plane = Plane::CreateFromCoefficients(coeff.GetX(), coeff.GetY(), coeff.GetZ(), coeff.GetW()); - } - - const char* DrillerSAXParser::Data::PrepareString(unsigned int& stringLength) const - { - const char* srcData = reinterpret_cast(m_data); - stringLength = m_dataSize; - if (m_stringPool) - { - AZ::u32 crc32; - const char* stringPtr; - if (m_isPooledStringCrc32) - { - crc32 = *reinterpret_cast(m_data); - if (m_isEndianSwap) - { - AZStd::endian_swap(crc32); - } - stringPtr = m_stringPool->Find(crc32); - AZ_Assert(stringPtr != nullptr, "Failed to find string with id 0x%08x in the string pool, proper stream read is impossible!", crc32); - stringLength = static_cast(strlen(stringPtr)); - } - else if (m_isPooledString) - { - stringPtr = srcData; // already stored in the pool just transfer the pointer - } - else - { - // Store copy of the string in the pool to save memory (keep only one reference of the string). - m_stringPool->InsertCopy(reinterpret_cast(srcData), stringLength, crc32, &stringPtr); - } - srcData = stringPtr; - } - else - { - AZ_Assert(m_isPooledString == false && m_isPooledStringCrc32 == false, "This stream requires using of a string pool as the string is send only once and afterwards only the Crc32 is used!"); - } - return srcData; - } - - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - // DrillerDOMParser - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - //========================================================================= - // Node::GetTag - // [1/23/2013] - //========================================================================= - const DrillerDOMParser::Node* DrillerDOMParser::Node::GetTag(u32 tagName) const - { - const Node* tagNode = nullptr; - for (Node::NodeListType::const_iterator i = m_tags.begin(); i != m_tags.end(); ++i) - { - if ((*i).m_name == tagName) - { - tagNode = &*i; - break; - } - } - return tagNode; - } - - //========================================================================= - // Node::GetData - // [3/23/2011] - //========================================================================= - const DrillerDOMParser::Data* DrillerDOMParser::Node::GetData(u32 dataName) const - { - const Data* dataNode = nullptr; - for (Node::DataListType::const_iterator i = m_data.begin(); i != m_data.end(); ++i) - { - if (i->m_name == dataName) - { - dataNode = &*i; - break; - } - } - return dataNode; - } - - //========================================================================= - // DrillerDOMParser - // [3/23/2011] - //========================================================================= - DrillerDOMParser::DrillerDOMParser(bool isPersistentInputData) - : DrillerSAXParser(TagCallbackType(this, &DrillerDOMParser::OnTag), DataCallbackType(this, &DrillerDOMParser::OnData)) - , m_isPersistentInputData(isPersistentInputData) - { - m_root.m_name = 0; - m_root.m_parent = nullptr; - m_topNode = &m_root; - } - static int g_numFree = 0; - //========================================================================= - // ~DrillerDOMParser - // [3/23/2011] - //========================================================================= - DrillerDOMParser::~DrillerDOMParser() - { - DeleteNode(m_root); - } - - //========================================================================= - // OnTag - // [3/23/2011] - //========================================================================= - void - DrillerDOMParser::OnTag(AZ::u32 name, bool isOpen) - { - if (isOpen) - { - m_topNode->m_tags.push_back(); - Node& node = m_topNode->m_tags.back(); - node.m_name = name; - node.m_parent = m_topNode; - - m_topNode = &node; - } - else - { - AZ_Assert(m_topNode->m_name == name, "We have opened tag with name 0x%08x and closing with name 0x%08x", m_topNode->m_name, name); - m_topNode = m_topNode->m_parent; - } - } - //========================================================================= - // OnData - // [3/23/2011] - //========================================================================= - void - DrillerDOMParser::OnData(const Data& data) - { - Data de = data; - if (!m_isPersistentInputData) - { - de.m_data = azmalloc(data.m_dataSize, 1, OSAllocator); - memcpy(const_cast(de.m_data), data.m_data, data.m_dataSize); - } - m_topNode->m_data.push_back(de); - } - //========================================================================= - // DeleteNode - // [3/23/2011] - //========================================================================= - void - DrillerDOMParser::DeleteNode(Node& node) - { - if (!m_isPersistentInputData) - { - for (Node::DataListType::iterator iter = node.m_data.begin(); iter != node.m_data.end(); ++iter) - { - azfree(iter->m_data, OSAllocator, iter->m_dataSize); - ++g_numFree; - } - node.m_data.clear(); - } - for (Node::NodeListType::iterator iter = node.m_tags.begin(); iter != node.m_tags.end(); ++iter) - { - DeleteNode(*iter); - } - node.m_tags.clear(); - } - - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - // DrillerSAXParserHandler - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - //========================================================================= - // DrillerSAXParserHandler - // [3/14/2013] - //========================================================================= - DrillerSAXParserHandler::DrillerSAXParserHandler(DrillerHandlerParser* rootHandler) - : DrillerSAXParser(TagCallbackType(this, &DrillerSAXParserHandler::OnTag), DataCallbackType(this, &DrillerSAXParserHandler::OnData)) - { - // Push the root element - m_stack.push_back(rootHandler); - } - - //========================================================================= - // OnTag - // [3/14/2013] - //========================================================================= - void DrillerSAXParserHandler::OnTag(u32 name, bool isOpen) - { - if (m_stack.empty()) - { - return; - } - - DrillerHandlerParser* childHandler = nullptr; - DrillerHandlerParser* currentHandler = m_stack.back(); - if (isOpen) - { - if (currentHandler != nullptr) - { - childHandler = currentHandler->OnEnterTag(name); - AZ_Warning("Driller", !currentHandler->IsWarnOnUnsupportedTags() || childHandler != nullptr, "Could not find handler for tag 0x%08x", name); - } - m_stack.push_back(childHandler); - } - else - { - m_stack.pop_back(); - if (!m_stack.empty()) - { - DrillerHandlerParser* parentHandler = m_stack.back(); - if (parentHandler) - { - parentHandler->OnExitTag(currentHandler, name); - } - } - } - } - - //========================================================================= - // OnData - // [3/14/2013] - //========================================================================= - void DrillerSAXParserHandler::OnData(const DrillerSAXParser::Data& data) - { - if (m_stack.empty()) - { - return; - } - - DrillerHandlerParser* currentHandler = m_stack.back(); - if (currentHandler) - { - currentHandler->OnData(data); - } - } -} // namespace AZ::Debug diff --git a/Code/Framework/AzCore/AzCore/Driller/Stream.h b/Code/Framework/AzCore/AzCore/Driller/Stream.h deleted file mode 100644 index 5efa416ef4..0000000000 --- a/Code/Framework/AzCore/AzCore/Driller/Stream.h +++ /dev/null @@ -1,848 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#ifndef AZCORE_DRILLER_STREAM_H -#define AZCORE_DRILLER_STREAM_H - -#include - -#include -#include -#include -#include -#include - -#include // for the Driller direct file stream -#include -#include - -namespace AZ -{ - class Vector3; - class Vector4; - class Aabb; - class Obb; - class Transform; - class Matrix3x3; - class Matrix4x4; - class Quaternion; - class Plane; - class ZLib; - - namespace IO - { - class Stream; - } - - namespace Debug - { - template - struct vector - { - typedef AZStd::vector type; - }; - - template - struct forward_list - { - typedef AZStd::forward_list type; - }; - - /** - * Interface for a string pool which can be used by input/output streams to avoid storing multiple copies of the same - * string in the stream. Of course this comes at the bookkeeping cost of the table. - */ - class DrillerStringPool - { - public: - virtual ~DrillerStringPool() {} - - /** - * Add a copy of the string to the pool. If we return true the string was added otherwise it was already in the bool. - * In both cases the crc32 of the string and the pointer to the shared copy is returned (optional for poolStringAddress)! - */ - virtual bool InsertCopy(const char* string, unsigned int length, AZ::u32& crc32, const char** poolStringAddress = NULL) = 0; - - /** - * Same as the InsertCopy above without actually coping the string into the pool. The pool assumes that - * none of the strings added to the pool will be deleted. - */ - virtual bool Insert(const char* string, unsigned int length, AZ::u32& crc32) = 0; - - /// Finds a string in the pool by crc32. - virtual const char* Find(AZ::u32 crc32) = 0; - - virtual void Erase(AZ::u32 crc32) = 0; - - /// Clears all the strings in the pool, make sure you don't reference any strings before you call that function. - virtual void Reset() = 0; - }; - - /** - * - */ - class DrillerOutputStream - { - protected: - friend class DrillerManagerImpl; - friend class DrillerSAXParser; - struct StreamEntry - { - enum InternalDataSize // max 8 values as we use 3 bit to store them - { - INT_SIZE = 0, ///< No internal data, we store the data size. IMPORTANT: INT_SIZE should be 0 the code makes assumptions based on that - INT_TAG, ///< True if this entry is tag - INT_DATA_U8, ///< Internal data u8 stored (1 byte) - INT_DATA_U16, ///< Internal data u16 stored (2 bytes) - INT_DATA_U29, ///< Internal data u32 stored (4 bytes) for which we use only the first 29 bits. - INT_POOLED_STRING_CRC32, ///< Data size should be 4 bytes crc32 that a string CRC and it require string pool. - INT_POOLED_STRING, ///< This data contains a string which should be inserted in the string pool. - }; - static const u32 dataSizeMask = 0x1fffffff; - static const u32 dataInternalMask = 0xE0000000; - static const u32 dataInternalShift = 29; - - u32 name; ///< data or tag name - u32 sizeAndFlags; ///< - }; - - template - struct IntergralType; - - template - struct IntergralType - { - static void Write(DrillerOutputStream& stream, u32 name, const T& data) - { - StreamEntry de; - de.name = name; - de.sizeAndFlags = (u32)(StreamEntry::INT_DATA_U8) << StreamEntry::dataInternalShift; - de.sizeAndFlags |= *reinterpret_cast(&data); - stream.WriteBinary(de); - } - }; - template - struct IntergralType - { - static void Write(DrillerOutputStream& stream, u32 name, const T& data) - { - StreamEntry de; - de.name = name; - de.sizeAndFlags = (u32)(StreamEntry::INT_DATA_U16) << StreamEntry::dataInternalShift; - de.sizeAndFlags |= *reinterpret_cast(&data); - stream.WriteBinary(de); - } - }; - template - struct IntergralType - { - static void Write(DrillerOutputStream& stream, u32 name, const T& data) - { - StreamEntry de; - de.name = name; - const u32* uintData = reinterpret_cast(&data); - if (((*uintData) & StreamEntry::dataSizeMask) == *uintData) // check if we can store it internally - { - de.sizeAndFlags = (u32)(StreamEntry::INT_DATA_U29) << StreamEntry::dataInternalShift; - de.sizeAndFlags |= *uintData; - stream.WriteBinary(de); - } - else - { - de.sizeAndFlags = 4; - stream.WriteBinary(de); - stream.WriteBinary(&data, de.sizeAndFlags); - } - } - }; - template - struct IntergralType - { - static void Write(DrillerOutputStream& stream, u32 name, const T& data) - { - StreamEntry de; - de.name = name; - const u64* uintData = reinterpret_cast(&data); - if (((*uintData) & static_cast(StreamEntry::dataSizeMask)) == *uintData) // check if we can store it internally - { - de.sizeAndFlags = (u32)(StreamEntry::INT_DATA_U29) << StreamEntry::dataInternalShift; - de.sizeAndFlags |= static_cast(*uintData); - stream.WriteBinary(de); - } - else - { - de.sizeAndFlags = 8; - stream.WriteBinary(de); - stream.WriteBinary(&data, de.sizeAndFlags); - } - } - }; - template - struct IntergralType - { - static void Write(DrillerOutputStream& stream, u32 name, const T* pointer) - { - size_t id = reinterpret_cast(pointer); - IntergralType::Write(stream, name, id); - } - }; - - public: - /** - * Each stream with start with this header, before anything else. - */ - struct StreamHeader - { - StreamHeader() - : platform((u8)g_currentPlatform) {} - u8 platform; - }; - - DrillerOutputStream(DrillerStringPool* stringPool = NULL) - : m_stringPool(stringPool) { } - virtual ~DrillerOutputStream() {} - - ////////////////////////////////////////////////////////////////////////// - // Write - inline void BeginTag(u32 name) - { - StreamEntry de; - de.name = name; - de.sizeAndFlags = (u32)(StreamEntry::INT_TAG) << StreamEntry::dataInternalShift; - de.sizeAndFlags |= 1; // true - open tag - WriteBinary(de); - } - inline void EndTag(u32 name) - { - StreamEntry de; - de.name = name; - de.sizeAndFlags = (u32)(StreamEntry::INT_TAG) << StreamEntry::dataInternalShift; - WriteBinary(de); - } - - ////////////////////////////////////////////////////////////////////////// - // Generic - template - inline void Write(u32 name, const T& data) - { - // User should handle non specialized non integral types. - IntergralType::value || AZStd::is_enum::value>::Write(*this, name, data); - } - - ////////////////////////////////////////////////////////////////////////// - // Binary and strings - inline void Write(u32 name, const void* data, unsigned int dataSize) - { - StreamEntry de; - de.name = name; - de.sizeAndFlags = dataSize; - WriteBinary(de); - WriteBinary(data, dataSize); - } - inline void Write(u32 name, const char* string, bool isCopyString = true) - { - StreamEntry de; - de.name = name; - de.sizeAndFlags = static_cast(strlen(string)); - AZ_Assert(de.sizeAndFlags <= StreamEntry::dataSizeMask, "Invalid string length! String is too long, length is limited to %u bytes!", StreamEntry::dataSizeMask); - ; - if (m_stringPool) - { - AZ::u32 crc; - bool isInserted = isCopyString ? m_stringPool->InsertCopy(string, de.sizeAndFlags, crc) : m_stringPool->Insert(string, de.sizeAndFlags, crc); - if (!isInserted) // if already inserted, it means it's in the stream, so store the crc only. - { - de.sizeAndFlags = (u32)(StreamEntry::INT_POOLED_STRING_CRC32) << StreamEntry::dataInternalShift; - de.sizeAndFlags |= sizeof(crc); - WriteBinary(de); - WriteBinary(&crc, sizeof(crc)); - } - else - { - AZ::u32 stringSize = de.sizeAndFlags; - de.sizeAndFlags |= (u32)(StreamEntry::INT_POOLED_STRING) << StreamEntry::dataInternalShift; - WriteBinary(de); - WriteBinary(string, stringSize); - } - } - else - { - WriteBinary(de); - WriteBinary(string, de.sizeAndFlags); - } - } - template - inline void Write(u32 name, const AZStd::basic_string& str, bool isCopyString = true) - { - StreamEntry de; - de.name = name; - de.sizeAndFlags = static_cast(str.size()); - AZ_Assert(de.sizeAndFlags <= StreamEntry::dataSizeMask, "Invalid string length! String is too long, length is limited to %u bytes!", StreamEntry::dataSizeMask); - if (m_stringPool) - { - AZ::u32 crc; - bool isInserted = isCopyString ? m_stringPool->InsertCopy(str.c_str(), de.sizeAndFlags, crc) : m_stringPool->Insert(str.c_str(), de.sizeAndFlags, crc); - if (!isInserted) // if already inserted, it means it's in the stream, so store the crc only. - { - de.sizeAndFlags = (u32)(StreamEntry::INT_POOLED_STRING_CRC32) << StreamEntry::dataInternalShift; - de.sizeAndFlags |= sizeof(crc); - WriteBinary(de); - WriteBinary(&crc, sizeof(crc)); - } - else - { - AZ::u32 stringSize = de.sizeAndFlags; - de.sizeAndFlags |= (u32)(StreamEntry::INT_POOLED_STRING) << StreamEntry::dataInternalShift; - WriteBinary(de); - WriteBinary(str.data(), stringSize); - } - } - else - { - WriteBinary(de); - WriteBinary(str.data(), de.sizeAndFlags); - } - } - - template - inline void Write(u32 name, const AZStd::basic_string& str) - { - StreamEntry de; - de.name = name; - de.sizeAndFlags = static_cast(str.size()); - AZ_Assert(de.sizeAndFlags <= StreamEntry::dataSizeMask, "Invalid string length! String is too long, length is limited to %u bytes!", StreamEntry::dataSizeMask); - WriteBinary(de); - WriteBinary(str.data(), de.sizeAndFlags * sizeof(AZStd::wstring::value_type)); - } - - ////////////////////////////////////////////////////////////////////////// - // math types - inline void Write(u32 name, float f) - { - Write(name, &f, static_cast(sizeof(float))); - } - inline void Write(u32 name, double d) - { - Write(name, &d, static_cast(sizeof(double))); - } - - void Write(u32 name, const AZ::Vector3& v); - void Write(u32 name, const AZ::Vector4& v); - void Write(u32 name, const AZ::Aabb& aabb); - void Write(u32 name, const AZ::Obb& obb); - void Write(u32 name, const AZ::Transform& tm); - void Write(u32 name, const AZ::Matrix3x3& tm); - void Write(u32 name, const AZ::Matrix4x4& tm); - void Write(u32 name, const AZ::Quaternion& tm); - void Write(u32 name, const AZ::Plane& plane); - - ////////////////////////////////////////////////////////////////////////// - // containers - template - inline void Write(u32 name, InputIterator first, InputIterator last) - { - // we can specialize for contiguous_iterator_tag so have only 1 write for all elements - size_t numElements = AZStd::distance(first, last); - size_t elementSize = sizeof(typename AZStd::iterator_traits::value_type); - unsigned int dataSize = static_cast(numElements * elementSize); - StreamEntry de; - de.name = name; - de.sizeAndFlags = dataSize; - AZ_Assert(dataSize < StreamEntry::dataSizeMask, "Invalid data size, size is limited to %d bytes!", StreamEntry::dataSizeMask - 1); - WriteBinary(de); - //WriteBinary(data,dataSize); for contiguous_iterator_tag - for (; first != last; ++first) - { - WriteBinary(&*first, static_cast(elementSize)); - } - } - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // Raw data to the output - template - inline void WriteBinary(const T& data) - { - WriteBinary(&data, sizeof(T)); - } - - virtual void WriteBinary(const void* data, unsigned int dataSize) = 0; - ////////////////////////////////////////////////////////////////////////// - - /** - * Write a time stamp (AZStd::sys_time_t) in millisecond since 1970/01/01 00:00:00 UTC. - * On older windows this function can have ~15 ms resolution, in such cases use \ref GetTimeNowMicroSecond - */ - void WriteTimeUTC(u32 name); - - /** - * Write a time stamp (AZStd::sys_time_t) in micriseconds. This function is inaccurate for long periods but it has ms resolution. - * For long periods use \ref WriteTimeUTC. - */ - void WriteTimeMicrosecond(u32 name); - - /// Called when the driller is moving on the next frame, so you can flush you current buffer to network/disk. - virtual void OnEndOfFrame() {} - - /// Sets the string pool used for this stream. To disable the pool just set it to NULL. - void SetStringPool(DrillerStringPool* stringPool) { m_stringPool = stringPool; } - - protected: - /// Write the Stream header structure (should be endianess independent). - void WriteHeader(); - - DrillerStringPool* m_stringPool; ///< Optional pointer to a string pool. - }; - - /** - * For efficiency all data read functions are placed with the parsers. - */ - class DrillerInputStream - { - public: - DrillerInputStream(DrillerStringPool* stringPool = NULL) - : m_isEndianSwap(false) - , m_stringPool(stringPool) {} - virtual ~DrillerInputStream() {} - - bool IsEndianSwap() const { return m_isEndianSwap; } - /// Reads binary data from a stream to to maxDataSize. Returns 0 if no more data. - virtual unsigned int ReadBinary(void* data, unsigned int maxDataSize) = 0; - - /// Sets the string pool used for this stream. To disable the pool just set it to NULL. - void SetStringPool(DrillerStringPool* stringPool) { m_stringPool = stringPool; } - DrillerStringPool* GetStringPool() const { return m_stringPool; } - - void SetIdentifier(const char* identifier) { m_streamIdentifier = identifier; } - const char* GetIdentifier() const { return m_streamIdentifier.c_str(); } - - protected: - /// Read the Stream header structure - bool ReadHeader(); - - bool m_isEndianSwap; - DrillerStringPool* m_stringPool; ///< Optional pointer to a string pool. - AZStd::string m_streamIdentifier; - }; - - /** - * Outputs all stream data into a memory buffer. It will grow automatically. - */ - class DrillerOutputMemoryStream - : public DrillerOutputStream - { - protected: - vector::type m_data; - public: - AZ_CLASS_ALLOCATOR(DrillerOutputMemoryStream, OSAllocator, 0) - DrillerOutputMemoryStream(size_t memorySize = 2048) { m_data.reserve(memorySize); } - const unsigned char* GetData() const { return m_data.data(); } - unsigned int GetDataSize() const { return static_cast(m_data.size()); } - inline void Reset() { m_data.clear(); } - void WriteBinary(const void* data, unsigned int dataSize) override - { - m_data.insert(m_data.end(), reinterpret_cast(data), reinterpret_cast(data) + dataSize); - } - }; - /** - * Reads data from a memory stream. Data is NOT copied and must be persistent while we are using it. - */ - class DrillerInputMemoryStream - : public DrillerInputStream - { - const unsigned char* m_data; - const unsigned char* m_dataEnd; - - public: - AZ_CLASS_ALLOCATOR(DrillerInputMemoryStream, OSAllocator, 0) - DrillerInputMemoryStream(const char* streamIdentifier = "", const void* data = nullptr, unsigned int dataSize = 0) - : DrillerInputStream() - , m_data(nullptr) - , m_dataEnd(nullptr) - { - if (data != nullptr) - { - SetData(streamIdentifier, data, dataSize); - } - } - - void SetData(const char* streamIdentifier, const void* data, unsigned int dataSize) - { - SetIdentifier(streamIdentifier); - - AZ_Assert(data != nullptr && dataSize > 0, "We must have a valid pointer %p and data size %d !", data, dataSize); - if (m_data == nullptr) // this is the first data chuck, read the platform - { - m_data = reinterpret_cast(data); - m_dataEnd = m_data + dataSize; - ReadHeader(); - } - else - { - m_data = reinterpret_cast(data); - m_dataEnd = m_data + dataSize; - } - } - - unsigned int GetDataLeft() const { return static_cast(m_dataEnd - m_data); } - unsigned int ReadBinary(void* data, unsigned int maxDataSize) override - { - AZ_Assert(m_data != nullptr, "You must call SetData function, before you can read data!"); - AZ_Assert(data != nullptr && maxDataSize > 0, "We must have a valid pointer and max data size!"); - unsigned int dataToCopy = AZStd::GetMin(static_cast(m_dataEnd - m_data), maxDataSize); - if (dataToCopy) - { - memcpy(data, m_data, dataToCopy); - } - m_data += dataToCopy; - return dataToCopy; - } - }; - - /** - * Outputs driller data to a file (buffered) - * IMPORTANT: We provide direct IO classes (instead trough Streamer), because the driller - * framework should NOT use engine systems (for example imagine we are drilling the Streamer, using it to - * write the drilled data will invalidate all the results as the streamer is unaware which data is driller data and which not) - */ - class DrillerOutputFileStream - : public IO::SystemFile - , public DrillerOutputStream - { - ZLib* m_zlib; - vector::type m_compressionBuffer; - vector::type m_dataBuffer; - public: - AZ_CLASS_ALLOCATOR(DrillerOutputFileStream, OSAllocator, 0) - DrillerOutputFileStream(); - ~DrillerOutputFileStream(); - bool Open(const char* fileName, int mode, int platformFlags = 0); - void Close(); - - void WriteBinary(const void* data, unsigned int dataSize) override; - }; - - /** - * Reads driller data from a file. - */ - class DrillerInputFileStream - : public AZ::IO::SystemFile - , public DrillerInputStream - { - ZLib* m_zlib; - vector::type m_compressedData; - public: - AZ_CLASS_ALLOCATOR(DrillerInputFileStream, OSAllocator, 0) - DrillerInputFileStream(); - ~DrillerInputFileStream(); - bool Open(const char* fileName, int mode, int platformFlags = 0); - unsigned int ReadBinary(void* data, unsigned int maxDataSize) override; - void Close(); - }; - - /** - * SAX like stream parser for driller data. We can stream the data - * and we will trigger events as tags and data (attributes) arrive. We use less memory this way. - * \note SAX is used as reference name, we are NOT trying to compatible with - * any specs. (not that SAX has specs) - * IMPORTANT: All data callbacks (tag and data) are called in the order they were at store. You can - * use this order as event index. - */ - class DrillerSAXParser - { - public: - struct Data - { - u32 m_name; ///< Crc name of the data entry. - void* m_data; ///< Pointer to copy if the loaded data. - unsigned int m_dataSize; ///< Data size in bytes. - mutable bool m_isEndianSwap; ///< True if the user will need to swap the endian when he access the data. We swap the data is the storage so we can read it multiple times without swap. - DrillerStringPool* m_stringPool; ///< Pointer to optional data string pool. - bool m_isPooledString; ///< True if we have a pooled string (stored in the stringPool already). - bool m_isPooledStringCrc32; ///< True is we have stored a crc32 (4 bytes) which refers to a string from the String Pool. - - ////////////////////////////////////////////////////////////////////////// - // Generic - template - inline void Read(T& t) const - { - static_assert(AZStd::is_pod::value, "T must be plain-old-data"); - - AZ_Assert(sizeof(t) >= m_dataSize, "You are about to lose some data, this is wrong."); - if (m_dataSize == sizeof(t)) - { - // do a memcpy as alignment might be required for some data types! This is not performance critical as we usually load drill files on x86/x64 - // which doesn't care about alignment. - memcpy(&t, m_data, m_dataSize); - } - else - { - AZ_Assert(AZStd::is_pointer::value || AZStd::is_integral::value, "We support extending only for integral types, float and pointers up to 8 bytes!"); - - if (AZStd::is_signed::value) - { - switch (m_dataSize) - { - case 1: - t = static_cast(*reinterpret_cast(m_data)); - break; - case 2: - t = static_cast(*reinterpret_cast(m_data)); - break; - case 4: - t = static_cast(*reinterpret_cast(m_data)); - break; - default: - AZ_Assert(false, "Source data size unsupported... we can extend only 1,2,4 bytes into 2,4,8 bytes integrals"); - } - } - else - { - switch (m_dataSize) - { - case 1: - t = static_cast(*reinterpret_cast(m_data)); - break; - case 2: - t = static_cast(*reinterpret_cast(m_data)); - break; - case 4: - t = static_cast(*reinterpret_cast(m_data)); - break; - default: - AZ_Assert(false, "Source data size unsupported... we can extend only 1,2,4 bytes into 2,4,8 bytes integrals"); - } - } - } - if (m_isEndianSwap) - { - AZStd::endian_swap(t); - } - } - - inline void Read(bool& b) const - { - u8* data = reinterpret_cast(m_data); - b = false; - for (unsigned int i = 0; i < m_dataSize; ++i) - { - if (data[i] != 0) - { - b = true; - return; - } - } - } - ////////////////////////////////////////////////////////////////////////// - // Binary and strings - inline unsigned int Read(void* buffer, unsigned int bufferSize) const - { - unsigned int dataToCopy = AZStd::GetMin(m_dataSize, bufferSize); - memcpy(buffer, m_data, dataToCopy); - // no data swap - return dataToCopy; - } - // a call avilable only when we use a string pool, it will return the pointer of string in the pool, so you don't need to copy it or do any fancy procedures. - inline const char* ReadPooledString() const - { - AZ_Assert(m_stringPool != nullptr, "This read type is supported only when we use string pool!"); - unsigned int srcDataSize; - return PrepareString(srcDataSize); - } - inline unsigned int Read(char* string, unsigned int maxNumChars) const - { - unsigned int srcDataSize; - const char* srcData = PrepareString(srcDataSize); - unsigned int dataToCopy = AZStd::GetMin(maxNumChars - 1, srcDataSize); - memcpy(string, srcData, dataToCopy); - string[dataToCopy] = '\0'; - return dataToCopy; - } - template - inline unsigned int Read(AZStd::basic_string& str) const - { - unsigned int srcDataSize; - const char* srcData = PrepareString(srcDataSize); - str = AZStd::basic_string(static_cast(srcData), srcDataSize); - return m_dataSize; - } - template - inline unsigned int Read(AZStd::basic_string& str) const - { - // wstring pooling not supported yet - str = AZStd::basic_string(static_cast(m_data), m_dataSize / 2); - if (m_isEndianSwap) - { - AZStd::endian_swap(str.begin(), str.end()); - } - return m_dataSize; - } - - ////////////////////////////////////////////////////////////////////////// - // math types - void Read(AZ::Vector3& v) const; - void Read(AZ::Vector4& v) const; - void Read(AZ::Aabb& aabb) const; - void Read(AZ::Obb& obb) const; - void Read(AZ::Transform& tm) const; - void Read(AZ::Matrix3x3& tm) const; - void Read(AZ::Matrix4x4& tm) const; - void Read(AZ::Quaternion& tm) const; - void Read(AZ::Plane& plane) const; - - ////////////////////////////////////////////////////////////////////////// - // containers - template - inline void Read(AZStd::insert_iterator& iter) const - { - typedef typename AZStd::insert_iterator InsertIterator; - // we can specialize for contiguous_iterator_tag so have only 1 write for all elements - const size_t elementSize = sizeof(InsertIterator::container_type::value_type); - size_t numElements = m_dataSize / elementSize; - AZ_Assert(m_dataSize % elementSize == 0, "Stored elements size doesn't match the read parameters!"); - Data elementEntry = *this; - elementEntry.m_dataSize = elementSize; - char* dataPtr = reinterpret_cast(m_data); - for (size_t i = 0; i < numElements; ++i, ++iter) - { - typename InsertIterator::container_type::value_type value; - elementEntry.m_data = dataPtr; - Read(elementEntry, value); - iter = value; - dataPtr += elementSize; - } - } - ////////////////////////////////////////////////////////////////////////// - private: - const char* PrepareString(unsigned int& stringLength) const; - }; - - typedef AZStd::delegate TagCallbackType; - typedef AZStd::delegate DataCallbackType; - - AZ_CLASS_ALLOCATOR(DrillerSAXParser, OSAllocator, 0) - DrillerSAXParser(const TagCallbackType& tcb, const DataCallbackType& dcb); - /// Processes an input stream until all data is consumed (read returns 0 bytes). - void ProcessStream(DrillerInputStream& stream); - protected: - - typedef vector::type BufferType; - BufferType m_buffer; - TagCallbackType m_tagCallback; - DataCallbackType m_dataCallback; - }; - - /** - * DOM like parser, we will load the entire stream in memory (ProcessStream function). - * Depending on the data size this can be very memory consuming. - * \note DOM is used as reference we are NOT compliant with the DOM specs in any way. - * IMPORTANT: All data is stored (for parsing) in the same order the events occurred - * or the remote machine. Each next tad or data was recorded in the way. You can use - * this as an event index. - */ - class DrillerDOMParser - : public DrillerSAXParser - { - public: - struct Node - { - typedef forward_list::type DataListType; - typedef forward_list::type NodeListType; - - u32 m_name; - Node* m_parent; - DataListType m_data; - NodeListType m_tags; - - /// Return a pointer to the first tag with specific name. - const Node* GetTag(u32 tagName) const; - /// Returns pointer to the first data entry with specific name. NULL if not data has been found. - const Data* GetData(u32 dataName) const; - /// Returns pointer to the first data entry with specific name. If it can't be found it will assert - const Data* GetDataRequired(u32 dataName) const - { - const Data* dataNode = GetData(dataName); - AZ_Assert(dataNode != NULL, "Data node in tag 0x%08x with name 0x%08x is required but missing!", m_name, dataName); - return dataNode; - } - }; - - AZ_CLASS_ALLOCATOR(DrillerDOMParser, OSAllocator, 0) - - DrillerDOMParser(bool isPersistentInputData = false); - ~DrillerDOMParser(); - /// return true if we are at top level of the tree and we can parse the data safely (there may be still more data, but it's top level only). - bool CanParse() const { return m_topNode == &m_root; } - - const Node* GetRootNode() const { return &m_root; } - protected: - Node m_root; - Node* m_topNode; - bool m_isPersistentInputData; ///< true if data that we process is persistent so we don't need to copy it internally, false otherwise. - - void OnTag(u32 name, bool isOpen); - void OnData(const Data& data); - void DeleteNode(Node& node); - }; - - /** - * Base class for handling a Tag with a specific name. Handlers are kept in a hierarchy - * with one required by DrillerSAXParserHandler to be able to handle tags at a root - * level for the driller data stream. - */ - class DrillerHandlerParser - { - public: - DrillerHandlerParser(bool isWarnOnUnsupportedTags = true) - : m_isWarnOnUnsupportedTags(isWarnOnUnsupportedTags) {} - - virtual ~DrillerHandlerParser() {} - /// Enumerate all the child tags that we support for the tag we are handling. If the tag is not know you should return NULL - virtual DrillerHandlerParser* OnEnterTag(u32 tagName) { (void)tagName; return NULL; } - /// Exit tag you are not required to implement this, we always exist tags in order FILO. - virtual void OnExitTag(DrillerHandlerParser* handler, u32 tagName) { (void)handler; (void)tagName; } - /// Handle that data for the tag we are handling. - virtual void OnData(const DrillerSAXParser::Data& dataNode) { (void)dataNode; } - /// Return the warning state on unsupported tags (sometime you might want to warn usually) and sometimes not (if you load newer drills, etc.) - inline bool IsWarnOnUnsupportedTags() const { return m_isWarnOnUnsupportedTags; } - - protected: - bool m_isWarnOnUnsupportedTags; - }; - - /** - * Processes a driller driller and dispatches the data based on the - * the DrillerHandlerParser (handlers) and their ability to handle specific tags. - * If a tag is NOT found as a child of the current one it will display a warning with the tag name - * (useless it's allowed by DrillerHandlerParser::IsWarnOnUnsupportedTags) and process the stream - * is a safe manner by skipping all the data and tags we can't handle. - */ - class DrillerSAXParserHandler - : public DrillerSAXParser - { - public: - AZ_CLASS_ALLOCATOR(DrillerSAXParserHandler, OSAllocator, 0) - - DrillerSAXParserHandler(DrillerHandlerParser* rootHandler); - - protected: - - /// Called from DrillerSAXParser when we have an open tag. - void OnTag(u32 name, bool isOpen); - /// Called from DrillerSAXParser when we have data, which will be forwarded to the handler. - void OnData(const DrillerSAXParser::Data& data); - - typedef vector::type DrillerHandlerStackType; - DrillerHandlerStackType m_stack; - }; - } // namespace Debug -} // namespace AZ - -#endif // AZCORE_DRILLER_STREAM_H -#pragma once - - diff --git a/Code/Framework/AzCore/AzCore/IO/FileIOEventBus.h b/Code/Framework/AzCore/AzCore/IO/FileIOEventBus.h deleted file mode 100644 index ba8fef9a7b..0000000000 --- a/Code/Framework/AzCore/AzCore/IO/FileIOEventBus.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#ifndef AZCORE_SYSTEM_FILE_BUS_H -#define AZCORE_SYSTEM_FILE_BUS_H - -#include -#include -#include - -namespace AZ -{ - namespace IO - { - /** - * File IO interface. All events return true if we executed the - * specific operation and no other code will be executed. If we return false - * the normal code for the specific event will be executed. - * IMPORTANT: We support multiple listeners with the idea that many systems can listen - * for event. This interface allows to actually perform the operations, in such cases make - * sure only one of the listeners provides this service (otherwise depending on registration - * order service providers may change) - * IMPORTANT: We don't provide any sync for the FileIOBus. We do that for a couple of reasons. - * 1. If you will handle file IO youself or keeptrack of statistics you code will most likely already do that - * 2. It is NOT safe to BusConnect/BusDisconnect while the FileIO is in use (this is why you should connect in advance) - * otherwise if you provide service you can end up connecting in a middle of reads/writes/etc. - */ - class FileIO - : public AZ::EBusTraits - { - public: - virtual ~FileIO() {} - virtual bool OnOpen(SystemFile& file, const char* fileName, int mode, int platformFlags, bool& isFileOpened) = 0; - virtual bool OnClose(SystemFile& file) = 0; - virtual bool OnSeek(SystemFile& file, SystemFile::SizeType offset, SystemFile::SeekMode mode) = 0; - virtual bool OnRead(SystemFile& file, SystemFile::SizeType byteSize, void* buffer, SystemFile::SizeType& numRead) = 0; - virtual bool OnWrite(SystemFile& file, const void* buffer, SystemFile::SizeType byteSize, SystemFile::SizeType& numWritten) = 0; - }; - - typedef AZ::EBus FileIOBus; - - /** - * Interface for handling file io events. All events are syncronized - */ - class FileIOEvents - : public AZ::EBusTraits - { - public: - virtual ~FileIOEvents() {} - - ////////////////////////////////////////////////////////////////////////// - // EBusTraits overrides - //TODO rbbaklov or zolniery look into why a recursive lock was not needed previously - typedef AZStd::recursive_mutex MutexType; //< make sure all file events are thread safe as they will called from many threads - ////////////////////////////////////////////////////////////////////////// - - /** - * You will either have a file (SystemFile) pointer or fileName pointer to the file name. - * \param fileName is provided when there is NO SystemFile object (when you call static functions). - */ - virtual void OnError(const SystemFile* file, const char* fileName, int errorCode) = 0; - }; - - typedef AZ::EBus FileIOEventBus; - } -} -#endif // AZCORE_SYSTEM_FILE_BUS_H -#pragma once diff --git a/Code/Framework/AzCore/AzCore/IO/SystemFile.cpp b/Code/Framework/AzCore/AzCore/IO/SystemFile.cpp index ac12a59609..12f4003144 100644 --- a/Code/Framework/AzCore/AzCore/IO/SystemFile.cpp +++ b/Code/Framework/AzCore/AzCore/IO/SystemFile.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include @@ -101,7 +100,6 @@ bool SystemFile::Open(const char* fileName, int mode, int platformFlags) { if (strlen(fileName) > m_fileName.max_size()) { - EBUS_EVENT(FileIOEventBus, OnError, this, nullptr, 0); return false; } @@ -109,17 +107,6 @@ bool SystemFile::Open(const char* fileName, int mode, int platformFlags) m_fileName = fileName; } - if (FileIOBus::HasHandlers()) - { - bool isOpen = false; - bool isHandled = false; - EBUS_EVENT_RESULT(isHandled, FileIOBus, OnOpen, *this, m_fileName.c_str(), mode, platformFlags, isOpen); - if (isHandled) - { - return isOpen; - } - } - AZ_Assert(!IsOpen(), "This file (%s) is already open!", m_fileName.c_str()); return PlatformOpen(mode, platformFlags); @@ -133,31 +120,11 @@ bool SystemFile::ReOpen(int mode, int platformFlags) void SystemFile::Close() { - if (FileIOBus::HasHandlers()) - { - bool isHandled = false; - EBUS_EVENT_RESULT(isHandled, FileIOBus, OnClose, *this); - if (isHandled) - { - return; - } - } - PlatformClose(); } void SystemFile::Seek(SeekSizeType offset, SeekMode mode) { - if (FileIOBus::HasHandlers()) - { - bool isHandled = false; - EBUS_EVENT_RESULT(isHandled, FileIOBus, OnSeek, *this, offset, mode); - if (isHandled) - { - return; - } - } - Platform::Seek(m_handle, this, offset, mode); } @@ -178,33 +145,11 @@ AZ::u64 SystemFile::ModificationTime() SystemFile::SizeType SystemFile::Read(SizeType byteSize, void* buffer) { - if (FileIOBus::HasHandlers()) - { - SizeType numRead = 0; - bool isHandled = false; - EBUS_EVENT_RESULT(isHandled, FileIOBus, OnRead, *this, byteSize, buffer, numRead); - if (isHandled) - { - return numRead; - } - } - return Platform::Read(m_handle, this, byteSize, buffer); } SystemFile::SizeType SystemFile::Write(const void* buffer, SizeType byteSize) { - if (FileIOBus::HasHandlers()) - { - SizeType numWritten = 0; - bool isHandled = false; - EBUS_EVENT_RESULT(isHandled, FileIOBus, OnWrite, *this, buffer, byteSize, numWritten); - if (isHandled) - { - return numWritten; - } - } - return Platform::Write(m_handle, this, buffer, byteSize); } diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocationRecords.cpp b/Code/Framework/AzCore/AzCore/Memory/AllocationRecords.cpp index b55b2db768..680d93501a 100644 --- a/Code/Framework/AzCore/AzCore/Memory/AllocationRecords.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/AllocationRecords.cpp @@ -9,10 +9,10 @@ #include #include #include -#include #include #include +#include #include @@ -26,30 +26,25 @@ using namespace AZ::Debug; // AllocationRecords // [9/16/2009] //========================================================================= -AllocationRecords::AllocationRecords(unsigned char stackRecordLevels, bool isMemoryGuard, bool isMarkUnallocatedMemory, const char* allocatorName) +AllocationRecords::AllocationRecords(unsigned char stackRecordLevels, [[maybe_unused]] bool isMemoryGuard, bool isMarkUnallocatedMemory, const char* allocatorName) : m_mode(AllocatorManager::Instance().m_defaultTrackingRecordMode) , m_isAutoIntegrityCheck(false) , m_isMarkUnallocatedMemory(isMarkUnallocatedMemory) , m_saveNames(false) , m_decodeImmediately(false) , m_numStackLevels(stackRecordLevels) +#if defined(ENABLE_MEMORY_GUARD) + , m_memoryGuardSize(isMemoryGuard ? sizeof(Debug::GuardValue) : 0) +#else + , m_memoryGuardSize(0) +#endif , m_requestedAllocs(0) , m_requestedBytes(0) , m_requestedBytesPeak(0) , m_allocatorName(allocatorName) { -#if defined(ENABLE_MEMORY_GUARD) - m_memoryGuardSize = isMemoryGuard ? sizeof(Debug::GuardValue) : 0; -#else - (void)isMemoryGuard; - m_memoryGuardSize = 0; -#endif -#if AZ_TRAIT_OS_HAS_CRITICAL_SECTION_SPIN_COUNT - SetCriticalSectionSpinCount(DrillerEBusMutex::GetMutex().native_handle(), 4000); -#endif - // preallocate some buckets - //m_records.rehash(20000); -}; + +} //========================================================================= // ~AllocationRecords @@ -73,7 +68,7 @@ AllocationRecords::~AllocationRecords() void AllocationRecords::lock() { - DrillerEBusMutex::GetMutex().lock(); + m_recordsMutex.lock(); } //========================================================================= @@ -82,7 +77,7 @@ AllocationRecords::lock() //========================================================================= bool AllocationRecords::try_lock() { - return DrillerEBusMutex::GetMutex().try_lock(); + return m_recordsMutex.try_lock(); } //========================================================================= @@ -92,7 +87,7 @@ bool AllocationRecords::try_lock() void AllocationRecords::unlock() { - DrillerEBusMutex::GetMutex().unlock(); + m_recordsMutex.unlock(); } //========================================================================= @@ -117,7 +112,7 @@ AllocationRecords::RegisterAllocation(void* address, size_t byteSize, size_t ali { if (m_isAutoIntegrityCheck) { - IntegrityCheckNoLock(); + IntegrityCheck(); } AZ_Assert(byteSize>sizeof(Debug::GuardValue), "Did you forget to add the extra MemoryGuardSize() bytes?"); @@ -125,7 +120,11 @@ AllocationRecords::RegisterAllocation(void* address, size_t byteSize, size_t ali new(reinterpret_cast(address)+byteSize) Debug::GuardValue(); } - Debug::AllocationRecordsType::pair_iter_bool iterBool = m_records.insert_key(address); + Debug::AllocationRecordsType::pair_iter_bool iterBool; + { + AZStd::scoped_lock lock(m_recordsMutex); + iterBool = m_records.insert_key(address); + } if (!iterBool.second) { @@ -210,7 +209,15 @@ AllocationRecords::RegisterAllocation(void* address, size_t byteSize, size_t ali // statistics m_requestedBytes += byteSize; - m_requestedBytesPeak = AZStd::GetMax(m_requestedBytesPeak, m_requestedBytes); + + size_t currentRequestedBytePeak; + size_t newRequestedBytePeak; + do + { + currentRequestedBytePeak = m_requestedBytesPeak.load(std::memory_order::memory_order_relaxed); + newRequestedBytePeak = AZStd::GetMax(currentRequestedBytePeak, m_requestedBytes.load(std::memory_order::memory_order_relaxed)); + } while (!m_requestedBytesPeak.compare_exchange_weak(currentRequestedBytePeak, newRequestedBytePeak)); + ++m_requestedAllocs; return &ai; @@ -220,8 +227,7 @@ AllocationRecords::RegisterAllocation(void* address, size_t byteSize, size_t ali // UnregisterAllocation // [9/11/2009] //========================================================================= -void -AllocationRecords::UnregisterAllocation(void* address, size_t byteSize, size_t alignment, AllocationInfo* info) +void AllocationRecords::UnregisterAllocation(void* address, size_t byteSize, size_t alignment, AllocationInfo* info) { if (m_mode == RECORD_NO_RECORDS) { @@ -232,24 +238,38 @@ AllocationRecords::UnregisterAllocation(void* address, size_t byteSize, size_t a return; } - Debug::AllocationRecordsType::iterator iter = m_records.find(address); - - // We cannot assert if an allocation does not exist because our allocators start up way before the driller is started and the Allocator Records would be created. - // It is currently impossible to actually track all allocations that happen before a certain point - //AZ_Assert(iter!=m_records.end(), "Could not find address 0x%p in the allocator!", address); - if (iter == m_records.end()) + AllocationInfo allocationInfo; { - return; + AZStd::scoped_lock lock(m_recordsMutex); + Debug::AllocationRecordsType::iterator iter = m_records.find(address); + // We cannot assert if an allocation does not exist because allocations may have been made before tracking was enabled. + // It is currently impossible to actually track all allocations that happen before a certain point + // AZ_Assert(iter!=m_records.end(), "Could not find address 0x%p in the allocator!", address); + if (iter == m_records.end()) + { + return; + } + allocationInfo = iter->second; + m_records.erase(iter); + + // try to be more aggressive and keep the memory footprint low. + // \todo store the load factor at the last rehash to avoid unnecessary rehash + if (m_records.load_factor() < 0.9f) + { + m_records.rehash(0); + } } - AllocatorManager::Instance().DebugBreak(address, iter->second); + + + AllocatorManager::Instance().DebugBreak(address, allocationInfo); (void)byteSize; (void)alignment; - AZ_Assert(byteSize==0||byteSize==iter->second.m_byteSize, "Mismatched byteSize at deallocation! You supplied an invalid value!"); - AZ_Assert(alignment==0||alignment==iter->second.m_alignment, "Mismatched alignment at deallocation! You supplied an invalid value!"); + AZ_Assert(byteSize==0||byteSize==allocationInfo.m_byteSize, "Mismatched byteSize at deallocation! You supplied an invalid value!"); + AZ_Assert(alignment==0||alignment==allocationInfo.m_alignment, "Mismatched alignment at deallocation! You supplied an invalid value!"); // statistics - m_requestedBytes -= iter->second.m_byteSize; + m_requestedBytes -= allocationInfo.m_byteSize; #if defined(ENABLE_MEMORY_GUARD) // memory guard @@ -258,18 +278,18 @@ AllocationRecords::UnregisterAllocation(void* address, size_t byteSize, size_t a if (m_isAutoIntegrityCheck) { // full integrity check - IntegrityCheckNoLock(); + IntegrityCheck(); } else { // check current allocation - char* guardAddress = reinterpret_cast(address)+iter->second.m_byteSize; + char* guardAddress = reinterpret_cast(address)+allocationInfo.m_byteSize; Debug::GuardValue* guard = reinterpret_cast(guardAddress); if (!guard->Validate()) { AZ_Printf("Memory", "Memory stomp located at address %p, part of allocation:", guardAddress); PrintAllocationsCB printAlloc(true); - printAlloc(address, iter->second, m_numStackLevels); + printAlloc(address, allocationInfo, m_numStackLevels); AZ_Assert(false, "MEMORY STOMP DETECTED!!!"); } guard->~GuardValue(); @@ -278,33 +298,26 @@ AllocationRecords::UnregisterAllocation(void* address, size_t byteSize, size_t a #endif // delete allocation record - if (iter->second.m_namesBlock) + if (allocationInfo.m_namesBlock) { - m_records.get_allocator().deallocate(iter->second.m_namesBlock, iter->second.m_namesBlockSize, 1); - iter->second.m_namesBlock = nullptr; - iter->second.m_namesBlockSize = 0; - iter->second.m_name = nullptr; - iter->second.m_fileName = nullptr; + m_records.get_allocator().deallocate(allocationInfo.m_namesBlock, allocationInfo.m_namesBlockSize, 1); + allocationInfo.m_namesBlock = nullptr; + allocationInfo.m_namesBlockSize = 0; + allocationInfo.m_name = nullptr; + allocationInfo.m_fileName = nullptr; } - if (iter->second.m_stackFrames) + if (allocationInfo.m_stackFrames) { - m_records.get_allocator().deallocate(iter->second.m_stackFrames, sizeof(AZ::Debug::StackFrame)*m_numStackLevels, 1); - iter->second.m_stackFrames = nullptr; + m_records.get_allocator().deallocate(allocationInfo.m_stackFrames, sizeof(AZ::Debug::StackFrame)*m_numStackLevels, 1); + allocationInfo.m_stackFrames = nullptr; } if (info) { - *info = iter->second; + *info = allocationInfo; } - m_records.erase(iter); - // try to be more aggressive and keep the memory footprint low. - // \todo store the load factor at the last rehash to avoid unnecessary rehash - if (m_records.load_factor()<0.9f) - { - m_records.rehash(0); - } // if requested set memory to a specific value. if (m_isMarkUnallocatedMemory) @@ -325,9 +338,14 @@ AllocationRecords::ResizeAllocation(void* address, size_t newSize) return; } - Debug::AllocationRecordsType::iterator iter = m_records.find(address); - AZ_Assert(iter!=m_records.end(), "Could not find address 0x%p in the allocator!", address); - AllocatorManager::Instance().DebugBreak(address, iter->second); + AllocationInfo* allocationInfo; + { + AZStd::scoped_lock lock(m_recordsMutex); + Debug::AllocationRecordsType::iterator iter = m_records.find(address); + AZ_Assert(iter != m_records.end(), "Could not find address 0x%p in the allocator!", address); + allocationInfo = &iter->second; + } + AllocatorManager::Instance().DebugBreak(address, *allocationInfo); #if defined(ENABLE_MEMORY_GUARD) if (m_memoryGuardSize == sizeof(Debug::GuardValue)) @@ -335,12 +353,12 @@ AllocationRecords::ResizeAllocation(void* address, size_t newSize) if (m_isAutoIntegrityCheck) { // full integrity check - IntegrityCheckNoLock(); + IntegrityCheck(); } else { // check memory guard - char* guardAddress = reinterpret_cast(address)+iter->second.m_byteSize; + char* guardAddress = reinterpret_cast(address) + allocationInfo->m_byteSize; Debug::GuardValue* guard = reinterpret_cast(guardAddress); if (!guard->Validate()) { @@ -358,13 +376,19 @@ AllocationRecords::ResizeAllocation(void* address, size_t newSize) #endif // statistics - m_requestedBytes -= iter->second.m_byteSize; + m_requestedBytes -= allocationInfo->m_byteSize; m_requestedBytes += newSize; - m_requestedBytesPeak = AZStd::GetMax(m_requestedBytesPeak, m_requestedBytes); + size_t currentRequestedBytePeak; + size_t newRequestedBytePeak; + do + { + currentRequestedBytePeak = m_requestedBytesPeak.load(std::memory_order::memory_order_relaxed); + newRequestedBytePeak = AZStd::GetMax(currentRequestedBytePeak, m_requestedBytes.load(std::memory_order::memory_order_relaxed)); + } while (!m_requestedBytesPeak.compare_exchange_weak(currentRequestedBytePeak, newRequestedBytePeak)); ++m_requestedAllocs; // update allocation size - iter->second.m_byteSize = newSize; + allocationInfo->m_byteSize = newSize; } //========================================================================= @@ -374,21 +398,20 @@ AllocationRecords::ResizeAllocation(void* address, size_t newSize) void AllocationRecords::SetMode(Mode mode) { - DrillerEBusMutex::GetMutex().lock(); - - if (mode==RECORD_NO_RECORDS) + if (mode == RECORD_NO_RECORDS) { - m_records.clear(); + { + AZStd::scoped_lock lock(m_recordsMutex); + m_records.clear(); + } m_requestedBytes = 0; m_requestedBytesPeak = 0; m_requestedAllocs = 0; } - AZ_Warning("Memory", m_mode!=RECORD_NO_RECORDS||mode==RECORD_NO_RECORDS, "Records recording was disabled and now it's enabled! You might get assert when you free memory, if a you have allocations which were not recorded!"); + AZ_Warning("Memory", m_mode != RECORD_NO_RECORDS || mode == RECORD_NO_RECORDS, "Records recording was disabled and now it's enabled! You might get assert when you free memory, if a you have allocations which were not recorded!"); m_mode = mode; - - DrillerEBusMutex::GetMutex().unlock(); } //========================================================================= @@ -398,11 +421,14 @@ AllocationRecords::SetMode(Mode mode) void AllocationRecords::EnumerateAllocations(AllocationInfoCBType cb) { - DrillerEBusMutex::GetMutex().lock(); // enumerate all allocations and stop if requested. // Since allocations can change during the iteration (code that prints out the records could allocate, which will // mutate m_records), we are going to make a copy and iterate the copy. - const Debug::AllocationRecordsType recordsCopy = m_records; + Debug::AllocationRecordsType recordsCopy; + { + AZStd::scoped_lock lock(m_recordsMutex); + recordsCopy = m_records; + } for (Debug::AllocationRecordsType::const_iterator iter = recordsCopy.begin(); iter != recordsCopy.end(); ++iter) { if (!cb(iter->first, iter->second, m_numStackLevels)) @@ -410,7 +436,6 @@ AllocationRecords::EnumerateAllocations(AllocationInfoCBType cb) break; } } - DrillerEBusMutex::GetMutex().unlock(); } //========================================================================= @@ -420,38 +445,29 @@ AllocationRecords::EnumerateAllocations(AllocationInfoCBType cb) void AllocationRecords::IntegrityCheck() const { +#if defined(ENABLE_MEMORY_GUARD) if (m_memoryGuardSize == sizeof(Debug::GuardValue)) { - DrillerEBusMutex::GetMutex().lock(); - - IntegrityCheckNoLock(); - - DrillerEBusMutex::GetMutex().unlock(); - } -} - -//========================================================================= -// IntegrityCheckNoLock -// [9/13/2011] -//========================================================================= -void -AllocationRecords::IntegrityCheckNoLock() const -{ -#if defined(ENABLE_MEMORY_GUARD) - for (Debug::AllocationRecordsType::const_iterator iter = m_records.begin(); iter != m_records.end(); ++iter) - { - // check memory guard - const char* guardAddress = reinterpret_cast(iter->first)+ iter->second.m_byteSize; - if (!reinterpret_cast(guardAddress)->Validate()) + Debug::AllocationRecordsType recordsCopy; { - // We have to turn off the integrity check at this point if we want to succesfully report the memory - // stomp we just found. If we don't turn this off, the printf just winds off the stack as each memory - // allocation done therein recurses this same code. - *const_cast(&m_isAutoIntegrityCheck) = false; - AZ_Printf("Memory", "Memory stomp located at address %p, part of allocation:", guardAddress); - PrintAllocationsCB printAlloc(true); - printAlloc(iter->first, iter->second, m_numStackLevels); - AZ_Error("Memory", false, "MEMORY STOMP DETECTED!!!"); + AZStd::scoped_lock lock(m_recordsMutex); + recordsCopy = m_records; + } + for (Debug::AllocationRecordsType::const_iterator iter = recordsCopy.begin(); iter != recordsCopy.end(); ++iter) + { + // check memory guard + const char* guardAddress = reinterpret_cast(iter->first)+ iter->second.m_byteSize; + if (!reinterpret_cast(guardAddress)->Validate()) + { + // We have to turn off the integrity check at this point if we want to succesfully report the memory + // stomp we just found. If we don't turn this off, the printf just winds off the stack as each memory + // allocation done therein recurses this same code. + *const_cast(&m_isAutoIntegrityCheck) = false; + AZ_Printf("Memory", "Memory stomp located at address %p, part of allocation:", guardAddress); + PrintAllocationsCB printAlloc(true); + printAlloc(iter->first, iter->second, m_numStackLevels); + AZ_Error("Memory", false, "MEMORY STOMP DETECTED!!!"); + } } } #endif diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocationRecords.h b/Code/Framework/AzCore/AzCore/Memory/AllocationRecords.h index 709e16174d..3f998b0bbd 100644 --- a/Code/Framework/AzCore/AzCore/Memory/AllocationRecords.h +++ b/Code/Framework/AzCore/AzCore/Memory/AllocationRecords.h @@ -120,10 +120,9 @@ namespace AZ */ class AllocationRecords { - friend class MemoryDriller; + public: AZ_CLASS_ALLOCATOR(AllocationRecords, OSAllocator, 0); - public: enum Mode : int { RECORD_NO_RECORDS, ///< Never record any information. @@ -178,7 +177,7 @@ namespace AZ /// Returns peak of requested memory. IMPORTANT: This is user requested memory! Any allocator overhead is NOT included. size_t RequestedBytesPeak() const { return m_requestedBytesPeak; } /// Reset the peak allocation to the current requested memory. - void ResetPeakBytes() { m_requestedBytesPeak = m_requestedBytes; } + void ResetPeakBytes() { m_requestedBytesPeak.store(m_requestedBytes); } /// Return requested user bytes. IMPORTANT: This is user requested memory! Any allocator overhead is NOT included. size_t RequestedBytes() const { return m_requestedBytes; } /// Returns total number of requested allocations. @@ -186,8 +185,6 @@ namespace AZ const char* GetAllocatorName() const { return m_allocatorName; } - protected: - // @{ Allocation tracking management - we assume this functions are called with the lock locked. const AllocationInfo* RegisterAllocation(void* address, size_t byteSize, size_t alignment, const char* name, const char* fileName, int lineNum, unsigned int stackSuppressCount); void UnregisterAllocation(void* address, size_t byteSize, size_t alignment, AllocationInfo* info); @@ -195,9 +192,9 @@ namespace AZ void ResizeAllocation(void* address, size_t newSize); // @} - void IntegrityCheckNoLock() const; - + protected: Debug::AllocationRecordsType m_records; + AZStd::spin_mutex m_recordsMutex; Mode m_mode; bool m_isAutoIntegrityCheck; bool m_isMarkUnallocatedMemory; ///< True if we want to set value 0xcd in unallocated memory. @@ -205,9 +202,9 @@ namespace AZ bool m_decodeImmediately; unsigned char m_numStackLevels; unsigned int m_memoryGuardSize; - size_t m_requestedAllocs; - size_t m_requestedBytes; - size_t m_requestedBytesPeak; + AZStd::atomic m_requestedAllocs; + AZStd::atomic m_requestedBytes; + AZStd::atomic m_requestedBytesPeak; const char* m_allocatorName; }; diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp index e450f12bcf..61e883bb4e 100644 --- a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.cpp @@ -8,7 +8,6 @@ #include #include -#include using namespace AZ; @@ -74,16 +73,24 @@ void AllocatorBase::PostCreate() } } -#if PLATFORM_MEMORY_INSTRUMENTATION_ENABLED - m_platformMemoryInstrumentationGroupId = AZ::PlatformMemoryInstrumentation::GetNextGroupId(); - AZ::PlatformMemoryInstrumentation::RegisterGroup(m_platformMemoryInstrumentationGroupId, GetDescription(), AZ::PlatformMemoryInstrumentation::m_groupRoot); -#endif + const auto debugConfig = GetDebugConfig(); + if (!debugConfig.m_excludeFromDebugging) + { + SetRecords(aznew Debug::AllocationRecords((unsigned char)debugConfig.m_stackRecordLevels, debugConfig.m_usesMemoryGuards, debugConfig.m_marksUnallocatedMemory, GetName())); + } m_isReady = true; } void AllocatorBase::PreDestroy() { + Debug::AllocationRecords* allocatorRecords = GetRecords(); + if(allocatorRecords) + { + delete allocatorRecords; + SetRecords(nullptr); + } + if (m_registrationEnabled && AZ::AllocatorManager::IsReady()) { AllocatorManager::Instance().UnRegisterAllocator(this); @@ -130,11 +137,11 @@ void AllocatorBase::ProfileAllocation(void* ptr, size_t byteSize, size_t alignme if (m_isProfilingActive) { -#if PLATFORM_MEMORY_INSTRUMENTATION_ENABLED - AZ::PlatformMemoryInstrumentation::Alloc(ptr, byteSize, 0, m_platformMemoryInstrumentationGroupId); -#else - EBUS_EVENT(AZ::Debug::MemoryDrillerBus, RegisterAllocation, this, ptr, byteSize, alignment, name, fileName, lineNum, suppressStackRecord); -#endif + auto records = GetRecords(); + if (records) + { + records->RegisterAllocation(ptr, byteSize, alignment, name, fileName, lineNum, suppressStackRecord + 1); + } } } @@ -142,37 +149,25 @@ void AllocatorBase::ProfileDeallocation(void* ptr, size_t byteSize, size_t align { if (m_isProfilingActive) { -#if PLATFORM_MEMORY_INSTRUMENTATION_ENABLED - AZ::PlatformMemoryInstrumentation::Free(ptr); -#else - EBUS_EVENT(AZ::Debug::MemoryDrillerBus, UnregisterAllocation, this, ptr, byteSize, alignment, info); -#endif + auto records = GetRecords(); + if (records) + { + records->UnregisterAllocation(ptr, byteSize, alignment, info); + } } } -void AllocatorBase::ProfileReallocationBegin(void* ptr, size_t newSize) +void AllocatorBase::ProfileReallocationBegin([[maybe_unused]] void* ptr, [[maybe_unused]] size_t newSize) { - if (m_isProfilingActive) - { -#if PLATFORM_MEMORY_INSTRUMENTATION_ENABLED - AZ::PlatformMemoryInstrumentation::ReallocBegin(ptr, newSize, m_platformMemoryInstrumentationGroupId); -#else - // Driller API intensionally not called, only End is required. - AZ_UNUSED(ptr); - AZ_UNUSED(newSize); -#endif - } } void AllocatorBase::ProfileReallocationEnd(void* ptr, void* newPtr, size_t newSize, size_t newAlignment) { if (m_isProfilingActive) { -#if PLATFORM_MEMORY_INSTRUMENTATION_ENABLED - AZ::PlatformMemoryInstrumentation::ReallocEnd(newPtr, newSize, 0); -#else - EBUS_EVENT(AZ::Debug::MemoryDrillerBus, ReallocateAllocation, this, ptr, newPtr, newSize, newAlignment); -#endif + Debug::AllocationInfo info; + ProfileDeallocation(ptr, 0, 0, &info); + ProfileAllocation(newPtr, newSize, newAlignment, info.m_name, info.m_fileName, info.m_lineNum, 0); } } @@ -185,7 +180,11 @@ void AllocatorBase::ProfileResize(void* ptr, size_t newSize) { if (newSize && m_isProfilingActive) { - EBUS_EVENT(AZ::Debug::MemoryDrillerBus, ResizeAllocation, this, ptr, newSize); + auto records = GetRecords(); + if (records) + { + records->ResizeAllocation(ptr, newSize); + } } } diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.h b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.h index 0502c25e5d..8f8a17e470 100644 --- a/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.h +++ b/Code/Framework/AzCore/AzCore/Memory/AllocatorBase.h @@ -8,7 +8,6 @@ #pragma once #include -#include namespace AZ { @@ -103,16 +102,13 @@ namespace AZ const char* m_name = nullptr; const char* m_desc = nullptr; - Debug::AllocationRecords* m_records = nullptr; // Cached pointer to allocation records. Works together with the MemoryDriller. + Debug::AllocationRecords* m_records = nullptr; // Cached pointer to allocation records size_t m_memoryGuardSize = 0; bool m_isLazilyCreated = false; bool m_isProfilingActive = false; bool m_isReady = false; bool m_canBeOverridden = true; bool m_registrationEnabled = true; -#if PLATFORM_MEMORY_INSTRUMENTATION_ENABLED - uint16_t m_platformMemoryInstrumentationGroupId = 0; -#endif }; namespace Internal { diff --git a/Code/Framework/AzCore/AzCore/Memory/AllocatorManager.cpp b/Code/Framework/AzCore/AzCore/Memory/AllocatorManager.cpp index 44ce08ebd9..70ac813972 100644 --- a/Code/Framework/AzCore/AzCore/Memory/AllocatorManager.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/AllocatorManager.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include @@ -215,8 +214,6 @@ AllocatorManager::RegisterAllocator(class IAllocator* alloc) #ifdef AZCORE_MEMORY_ENABLE_OVERRIDES ConfigureAllocatorOverrides(alloc); #endif - - EBUS_EVENT(Debug::MemoryDrillerBus, RegisterAllocator, alloc); } //========================================================================= @@ -319,11 +316,6 @@ AllocatorManager::UnRegisterAllocator(class IAllocator* alloc) { AZStd::lock_guard lock(m_allocatorListMutex); - if (alloc->GetRecords()) - { - EBUS_EVENT(Debug::MemoryDrillerBus, UnregisterAllocator, alloc); - } - for (int i = 0; i < m_numAllocators; ++i) { if (m_allocators[i] == alloc) diff --git a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapAllocator.cpp b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapAllocator.cpp index ca414df4b5..30b0b78fe5 100644 --- a/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapAllocator.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/BestFitExternalMapAllocator.cpp @@ -10,7 +10,6 @@ #include #include -#include #include @@ -79,8 +78,14 @@ AllocatorDebugConfig BestFitExternalMapAllocator::GetDebugConfig() // Allocate // [1/28/2011] //========================================================================= -BestFitExternalMapAllocator::pointer_type -BestFitExternalMapAllocator::Allocate(size_type byteSize, size_type alignment, int flags, const char* name, const char* fileName, int lineNum, unsigned int suppressStackRecord) +BestFitExternalMapAllocator::pointer_type BestFitExternalMapAllocator::Allocate( + size_type byteSize, + size_type alignment, + int flags, + [[maybe_unused]] const char* name, + [[maybe_unused]] const char* fileName, + [[maybe_unused]] int lineNum, + unsigned int suppressStackRecord) { (void)suppressStackRecord; @@ -89,17 +94,6 @@ BestFitExternalMapAllocator::Allocate(size_type byteSize, size_type alignment, i byteSize = MemorySizeAdjustedUp(byteSize); BestFitExternalMapAllocator::pointer_type address = m_schema->Allocate(byteSize, alignment, flags); - if (address == nullptr) - { - if (!OnOutOfMemory(byteSize, alignment, flags, name, fileName, lineNum)) - { - if (GetRecords()) - { - EBUS_EVENT(Debug::MemoryDrillerBus, DumpAllAllocations); - } - } - } - AZ_Assert(address != nullptr, "BestFitExternalMapAllocator: Failed to allocate %d bytes aligned on %d (flags: 0x%08x) %s : %s (%d)!", byteSize, alignment, flags, name ? name : "(no name)", fileName ? fileName : "(no file name)", lineNum); AZ_MEMORY_PROFILE(ProfileAllocation(address, byteSize, alignment, name, fileName, lineNum, suppressStackRecord + 1)); diff --git a/Code/Framework/AzCore/AzCore/Memory/IAllocator.h b/Code/Framework/AzCore/AzCore/Memory/IAllocator.h index 1aa4cf70f5..532335e50b 100644 --- a/Code/Framework/AzCore/AzCore/Memory/IAllocator.h +++ b/Code/Framework/AzCore/AzCore/Memory/IAllocator.h @@ -14,7 +14,6 @@ namespace AZ namespace Debug { class AllocationRecords; - class MemoryDriller; } namespace AllocatorStorage @@ -83,7 +82,7 @@ namespace AZ /// Sets the number of entries to omit from the top of the callstack when recording stack traces. AllocatorDebugConfig& StackRecordLevels(int levels) { m_stackRecordLevels = levels; return *this; } - /// Set to true if this allocator should not have its records recorded and analyzed by systems like the MemoryDriller. + /// Set to true if this allocator should not have its records recorded and analyzed. AllocatorDebugConfig& ExcludeFromDebugging(bool exclude = true) { m_excludeFromDebugging = exclude; return *this; } /// Set to true if this allocator expands allocations with guard sections to detect overruns. @@ -207,8 +206,6 @@ namespace AZ template friend class AllocatorWrapper; - - friend class Debug::MemoryDriller; }; } diff --git a/Code/Framework/AzCore/AzCore/Memory/MemoryDriller.cpp b/Code/Framework/AzCore/AzCore/Memory/MemoryDriller.cpp deleted file mode 100644 index dc35c6322b..0000000000 --- a/Code/Framework/AzCore/AzCore/Memory/MemoryDriller.cpp +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include - -#include -#include - -#include -#include - -namespace AZ::Debug -{ - //========================================================================= - // MemoryDriller - // [2/6/2013] - //========================================================================= - MemoryDriller::MemoryDriller(const Descriptor& desc) - { - (void)desc; - BusConnect(); - - AllocatorManager::Instance().EnterProfilingMode(); - - { - // Register all allocators that were created before the driller existed - auto allocatorLock = AllocatorManager::Instance().LockAllocators(); - - for (int i = 0; i < AllocatorManager::Instance().GetNumAllocators(); ++i) - { - IAllocator* allocator = AllocatorManager::Instance().GetAllocator(i); - RegisterAllocator(allocator); - } - } - } - - //========================================================================= - // ~MemoryDriller - // [2/6/2013] - //========================================================================= - MemoryDriller::~MemoryDriller() - { - BusDisconnect(); - AllocatorManager::Instance().ExitProfilingMode(); - } - - //========================================================================= - // Start - // [2/6/2013] - //========================================================================= - void MemoryDriller::Start(const Param* params, int numParams) - { - (void)params; - (void)numParams; - - // dump current allocations for all allocators with tracking - auto allocatorLock = AllocatorManager::Instance().LockAllocators(); - for (int i = 0; i < AllocatorManager::Instance().GetNumAllocators(); ++i) - { - IAllocator* allocator = AllocatorManager::Instance().GetAllocator(i); - if (auto records = allocator->GetRecords()) - { - RegisterAllocatorOutput(allocator); - const AllocationRecordsType& allocMap = records->GetMap(); - for (AllocationRecordsType::const_iterator allocIt = allocMap.begin(); allocIt != allocMap.end(); ++allocIt) - { - RegisterAllocationOutput(allocator, allocIt->first, &allocIt->second); - } - } - } - } - - //========================================================================= - // Stop - // [2/6/2013] - //========================================================================= - void MemoryDriller::Stop() - { - } - - //========================================================================= - // RegisterAllocator - // [2/6/2013] - //========================================================================= - void MemoryDriller::RegisterAllocator(IAllocator* allocator) - { - // Ignore if our allocator is already registered - if (allocator->GetRecords() != nullptr) - { - return; - } - - auto debugConfig = allocator->GetDebugConfig(); - - if (!debugConfig.m_excludeFromDebugging) - { - allocator->SetRecords(aznew Debug::AllocationRecords((unsigned char)debugConfig.m_stackRecordLevels, debugConfig.m_usesMemoryGuards, debugConfig.m_marksUnallocatedMemory, allocator->GetName())); - - m_allAllocatorRecords.push_back(allocator->GetRecords()); - - if (m_output == nullptr) - { - return; // we have no active output - } - RegisterAllocatorOutput(allocator); - } - } - //========================================================================= - // RegisterAllocatorOutput - // [2/6/2013] - //========================================================================= - void MemoryDriller::RegisterAllocatorOutput(IAllocator* allocator) - { - auto records = allocator->GetRecords(); - m_output->BeginTag(AZ_CRC("MemoryDriller", 0x1b31269d)); - m_output->BeginTag(AZ_CRC("RegisterAllocator", 0x19f08114)); - m_output->Write(AZ_CRC("Name", 0x5e237e06), allocator->GetName()); - m_output->Write(AZ_CRC("Id", 0xbf396750), allocator); - m_output->Write(AZ_CRC("Capacity", 0xb5e8b174), allocator->GetAllocationSource()->Capacity()); - m_output->Write(AZ_CRC("RecordsId", 0x7caaca88), records); - if (records) - { - m_output->Write(AZ_CRC("RecordsMode", 0x764c147a), (char)records->GetMode()); - m_output->Write(AZ_CRC("NumStackLevels", 0xad9cff15), records->GetNumStackLevels()); - } - m_output->EndTag(AZ_CRC("RegisterAllocator", 0x19f08114)); - m_output->EndTag(AZ_CRC("MemoryDriller", 0x1b31269d)); - } - - //========================================================================= - // UnregisterAllocator - // [2/6/2013] - //========================================================================= - void MemoryDriller::UnregisterAllocator(IAllocator* allocator) - { - auto allocatorRecords = allocator->GetRecords(); - AZ_Assert(allocatorRecords, "This allocator is not registered with the memory driller!"); - for (auto records : m_allAllocatorRecords) - { - if (records == allocatorRecords) - { - m_allAllocatorRecords.remove(records); - break; - } - } - delete allocatorRecords; - allocator->SetRecords(nullptr); - - if (m_output == nullptr) - { - return; // we have no active output - } - m_output->BeginTag(AZ_CRC("MemoryDriller", 0x1b31269d)); - m_output->Write(AZ_CRC("UnregisterAllocator", 0xb2b54f93), allocator); - m_output->EndTag(AZ_CRC("MemoryDriller", 0x1b31269d)); - } - - //========================================================================= - // RegisterAllocation - // [2/6/2013] - //========================================================================= - void MemoryDriller::RegisterAllocation(IAllocator* allocator, void* address, size_t byteSize, size_t alignment, const char* name, const char* fileName, int lineNum, unsigned int stackSuppressCount) - { - auto records = allocator->GetRecords(); - if (records) - { - const AllocationInfo* info = records->RegisterAllocation(address, byteSize, alignment, name, fileName, lineNum, stackSuppressCount + 1); - if (m_output == nullptr) - { - return; // we have no active output - } - RegisterAllocationOutput(allocator, address, info); - } - } - - //========================================================================= - // RegisterAllocationOutput - // [2/6/2013] - //========================================================================= - void MemoryDriller::RegisterAllocationOutput(IAllocator* allocator, void* address, const AllocationInfo* info) - { - auto records = allocator->GetRecords(); - m_output->BeginTag(AZ_CRC("MemoryDriller", 0x1b31269d)); - m_output->BeginTag(AZ_CRC("RegisterAllocation", 0x992a9780)); - m_output->Write(AZ_CRC("RecordsId", 0x7caaca88), records); - m_output->Write(AZ_CRC("Address", 0x0d4e6f81), address); - if (info) - { - if (info->m_name) - { - m_output->Write(AZ_CRC("Name", 0x5e237e06), info->m_name); - } - m_output->Write(AZ_CRC("Alignment", 0x2cce1e5c), info->m_alignment); - m_output->Write(AZ_CRC("Size", 0xf7c0246a), info->m_byteSize); - if (info->m_fileName) - { - m_output->Write(AZ_CRC("FileName", 0x3c0be965), info->m_fileName); - m_output->Write(AZ_CRC("FileLine", 0xb33c2395), info->m_lineNum); - } - // copy the stack frames directly, resolving the stack should happen later as this is a SLOW procedure. - if (info->m_stackFrames) - { - m_output->Write(AZ_CRC("Stack", 0x41a87b6a), info->m_stackFrames, info->m_stackFrames + records->GetNumStackLevels()); - } - } - m_output->EndTag(AZ_CRC("RegisterAllocation", 0x992a9780)); - m_output->EndTag(AZ_CRC("MemoryDriller", 0x1b31269d)); - } - - //========================================================================= - // UnRegisterAllocation - // [2/6/2013] - //========================================================================= - void MemoryDriller::UnregisterAllocation(IAllocator* allocator, void* address, size_t byteSize, size_t alignment, AllocationInfo* info) - { - auto records = allocator->GetRecords(); - if (records) - { - records->UnregisterAllocation(address, byteSize, alignment, info); - - if (m_output == nullptr) - { - return; // we have no active output - } - m_output->BeginTag(AZ_CRC("MemoryDriller", 0x1b31269d)); - m_output->BeginTag(AZ_CRC("UnRegisterAllocation", 0xea5dc4cd)); - m_output->Write(AZ_CRC("RecordsId", 0x7caaca88), records); - m_output->Write(AZ_CRC("Address", 0x0d4e6f81), address); - m_output->EndTag(AZ_CRC("UnRegisterAllocation", 0xea5dc4cd)); - m_output->EndTag(AZ_CRC("MemoryDriller", 0x1b31269d)); - } - } - - //========================================================================= - // ReallocateAllocation - // [10/1/2018] - //========================================================================= - void MemoryDriller::ReallocateAllocation(IAllocator* allocator, void* prevAddress, void* newAddress, size_t newByteSize, size_t newAlignment) - { - AllocationInfo info; - UnregisterAllocation(allocator, prevAddress, 0, 0, &info); - RegisterAllocation(allocator, newAddress, newByteSize, newAlignment, info.m_name, info.m_fileName, info.m_lineNum, 0); - } - - //========================================================================= - // ResizeAllocation - // [2/6/2013] - //========================================================================= - void MemoryDriller::ResizeAllocation(IAllocator* allocator, void* address, size_t newSize) - { - auto records = allocator->GetRecords(); - if (records) - { - records->ResizeAllocation(address, newSize); - - if (m_output == nullptr) - { - return; // we have no active output - } - m_output->BeginTag(AZ_CRC("MemoryDriller", 0x1b31269d)); - m_output->BeginTag(AZ_CRC("ResizeAllocation", 0x8a9c78dc)); - m_output->Write(AZ_CRC("RecordsId", 0x7caaca88), records); - m_output->Write(AZ_CRC("Address", 0x0d4e6f81), address); - m_output->Write(AZ_CRC("Size", 0xf7c0246a), newSize); - m_output->EndTag(AZ_CRC("ResizeAllocation", 0x8a9c78dc)); - m_output->EndTag(AZ_CRC("MemoryDriller", 0x1b31269d)); - } - } - - void MemoryDriller::DumpAllAllocations() - { - // Create a copy so allocations done during the printing dont end up affecting the container - const AZStd::list allocationRecords = m_allAllocatorRecords; - - for (auto records : allocationRecords) - { - // Skip if we have had no allocations made - if (records->RequestedAllocs()) - { - records->EnumerateAllocations(AZ::Debug::PrintAllocationsCB(true, true)); - } - } - } - -} // namespace AZ::Debug diff --git a/Code/Framework/AzCore/AzCore/Memory/MemoryDriller.h b/Code/Framework/AzCore/AzCore/Memory/MemoryDriller.h deleted file mode 100644 index 9bcbc85217..0000000000 --- a/Code/Framework/AzCore/AzCore/Memory/MemoryDriller.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#ifndef AZCORE_MEMORY_DRILLER_H -#define AZCORE_MEMORY_DRILLER_H 1 - -#include -#include - -namespace AZ -{ - namespace Debug - { - struct StackFrame; - - /** - * Trace messages driller class - */ - class MemoryDriller - : public Driller - , public MemoryDrillerBus::Handler - { - public: - AZ_CLASS_ALLOCATOR(MemoryDriller, OSAllocator, 0) - - // TODO: Centralized settings for memory tracking. - struct Descriptor - { - }; - - MemoryDriller(const Descriptor& desc = Descriptor()); - ~MemoryDriller(); - - protected: - ////////////////////////////////////////////////////////////////////////// - // Driller - const char* GroupName() const override { return "SystemDrillers"; } - const char* GetName() const override { return "MemoryDriller"; } - const char* GetDescription() const override { return "Reports all allocators and memory allocations."; } - void Start(const Param* params = NULL, int numParams = 0) override; - void Stop() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // MemoryDrillerBus - void RegisterAllocator(IAllocator* allocator) override; - void UnregisterAllocator(IAllocator* allocator) override; - - void RegisterAllocation(IAllocator* allocator, void* address, size_t byteSize, size_t alignment, const char* name, const char* fileName, int lineNum, unsigned int stackSuppressCount) override; - void UnregisterAllocation(IAllocator* allocator, void* address, size_t byteSize, size_t alignment, AllocationInfo* info) override; - void ReallocateAllocation(IAllocator* allocator, void* prevAddress, void* newAddress, size_t newByteSize, size_t newAlignment) override; - void ResizeAllocation(IAllocator* allocator, void* address, size_t newSize) override; - - void DumpAllAllocations() override; - ////////////////////////////////////////////////////////////////////////// - - void RegisterAllocatorOutput(IAllocator* allocator); - void RegisterAllocationOutput(IAllocator* allocator, void* address, const AllocationInfo* info); - private: - // Store a list of all of our allocator records so we can dump them all without having to know about the allocators - AZStd::list m_allAllocatorRecords; - }; - } // namespace Debug -} // namespace AZ - -#endif // AZCORE_MEMORY_DRILLER_H -#pragma once diff --git a/Code/Framework/AzCore/AzCore/Memory/MemoryDrillerBus.h b/Code/Framework/AzCore/AzCore/Memory/MemoryDrillerBus.h deleted file mode 100644 index 43a31af006..0000000000 --- a/Code/Framework/AzCore/AzCore/Memory/MemoryDrillerBus.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#ifndef AZCORE_MEMORY_DRILLER_BUS_H -#define AZCORE_MEMORY_DRILLER_BUS_H 1 - -#include - -namespace AZ -{ - class IAllocator; - namespace Debug - { - //class AllocationRecords; - struct AllocationInfo; - - /** - * Memory allocations driller message. - * - * We use a driller bus so all messages are sending in exclusive matter no other driller messages - * can be triggered at that moment, so we already preserve the calling order. You can assume - * all access code in the driller framework in guarded. You can manually lock the driller mutex are you - * use by using \ref AZ::Debug::DrillerEBusMutex. - */ - class MemoryDrillerMessages - : public AZ::Debug::DrillerEBusTraits - { - public: - virtual ~MemoryDrillerMessages() {} - - /// Register allocation (with customizable tracking settings - TODO: we should centralize this settings and remove them from here) - virtual void RegisterAllocator(IAllocator* allocator) = 0; - virtual void UnregisterAllocator(IAllocator* allocator) = 0; - - virtual void RegisterAllocation(IAllocator* allocator, void* address, size_t byteSize, size_t alignment, const char* name, const char* fileName, int lineNum, unsigned int stackSuppressCount) = 0; - virtual void UnregisterAllocation(IAllocator* allocator, void* address, size_t byteSize, size_t alignment, AllocationInfo* info) = 0; - virtual void ReallocateAllocation(IAllocator* allocator, void* prevAddress, void* newAddress, size_t newByteSize, size_t newAlignment) = 0; - virtual void ResizeAllocation(IAllocator* allocator, void* address, size_t newSize) = 0; - - virtual void DumpAllAllocations() = 0; - }; - - typedef AZ::EBus MemoryDrillerBus; - } // namespace Debug -} // namespace AZ - -#endif // AZCORE_MEMORY_DRILLER_BUS_H -#pragma once diff --git a/Code/Framework/AzCore/AzCore/Memory/OSAllocator.h b/Code/Framework/AzCore/AzCore/Memory/OSAllocator.h index b327cf6349..3a8080483b 100644 --- a/Code/Framework/AzCore/AzCore/Memory/OSAllocator.h +++ b/Code/Framework/AzCore/AzCore/Memory/OSAllocator.h @@ -20,7 +20,7 @@ namespace AZ * OS allocator should be used for direct OS allocations (C heap) * It's memory usage is NOT tracked. If you don't create this allocator, it will be implicitly * created by the SystemAllocator when it is needed. In addition this allocator is used for - * debug data (like drillers, memory trackng, etc.) + * debug data (like memory tracking, etc.) */ class OSAllocator : public AllocatorBase diff --git a/Code/Framework/AzCore/AzCore/Memory/PlatformMemoryInstrumentation.h b/Code/Framework/AzCore/AzCore/Memory/PlatformMemoryInstrumentation.h deleted file mode 100644 index bc6499566d..0000000000 --- a/Code/Framework/AzCore/AzCore/Memory/PlatformMemoryInstrumentation.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include - -#if AZ_TRAIT_OS_MEMORY_INSTRUMENTATION && !defined(_RELEASE) -#define PLATFORM_MEMORY_INSTRUMENTATION_ENABLED 1 -#else -#define PLATFORM_MEMORY_INSTRUMENTATION_ENABLED 0 -#endif - -#if PLATFORM_MEMORY_INSTRUMENTATION_ENABLED - -#include -#include - -namespace AZ -{ - /** - * PlatformMemoryInstrumentation - Abstraction layer for platform specific memory instrumentation. - */ - class PlatformMemoryInstrumentation - { - public: - static uint16_t GetNextGroupId() { return m_nextGroupId++; }; - static void RegisterGroup(uint16_t id, const char* name, uint16_t parentGroup); - static void Alloc(const void* ptr, uint64_t size, uint32_t padding, uint16_t group); - static void Free(const void* ptr); - static void ReallocBegin(const void* origPtr, uint64_t size, uint16_t group); - static void ReallocEnd(const void* newPtr, uint64_t size, uint32_t padding); - static const uint16_t m_groupRoot; - static uint16_t m_nextGroupId; - }; -} - -#endif // PLATFORM_MEMORY_INSTRUMENTATION_ENABLED diff --git a/Code/Framework/AzCore/AzCore/Memory/PoolAllocator.h b/Code/Framework/AzCore/AzCore/Memory/PoolAllocator.h index 72418b3d6e..a03f7b5b92 100644 --- a/Code/Framework/AzCore/AzCore/Memory/PoolAllocator.h +++ b/Code/Framework/AzCore/AzCore/Memory/PoolAllocator.h @@ -12,9 +12,6 @@ #include #include -#include - - namespace AZ { template diff --git a/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp b/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp index 8c84338fd0..ddcc046b8e 100644 --- a/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp +++ b/Code/Framework/AzCore/AzCore/Memory/SystemAllocator.cpp @@ -11,7 +11,6 @@ #include #include -#include #include @@ -248,14 +247,6 @@ SystemAllocator::Allocate(size_type byteSize, size_type alignment, int flags, co if (address == nullptr) { byteSize = MemorySizeAdjustedDown(byteSize); // restore original size - - if (!OnOutOfMemory(byteSize, alignment, flags, name, fileName, lineNum)) - { - if (GetRecords()) - { - EBUS_EVENT(Debug::MemoryDrillerBus, DumpAllAllocations); - } - } } AZ_Assert(address != nullptr, "SystemAllocator: Failed to allocate %d bytes aligned on %d (flags: 0x%08x) %s : %s (%d)!", byteSize, alignment, flags, name ? name : "(no name)", fileName ? fileName : "(no file name)", lineNum); diff --git a/Code/Framework/AzCore/AzCore/Slice/SliceAssetHandler.cpp b/Code/Framework/AzCore/AzCore/Slice/SliceAssetHandler.cpp index 551ca1258d..a942d0c9f1 100644 --- a/Code/Framework/AzCore/AzCore/Slice/SliceAssetHandler.cpp +++ b/Code/Framework/AzCore/AzCore/Slice/SliceAssetHandler.cpp @@ -13,7 +13,6 @@ #include #include #include -#include namespace AZ { diff --git a/Code/Framework/AzCore/AzCore/Task/TaskGraph.h b/Code/Framework/AzCore/AzCore/Task/TaskGraph.h index fa6f5dbe94..ffe3ea6caf 100644 --- a/Code/Framework/AzCore/AzCore/Task/TaskGraph.h +++ b/Code/Framework/AzCore/AzCore/Task/TaskGraph.h @@ -16,6 +16,7 @@ #include #include #include +#include namespace AZ { diff --git a/Code/Framework/AzCore/AzCore/UnitTest/TestTypes.h b/Code/Framework/AzCore/AzCore/UnitTest/TestTypes.h index e5dcb32d9d..afa6898944 100644 --- a/Code/Framework/AzCore/AzCore/UnitTest/TestTypes.h +++ b/Code/Framework/AzCore/AzCore/UnitTest/TestTypes.h @@ -13,8 +13,6 @@ #include #include -#include -#include #include #if defined(HAVE_BENCHMARK) @@ -39,7 +37,6 @@ namespace UnitTest */ class AllocatorsBase { - AZ::Debug::DrillerManager* m_drillerManager; bool m_ownsAllocator{}; public: @@ -47,8 +44,7 @@ namespace UnitTest void SetupAllocator(const AZ::SystemAllocator::Descriptor& allocatorDesc = {}) { - m_drillerManager = AZ::Debug::DrillerManager::Create(); - m_drillerManager->Register(aznew AZ::Debug::MemoryDriller); + AZ::AllocatorManager::Instance().EnterProfilingMode(); AZ::AllocatorManager::Instance().SetDefaultTrackingMode(AZ::Debug::AllocationRecords::RECORD_FULL); // Only create the SystemAllocator if it s not ready @@ -68,9 +64,9 @@ namespace UnitTest AZ::AllocatorInstance::Destroy(); } m_ownsAllocator = false; - AZ::Debug::DrillerManager::Destroy(m_drillerManager); AZ::AllocatorManager::Instance().SetDefaultTrackingMode(AZ::Debug::AllocationRecords::RECORD_NO_RECORDS); + AZ::AllocatorManager::Instance().ExitProfilingMode(); } }; @@ -93,8 +89,7 @@ namespace UnitTest * Helper class to handle the boiler plate of setting up a test fixture that uses the system allocators * If you wish to do additional setup and tear down be sure to call the base class SetUp first and TearDown * last. - * By default memory tracking through driller is enabled. - * Defaults to a heap size of 15 MB + * By default memory tracking is enabled. */ class AllocatorsTestFixture @@ -123,8 +118,7 @@ namespace UnitTest * Helper class to handle the boiler plate of setting up a benchmark fixture that uses the system allocators * If you wish to do additional setup and tear down be sure to call the base class SetUp first and TearDown * last. - * By default memory tracking through driller is disabled. - * Defaults to a heap size of 15 MB + * By default memory tracking is enabled. */ class AllocatorsBenchmarkFixture : public ::benchmark::Fixture diff --git a/Code/Framework/AzCore/AzCore/azcore_files.cmake b/Code/Framework/AzCore/AzCore/azcore_files.cmake index 7506d2f644..e8001f7215 100644 --- a/Code/Framework/AzCore/AzCore/azcore_files.cmake +++ b/Code/Framework/AzCore/AzCore/azcore_files.cmake @@ -92,10 +92,6 @@ set(FILES Compression/Compression.h Compression/zstd_compression.cpp Compression/zstd_compression.h - Debug/AssetTracking.cpp - Debug/AssetTracking.h - Debug/AssetTrackingTypesImpl.h - Debug/AssetTrackingTypes.h Debug/Budget.h Debug/Budget.cpp Debug/BudgetTracker.h @@ -111,18 +107,10 @@ set(FILES Debug/ProfilerReflection.cpp Debug/ProfilerReflection.h Debug/StackTracer.h - Debug/EventTrace.h - Debug/EventTrace.cpp - Debug/EventTraceDriller.h - Debug/EventTraceDriller.cpp - Debug/EventTraceDrillerBus.h Debug/Timer.h Debug/Trace.cpp Debug/Trace.h Debug/TraceMessageBus.h - Debug/TraceMessagesDriller.cpp - Debug/TraceMessagesDriller.h - Debug/TraceMessagesDrillerBus.h Debug/TraceReflection.cpp Debug/TraceReflection.h DOM/DomBackend.cpp @@ -134,14 +122,6 @@ set(FILES DOM/Backends/JSON/JsonBackend.h DOM/Backends/JSON/JsonSerializationUtils.cpp DOM/Backends/JSON/JsonSerializationUtils.h - Driller/DefaultStringPool.h - Driller/Driller.cpp - Driller/Driller.h - Driller/DrillerBus.cpp - Driller/DrillerBus.h - Driller/DrillerRootHandler.h - Driller/Stream.cpp - Driller/Stream.h EBus/BusImpl.h EBus/EBus.h EBus/EBusEnvironment.cpp @@ -178,7 +158,6 @@ set(FILES IO/CompressorZStd.h IO/FileIO.cpp IO/FileIO.h - IO/FileIOEventBus.h IO/FileReader.cpp IO/FileReader.h IO/IOUtils.h @@ -404,16 +383,12 @@ set(FILES Memory/Memory.h Memory/MemoryComponent.cpp Memory/MemoryComponent.h - Memory/MemoryDriller.cpp - Memory/MemoryDriller.h - Memory/MemoryDrillerBus.h Memory/nedmalloc.inl Memory/NewAndDelete.inl Memory/OSAllocator.cpp Memory/OSAllocator.h Memory/OverrunDetectionAllocator.cpp Memory/OverrunDetectionAllocator.h - Memory/PlatformMemoryInstrumentation.h Memory/PoolAllocator.h Memory/PoolSchema.cpp Memory/PoolSchema.h diff --git a/Code/Framework/AzCore/AzCore/std/parallel/threadbus.h b/Code/Framework/AzCore/AzCore/std/parallel/threadbus.h index 26c2f92edb..85b716a6fa 100644 --- a/Code/Framework/AzCore/AzCore/std/parallel/threadbus.h +++ b/Code/Framework/AzCore/AzCore/std/parallel/threadbus.h @@ -8,9 +8,9 @@ #ifndef AZSTD_THREAD_BUS_H #define AZSTD_THREAD_BUS_H 1 -#include #include #include +#include namespace AZStd { @@ -32,24 +32,7 @@ namespace AZStd virtual void OnThreadExit(const AZStd::thread::id& id) = 0; }; - //! Thread events driller bus - only "drillers" (profilers) should connect to this. - //! A global mutex that includes a lock on the memory manager and other driller busses - //! is held during dispatch, and listeners are expected to do no allocation - //! or thread workloads or blocking or mutex operations of their own - only dump the data to - //! network or file ASAP. - //! DO NOT USE this bus unless you are a profiler capture system, use the ThreadEvents / ThreadBus instead - class ThreadDrillerEvents - : public AZ::Debug::DrillerEBusTraits - { - public: - /// Called when we enter a thread, optional thread_desc is provided when the use provides one. - virtual void OnThreadEnter(const AZStd::thread::id& id, const AZStd::thread_desc* desc) = 0; - /// Called when we exit a thread. - virtual void OnThreadExit(const AZStd::thread::id& id) = 0; - }; - typedef AZ::EBus ThreadEventBus; - typedef AZ::EBus ThreadDrillerEventBus; } #endif // AZSTD_THREAD_BUS_H diff --git a/Code/Framework/AzCore/Platform/Android/AzCore/IO/SystemFile_Android.cpp b/Code/Framework/AzCore/Platform/Android/AzCore/IO/SystemFile_Android.cpp index b9a6cfef9a..a0b95960ed 100644 --- a/Code/Framework/AzCore/Platform/Android/AzCore/IO/SystemFile_Android.cpp +++ b/Code/Framework/AzCore/Platform/Android/AzCore/IO/SystemFile_Android.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include @@ -87,7 +86,6 @@ bool SystemFile::PlatformOpen(int mode, int platformFlags) } else { - EBUS_EVENT(FileIOEventBus, OnError, this, nullptr, EINVAL); return false; } @@ -103,7 +101,6 @@ bool SystemFile::PlatformOpen(int mode, int platformFlags) { if (isApkFile) { - EBUS_EVENT(FileIOEventBus, OnError, this, nullptr, ENOSPC); return false; } @@ -125,7 +122,6 @@ bool SystemFile::PlatformOpen(int mode, int platformFlags) if (m_handle == PlatformSpecificInvalidHandle) { - EBUS_EVENT(FileIOEventBus, OnError, this, nullptr, errorCode); return false; } @@ -168,22 +164,8 @@ namespace Platform::Internal entry = readdir(dir); } - int lastError = errno; - if (lastError != 0) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, filter, lastError); - } - closedir(dir); } - else - { - int lastError = errno; - if (lastError != ENOENT) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, filter, 0); - } - } } void FindFilesInApk(const char* filter, const SystemFile::FindFileCB& cb) @@ -233,11 +215,7 @@ namespace Platform { if (handle != PlatformSpecificInvalidHandle) { - off_t result = fseeko(handle, static_cast(offset), mode); - if (result != 0) - { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, errno); - } + fseeko(handle, static_cast(offset), mode); } } @@ -248,7 +226,6 @@ namespace Platform off_t result = ftello(handle); if (result == (off_t)-1) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, errno); return 0; } return aznumeric_cast(result); @@ -292,7 +269,6 @@ namespace Platform if (bytesRead != bytesToRead && ferror(handle)) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, errno); return 0; } @@ -311,7 +287,6 @@ namespace Platform if (bytesWritten != bytesToWrite && ferror(handle)) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, errno); return 0; } @@ -325,10 +300,7 @@ namespace Platform { if (handle != PlatformSpecificInvalidHandle) { - if (fflush(handle) != 0) - { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, errno); - } + fflush(handle); } } @@ -347,7 +319,6 @@ namespace Platform struct stat fileStat; if (stat(fileName, &fileStat) < 0) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, 0); return 0; } return static_cast(fileStat.st_size); diff --git a/Code/Framework/AzCore/Platform/Common/Apple/AzCore/IO/SystemFile_Apple.cpp b/Code/Framework/AzCore/Platform/Common/Apple/AzCore/IO/SystemFile_Apple.cpp index be5cbc3859..deb2d49516 100644 --- a/Code/Framework/AzCore/Platform/Common/Apple/AzCore/IO/SystemFile_Apple.cpp +++ b/Code/Framework/AzCore/Platform/Common/Apple/AzCore/IO/SystemFile_Apple.cpp @@ -7,9 +7,9 @@ */ #include -#include #include #include +#include #include #include <../Common/UnixLike/AzCore/IO/Internal/SystemFileUtils_UnixLike.h> @@ -44,21 +44,7 @@ namespace AZ::IO::Platform entry = readdir(dir); } - int lastError = errno; - if (lastError != 0) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, filter, lastError); - } - closedir(dir); } - else - { - int lastError = errno; - if (lastError != ENOENT) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, filter, 0); - } - } } } diff --git a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/IO/SystemFile_UnixLike.cpp b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/IO/SystemFile_UnixLike.cpp index 8f651a9559..2bf7fdc5f2 100644 --- a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/IO/SystemFile_UnixLike.cpp +++ b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/IO/SystemFile_UnixLike.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include @@ -130,7 +129,6 @@ namespace Platform int result = remove(fileName); if (result != 0) { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, fileName, result); return false; } @@ -142,7 +140,6 @@ namespace Platform int result = rename(sourceFileName, targetFileName); if (result) { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, sourceFileName, result); return false; } @@ -198,10 +195,6 @@ namespace Platform } azstrcpy(dirPath, AZ_MAX_PATH_LEN, dirName); bool success = CreateDirRecursive(dirPath); - if (!success) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, dirName, errno); - } return success; } return false; diff --git a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/std/parallel/internal/thread_UnixLike.cpp b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/std/parallel/internal/thread_UnixLike.cpp index b615f677f1..da5d95b9a4 100644 --- a/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/std/parallel/internal/thread_UnixLike.cpp +++ b/Code/Framework/AzCore/Platform/Common/UnixLike/AzCore/std/parallel/internal/thread_UnixLike.cpp @@ -35,7 +35,6 @@ namespace AZStd destroy_thread_info(ti); ThreadEventBus::Broadcast(&ThreadEventBus::Events::OnThreadExit, this_thread::get_id()); - ThreadDrillerEventBus::Broadcast(&ThreadDrillerEventBus::Events::OnThreadExit, this_thread::get_id()); pthread_exit(nullptr); return nullptr; } @@ -88,7 +87,6 @@ namespace AZStd Platform::PostCreateThread(tId, name, cpuId); ThreadEventBus::Broadcast(&ThreadEventBus::Events::OnThreadEnter, thread::id(tId), desc); - ThreadDrillerEventBus::Broadcast(&ThreadDrillerEventBus::Events::OnThreadEnter, thread::id(tId), desc); return tId; } } diff --git a/Code/Framework/AzCore/Platform/Common/UnixLikeDefault/AzCore/IO/SystemFile_UnixLikeDefault.cpp b/Code/Framework/AzCore/Platform/Common/UnixLikeDefault/AzCore/IO/SystemFile_UnixLikeDefault.cpp index 88c47ed142..7302232a49 100644 --- a/Code/Framework/AzCore/Platform/Common/UnixLikeDefault/AzCore/IO/SystemFile_UnixLikeDefault.cpp +++ b/Code/Framework/AzCore/Platform/Common/UnixLikeDefault/AzCore/IO/SystemFile_UnixLikeDefault.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include @@ -61,7 +60,6 @@ bool SystemFile::PlatformOpen(int mode, int platformFlags) } else { - EBUS_EVENT(FileIOEventBus, OnError, this, nullptr, 0); return false; } @@ -88,7 +86,6 @@ bool SystemFile::PlatformOpen(int mode, int platformFlags) if (m_handle == PlatformSpecificInvalidHandle) { - EBUS_EVENT(FileIOEventBus, OnError, this, nullptr, errno); return false; } else @@ -119,11 +116,7 @@ namespace Platform { if (handle != PlatformSpecificInvalidHandle) { - int result = lseek(handle, offset, mode); - if (result == -1) - { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, errno); - } + lseek(handle, offset, mode); } } @@ -132,10 +125,6 @@ namespace Platform if (handle != PlatformSpecificInvalidHandle) { off_t result = lseek(handle, 0, SEEK_CUR); - if (result == (off_t)-1) - { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, errno); - } return aznumeric_cast(result); } @@ -149,14 +138,12 @@ namespace Platform off_t current = lseek(handle, 0, SEEK_CUR); if (current == (off_t)-1) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, current); return false; } off_t end = lseek(handle, 0, SEEK_END); if (end == (off_t)-1) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, end); return false; } @@ -191,7 +178,6 @@ namespace Platform ssize_t bytesRead = read(handle, buffer, byteSize); if (bytesRead == -1) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, errno); return 0; } return bytesRead; @@ -207,7 +193,6 @@ namespace Platform ssize_t result = write(handle, buffer, byteSize); if (result == -1) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, errno); return 0; } return result; @@ -221,10 +206,7 @@ namespace Platform if (handle != PlatformSpecificInvalidHandle) { #if AZ_TRAIT_SYSTEMFILE_FSYNC_IS_DEFINED - if (fsync(handle) != 0) - { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, errno); - } + fsync(handle); #endif } } @@ -236,7 +218,6 @@ namespace Platform struct stat stat; if (fstat(handle, &stat) < 0) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, 0); return 0; } return stat.st_size; diff --git a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Debug/Trace_WinAPI.cpp b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Debug/Trace_WinAPI.cpp index 4535387902..d090971359 100644 --- a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Debug/Trace_WinAPI.cpp +++ b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/Debug/Trace_WinAPI.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include #include @@ -186,8 +185,6 @@ namespace AZ::Debug Debug::Trace::Instance().PrintCallstack(nullptr, 0, ExceptionInfo->ContextRecord); - EBUS_EVENT(Debug::TraceMessageDrillerBus, OnException, message); - bool result = false; EBUS_EVENT_RESULT(result, Debug::TraceMessageBus, OnException, message); if (result) diff --git a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/IO/SystemFile_WinAPI.cpp b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/IO/SystemFile_WinAPI.cpp index 0fe32dcd4a..d608d67a85 100644 --- a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/IO/SystemFile_WinAPI.cpp +++ b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/IO/SystemFile_WinAPI.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include @@ -142,7 +141,6 @@ bool SystemFile::PlatformOpen(int mode, int platformFlags) if (m_handle == INVALID_HANDLE_VALUE) { - EBUS_EVENT(FileIOEventBus, OnError, this, nullptr, (int)GetLastError()); return false; } else @@ -160,10 +158,7 @@ void SystemFile::PlatformClose() { if (m_handle != PlatformSpecificInvalidHandle) { - if (!CloseHandle(m_handle)) - { - EBUS_EVENT(FileIOEventBus, OnError, this, nullptr, (int)GetLastError()); - } + CloseHandle(m_handle); m_handle = INVALID_HANDLE_VALUE; } } @@ -177,7 +172,7 @@ namespace Platform { using FileHandleType = AZ::IO::SystemFile::FileHandleType; - void Seek(FileHandleType handle, const SystemFile* systemFile, SystemFile::SeekSizeType offset, SystemFile::SeekMode mode) + void Seek(FileHandleType handle, [[maybe_unused]] const SystemFile* systemFile, SystemFile::SeekSizeType offset, SystemFile::SeekMode mode) { if (handle != PlatformSpecificInvalidHandle) { @@ -185,14 +180,11 @@ namespace Platform LARGE_INTEGER distToMove; distToMove.QuadPart = offset; - if (!SetFilePointerEx(handle, distToMove, 0, dwMoveMethod)) - { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, (int)GetLastError()); - } + SetFilePointerEx(handle, distToMove, 0, dwMoveMethod); } } - SystemFile::SizeType Tell(FileHandleType handle, const SystemFile* systemFile) + SystemFile::SizeType Tell(FileHandleType handle, [[maybe_unused]] const SystemFile* systemFile) { if (handle != PlatformSpecificInvalidHandle) { @@ -202,7 +194,6 @@ namespace Platform LARGE_INTEGER newFilePtr; if (!SetFilePointerEx(handle, distToMove, &newFilePtr, FILE_CURRENT)) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, (int)GetLastError()); return 0; } @@ -212,7 +203,7 @@ namespace Platform return 0; } - bool Eof(FileHandleType handle, const SystemFile* systemFile) + bool Eof(FileHandleType handle, [[maybe_unused]] const SystemFile* systemFile) { if (handle != PlatformSpecificInvalidHandle) { @@ -222,14 +213,12 @@ namespace Platform LARGE_INTEGER currentFilePtr; if (!SetFilePointerEx(handle, zero, ¤tFilePtr, FILE_CURRENT)) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, (int)GetLastError()); return false; } FILE_STANDARD_INFO fileInfo; if (!GetFileInformationByHandleEx(handle, FileStandardInfo, &fileInfo, sizeof(fileInfo))) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, (int)GetLastError()); return false; } @@ -239,14 +228,13 @@ namespace Platform return false; } - AZ::u64 ModificationTime(FileHandleType handle, const SystemFile* systemFile) + AZ::u64 ModificationTime(FileHandleType handle, [[maybe_unused]] const SystemFile* systemFile) { if (handle != PlatformSpecificInvalidHandle) { FILE_BASIC_INFO fileInfo; if (!GetFileInformationByHandleEx(handle, FileBasicInfo, &fileInfo, sizeof(fileInfo))) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, (int)GetLastError()); return 0; } @@ -263,7 +251,7 @@ namespace Platform return 0; } - SystemFile::SizeType Read(FileHandleType handle, const SystemFile* systemFile, SizeType byteSize, void* buffer) + SystemFile::SizeType Read(FileHandleType handle, [[maybe_unused]] const SystemFile* systemFile, SizeType byteSize, void* buffer) { if (handle != PlatformSpecificInvalidHandle) { @@ -271,7 +259,6 @@ namespace Platform DWORD nNumberOfBytesToRead = (DWORD)byteSize; if (!ReadFile(handle, buffer, nNumberOfBytesToRead, &dwNumBytesRead, 0)) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, (int)GetLastError()); return 0; } return static_cast(dwNumBytesRead); @@ -280,7 +267,7 @@ namespace Platform return 0; } - SystemFile::SizeType Write(FileHandleType handle, const SystemFile* systemFile, const void* buffer, SizeType byteSize) + SystemFile::SizeType Write(FileHandleType handle, [[maybe_unused]] const SystemFile* systemFile, const void* buffer, SizeType byteSize) { if (handle != PlatformSpecificInvalidHandle) { @@ -288,7 +275,6 @@ namespace Platform DWORD nNumberOfBytesToWrite = (DWORD)byteSize; if (!WriteFile(handle, buffer, nNumberOfBytesToWrite, &dwNumBytesWritten, 0)) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, (int)GetLastError()); return 0; } return static_cast(dwNumBytesWritten); @@ -297,25 +283,21 @@ namespace Platform return 0; } - void Flush(FileHandleType handle, const SystemFile* systemFile) + void Flush(FileHandleType handle, [[maybe_unused]] const SystemFile* systemFile) { if (handle != PlatformSpecificInvalidHandle) { - if (!FlushFileBuffers(handle)) - { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, (int)GetLastError()); - } + FlushFileBuffers(handle); } } - SystemFile::SizeType Length(FileHandleType handle, const SystemFile* systemFile) + SystemFile::SizeType Length(FileHandleType handle, [[maybe_unused]] const SystemFile* systemFile) { if (handle != PlatformSpecificInvalidHandle) { LARGE_INTEGER size; if (!GetFileSizeEx(handle, &size)) { - EBUS_EVENT(FileIOEventBus, OnError, systemFile, nullptr, (int)GetLastError()); return 0; } @@ -341,7 +323,6 @@ namespace Platform { WIN32_FIND_DATA fd; HANDLE hFile; - int lastError; AZ::IO::FixedMaxPathWString filterW; AZStd::to_wstring(filterW, filter); @@ -367,20 +348,7 @@ namespace Platform cb(fileName, (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0); } - lastError = (int)GetLastError(); FindClose(hFile); - if (lastError != ERROR_NO_MORE_FILES) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, fileName, lastError); - } - } - else - { - lastError = (int)GetLastError(); - if (lastError != ERROR_FILE_NOT_FOUND) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, filter, lastError); - } } } @@ -394,15 +362,11 @@ namespace Platform if (handle == INVALID_HANDLE_VALUE) { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, fileName, (int)GetLastError()); return 0; } FILE_BASIC_INFO fileInfo{}; - if (!GetFileInformationByHandleEx(handle, FileBasicInfo, &fileInfo, sizeof(fileInfo))) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, fileName, (int)GetLastError()); - } + GetFileInformationByHandleEx(handle, FileBasicInfo, &fileInfo, sizeof(fileInfo)); CloseHandle(handle); @@ -434,10 +398,6 @@ namespace Platform fileSize.HighPart = data.nFileSizeHigh; len = aznumeric_cast(fileSize.QuadPart); } - else - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, fileName, (int)GetLastError()); - } return len; } @@ -448,7 +408,6 @@ namespace Platform AZStd::to_wstring(fileNameW, fileName); if (DeleteFileW(fileNameW.c_str()) == 0) { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, fileName, (int)GetLastError()); return false; } @@ -463,7 +422,6 @@ namespace Platform AZStd::to_wstring(targetFileNameW, targetFileName); if (MoveFileExW(sourceFileNameW.c_str(), targetFileNameW.c_str(), overwrite ? MOVEFILE_REPLACE_EXISTING : 0) == 0) { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, sourceFileName, (int)GetLastError()); return false; } @@ -503,10 +461,6 @@ namespace Platform AZ::IO::FixedMaxPathWString dirNameW; AZStd::to_wstring(dirNameW, dirName); bool success = CreateDirRecursive(dirNameW); - if (!success) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, dirName, (int)GetLastError()); - } return success; } return false; diff --git a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/std/parallel/internal/thread_WinAPI.cpp b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/std/parallel/internal/thread_WinAPI.cpp index c84b4ecd98..cd638a34fa 100644 --- a/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/std/parallel/internal/thread_WinAPI.cpp +++ b/Code/Framework/AzCore/Platform/Common/WinAPI/AzCore/std/parallel/internal/thread_WinAPI.cpp @@ -38,7 +38,6 @@ namespace AZStd destroy_thread_info(ti); ThreadEventBus::Broadcast(&ThreadEventBus::Events::OnThreadExit, this_thread::get_id()); // goes to client listeners - ThreadDrillerEventBus::Broadcast(&ThreadDrillerEventBus::Events::OnThreadExit, this_thread::get_id()); // goes to the profiler. return Platform::PostThreadRun(); } @@ -73,7 +72,6 @@ namespace AZStd } ThreadEventBus::Broadcast(&ThreadEventBus::Events::OnThreadEnter, thread::id(*id), desc); - ThreadDrillerEventBus::Broadcast(&ThreadDrillerEventBus::Events::OnThreadEnter, thread::id(*id), desc); ::ResumeThread(hThread); diff --git a/Code/Framework/AzCore/Platform/Linux/AzCore/IO/SystemFile_Linux.cpp b/Code/Framework/AzCore/Platform/Linux/AzCore/IO/SystemFile_Linux.cpp index be5cbc3859..deb2d49516 100644 --- a/Code/Framework/AzCore/Platform/Linux/AzCore/IO/SystemFile_Linux.cpp +++ b/Code/Framework/AzCore/Platform/Linux/AzCore/IO/SystemFile_Linux.cpp @@ -7,9 +7,9 @@ */ #include -#include #include #include +#include #include #include <../Common/UnixLike/AzCore/IO/Internal/SystemFileUtils_UnixLike.h> @@ -44,21 +44,7 @@ namespace AZ::IO::Platform entry = readdir(dir); } - int lastError = errno; - if (lastError != 0) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, filter, lastError); - } - closedir(dir); } - else - { - int lastError = errno; - if (lastError != ENOENT) - { - EBUS_EVENT(FileIOEventBus, OnError, nullptr, filter, 0); - } - } } } diff --git a/Code/Framework/AzCore/Tests/AZStd/Parallel.cpp b/Code/Framework/AzCore/Tests/AZStd/Parallel.cpp index 6b9202133c..362560c7be 100644 --- a/Code/Framework/AzCore/Tests/AZStd/Parallel.cpp +++ b/Code/Framework/AzCore/Tests/AZStd/Parallel.cpp @@ -1392,7 +1392,7 @@ namespace UnitTest EXPECT_TRUE(done); } - // Fixture for thread-driller-bus related calls + // Fixture for thread-event-bus related calls // exists only to categorize the tests. class ThreadEventsBus : public AllocatorsFixture @@ -1438,44 +1438,33 @@ namespace UnitTest TEST_F(ThreadEventsBus, Broadcasts_BothBusses) { ThreadEventCounter eventBusCounter; - ThreadEventCounter drillerBusCounter; auto thread_function = [&]() { ; // intentionally left blank }; eventBusCounter.Connect(); - drillerBusCounter.Connect(); AZStd::thread starter = AZStd::thread(thread_function); starter.join(); - EXPECT_EQ(drillerBusCounter.m_enterCount, 1); - EXPECT_EQ(drillerBusCounter.m_exitCount, 1); EXPECT_EQ(eventBusCounter.m_enterCount, 1); EXPECT_EQ(eventBusCounter.m_exitCount, 1); eventBusCounter.Disconnect(); - drillerBusCounter.Disconnect(); } - // this class tests for deadlocks caused by interactions between the thread - // driller bus and the other driller busses. - // Client code (ie, not part of the driller system) can connec to the - // ThreadEventBus and be told when threads are started and stopped - // However, if they instead listen to the ThreadDrillerEventBus, a deadlock condition - // could be caused if they lock a mutex that another thread needs in order to proceed. - // This test makes sure that using the ThreadEventBus (ie, the one meant for client code) - // instead of the ThreadDrillerEventBus (the one meant only for profilers) does NOT cause - // a deadlock. + // This class tests for deadlocks caused by multiple threads interacting with the ThreadEventBus. + // Client code can connect to the ThreadEventBus and be told when threads are started and stopped. + // A deadlock condition could be caused if they lock a mutex that another thread needs in order to proceed. + // This test makes sure that using the ThreadEventBus does NOT cause a deadlock. // We will simulate this series of events by doing the following // 1. Main thread listens on the ThreadEventBus // 2. OnThreadExit will lock a mutex, perform an allocation, unlock a mutex // 3. The thread itself will lock the mutex, perform an allocation, unlock the mutex. - // As long as there is no cross talk between the client and the driller busses, the - // above operation should not deadlock. - // but if there is, then a deadlock can occur where one thread will be unable to perform - // its allocation because the other is in OnThreadExit() - // and the other will not be able to perform OnThreadExit() because it cannot lock the mutex. + // As long as there is no cross talk between threads, the above operation should not deadlock. + // If there is, then a deadlock can occur where one thread will be unable to perform + // its allocation because the other is in OnThreadExit() and the other will not be able to perform + // OnThreadExit() because it cannot lock the mutex. class ThreadEventsDeathTest : public AllocatorsFixture diff --git a/Code/Framework/AzCore/Tests/AZStd/TypeTraits.cpp b/Code/Framework/AzCore/Tests/AZStd/TypeTraits.cpp index da3aae1387..aeba048d69 100644 --- a/Code/Framework/AzCore/Tests/AZStd/TypeTraits.cpp +++ b/Code/Framework/AzCore/Tests/AZStd/TypeTraits.cpp @@ -8,6 +8,7 @@ #include "UserTypes.h" #include +#include #include #include #include diff --git a/Code/Framework/AzCore/Tests/Components.cpp b/Code/Framework/AzCore/Tests/Components.cpp index 013d998c52..159d55e948 100644 --- a/Code/Framework/AzCore/Tests/Components.cpp +++ b/Code/Framework/AzCore/Tests/Components.cpp @@ -175,7 +175,6 @@ namespace UnitTest ComponentApplication componentApp; ComponentApplication::Descriptor desc; desc.m_useExistingAllocator = true; - desc.m_enableDrilling = false; // we already created a memory driller for the test (AllocatorsFixture) ComponentApplication::StartupParameters startupParams; startupParams.m_allocator = &AZ::AllocatorInstance::Get(); Entity* systemEntity = componentApp.Create(desc, startupParams); @@ -631,7 +630,6 @@ namespace UnitTest ComponentApplication::Descriptor desc; desc.m_useExistingAllocator = true; - desc.m_enableDrilling = false; // we already created a memory driller for the test (AllocatorsFixture in Components) ComponentApplication::StartupParameters startupParams; startupParams.m_allocator = &AZ::AllocatorInstance::Get(); diff --git a/Code/Framework/AzCore/Tests/Debug.cpp b/Code/Framework/AzCore/Tests/Debug.cpp index bd90611af3..e27cdcd27e 100644 --- a/Code/Framework/AzCore/Tests/Debug.cpp +++ b/Code/Framework/AzCore/Tests/Debug.cpp @@ -7,7 +7,7 @@ */ #include -#include +#include #include #include #include @@ -104,7 +104,7 @@ namespace UnitTest } class TraceTest - : public AZ::Debug::TraceMessageDrillerBus::Handler + : public AZ::Debug::TraceMessageBus::Handler , public ::testing::Test { int m_numTracePrintfs; @@ -113,12 +113,13 @@ namespace UnitTest : m_numTracePrintfs(0) {} ////////////////////////////////////////////////////////////////////////// - // TraceMessagesDrillerBus - void OnPrintf(const char* windowName, const char* message) override + // TraceMessageBus + bool OnPrintf(const char* windowName, const char* message) override { (void)windowName; (void)message; ++m_numTracePrintfs; + return false; } ////////////////////////////////////////////////////////////////////////// diff --git a/Code/Framework/AzCore/Tests/Debug/AssetTracking.cpp b/Code/Framework/AzCore/Tests/Debug/AssetTracking.cpp deleted file mode 100644 index 89968406c7..0000000000 --- a/Code/Framework/AzCore/Tests/Debug/AssetTracking.cpp +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include -#include -#include - -using namespace AZ; - -namespace UnitTest -{ - namespace - { - struct TestData - { - }; - - using AssetTree = AZ::Debug::AssetTree; - using AllocationTable = AZ::Debug::AllocationTable; - - struct AssetTrackingTestEnvironment - { - AssetTrackingTestEnvironment() : m_table(m_mutex) - { - } - - AZStd::mutex m_mutex; - AssetTree m_tree; - AllocationTable m_table; - AZStd::unique_ptr m_assetTracking; - }; - } - - class AssetTrackingTests - : public ::testing::Test - { - public: - void SetUp() override - { - AZ::AllocatorInstance::Create(); - m_env.reset(new AssetTrackingTestEnvironment); - m_env->m_assetTracking.reset(aznew AZ::Debug::AssetTracking(&m_env->m_tree, &m_env->m_table)); - } - - void TearDown() override - { - m_env.reset(); - AZ::AllocatorInstance::Destroy(); - } - - void RunTests() - { - TestAssetScopes(); - TestScopedAllocation(); - TestScopeAttach(); - } - - private: - void TestAssetScopes() - { - const char* debugScopeText; - { - AZ_ASSET_NAMED_SCOPE("TestAssetScopes.1"); - { - AZ_ASSET_NAMED_SCOPE("TestAssetScopes.2"); - { - AZ_ASSET_NAMED_SCOPE("TestAssetScopes.3"); - debugScopeText = AZ::Debug::AssetTracking::GetDebugScope(); - EXPECT_STREQ(debugScopeText, "TestAssetScopes.3\nTestAssetScopes.2\nTestAssetScopes.1\n"); - } - - debugScopeText = AZ::Debug::AssetTracking::GetDebugScope(); - EXPECT_STREQ(debugScopeText, "TestAssetScopes.2\nTestAssetScopes.1\n"); - } - - - debugScopeText = AZ::Debug::AssetTracking::GetDebugScope(); - EXPECT_STREQ(debugScopeText, "TestAssetScopes.1\n"); - } - } - - void TestScopedAllocation() - { - void* TEST_POINTER = (void*)0xDEADBEEFull; - static const size_t TEST_SIZE = 32; - - { - AZ_ASSET_NAMED_SCOPE("TestScopedAllocation.1"); - AZ::Debug::AssetTreeNodeBase* activeAsset = m_env->m_assetTracking->GetCurrentThreadAsset(); - m_env->m_table.Get().emplace(TEST_POINTER, AllocationTable::RecordType{ activeAsset, (uint32_t)TEST_SIZE, TestData() }); - } - - auto& rootAsset = m_env->m_tree.m_rootAssets; - auto itr = rootAsset.m_children.find("TestScopedAllocation.1"); - - EXPECT_EQ(&rootAsset, &m_env->m_tree.GetRoot()); - ASSERT_NE(itr, rootAsset.m_children.end()); - EXPECT_EQ(itr->second.m_primaryinfo->m_id->m_id, "TestScopedAllocation.1"); - - EXPECT_EQ(&itr->second, m_env->m_table.FindAllocation(TEST_POINTER)); - - auto allocationRecord = m_env->m_table.Get().find(TEST_POINTER); - ASSERT_NE(allocationRecord, m_env->m_table.Get().end()); - EXPECT_EQ(allocationRecord->second.m_asset, &itr->second); - EXPECT_EQ(allocationRecord->second.m_size, TEST_SIZE); - - // Test realocation - void* TEST_REALLOC_POINTER = (void*)0xDEADC0DEull; - static const size_t TEST_REALLOC_SIZE = 128; - - m_env->m_table.ReallocateAllocation(TEST_POINTER, TEST_REALLOC_POINTER, TEST_REALLOC_SIZE); - allocationRecord = m_env->m_table.Get().find(TEST_POINTER); - EXPECT_EQ(allocationRecord, m_env->m_table.Get().end()); - allocationRecord = m_env->m_table.Get().find(TEST_REALLOC_POINTER); - ASSERT_NE(allocationRecord, m_env->m_table.Get().end()); - EXPECT_EQ(allocationRecord->second.m_asset, &itr->second); - EXPECT_EQ(allocationRecord->second.m_size, TEST_REALLOC_SIZE); - - // Test resize - static const size_t TEST_RESIZE_SIZE = 1024; - m_env->m_table.ResizeAllocation(TEST_REALLOC_POINTER, TEST_RESIZE_SIZE); - EXPECT_EQ(allocationRecord->second.m_size, TEST_RESIZE_SIZE); - } - - void TestScopeAttach() - { - void* TEST_POINTER = (void*)0xDEADBEEFull; - static const size_t TEST_SIZE = 32; - AZ::Debug::AssetTreeNodeBase* originatingAsset; - - { - AZ_ASSET_ATTACH_TO_SCOPE(TEST_POINTER); - EXPECT_EQ(m_env->m_assetTracking->GetCurrentThreadAsset(), nullptr); - } - - { - AZ_ASSET_NAMED_SCOPE("TestScopeAttach.1"); - { - AZ_ASSET_NAMED_SCOPE("TestScopeAttach.2"); - { - originatingAsset = m_env->m_assetTracking->GetCurrentThreadAsset(); - EXPECT_NE(originatingAsset, nullptr); - m_env->m_table.Get().emplace(TEST_POINTER, AllocationTable::RecordType{ originatingAsset, (uint32_t)TEST_SIZE, TestData() }); - } - } - } - - EXPECT_EQ(m_env->m_assetTracking->GetCurrentThreadAsset(), nullptr); - - { - AZ_ASSET_ATTACH_TO_SCOPE(TEST_POINTER); - EXPECT_EQ(m_env->m_assetTracking->GetCurrentThreadAsset(), originatingAsset); - } - } - - AZStd::unique_ptr m_env; - }; - - TEST_F(AssetTrackingTests, Test) - { - RunTests(); - } -} diff --git a/Code/Framework/AzCore/Tests/EBus.cpp b/Code/Framework/AzCore/Tests/EBus.cpp index 9acf0f8a05..470a95435b 100644 --- a/Code/Framework/AzCore/Tests/EBus.cpp +++ b/Code/Framework/AzCore/Tests/EBus.cpp @@ -2500,7 +2500,7 @@ namespace UnitTest namespace RoutingTest { - class DrillerInterceptor : public EBusVersion1::Router + class EBusInterceptor : public EBusVersion1::Router { public: void OnEvent(int a) override @@ -2555,20 +2555,20 @@ namespace UnitTest TEST_F(EBus, Routing) { using namespace RoutingTest; - DrillerInterceptor driller; + EBusInterceptor interceptor; EBusVersion1Handler v1Handler; v1Handler.BusConnect(); - driller.BusRouterConnect(); + interceptor.BusRouterConnect(); EBusVersion1::Broadcast(&EBusVersion1::Events::OnEvent, 1020); - EXPECT_EQ(1, driller.m_numOnEvent); + EXPECT_EQ(1, interceptor.m_numOnEvent); EXPECT_EQ(1, v1Handler.m_numOnEvent); - driller.BusRouterDisconnect(); + interceptor.BusRouterDisconnect(); EBusVersion1::Broadcast(&EBusVersion1::Events::OnEvent, 1020); - EXPECT_EQ(1, driller.m_numOnEvent); + EXPECT_EQ(1, interceptor.m_numOnEvent); EXPECT_EQ(2, v1Handler.m_numOnEvent); // routing events diff --git a/Code/Framework/AzCore/Tests/Math/TransformTests.cpp b/Code/Framework/AzCore/Tests/Math/TransformTests.cpp index 0138d32376..752c622ae8 100644 --- a/Code/Framework/AzCore/Tests/Math/TransformTests.cpp +++ b/Code/Framework/AzCore/Tests/Math/TransformTests.cpp @@ -402,17 +402,18 @@ namespace UnitTest AllocatorsFixture::SetUp(); AZ::ComponentApplication::Descriptor desc; desc.m_useExistingAllocator = true; - desc.m_enableDrilling = false; // we already created a memory driller for the test (AllocatorsFixture) - m_app.Create(desc); + m_app.reset(aznew AZ::ComponentApplication); + m_app->Create(desc); } void TearDown() override { - m_app.Destroy(); + m_app->Destroy(); + m_app.reset(); AllocatorsFixture::TearDown(); } - AZ::ComponentApplication m_app; + AZStd::unique_ptr m_app; }; TEST_F(MATH_TransformApplicationFixture, DeserializingOldFormat) diff --git a/Code/Framework/AzCore/Tests/Memory.cpp b/Code/Framework/AzCore/Tests/Memory.cpp index 5a483c1ed1..5287167c8b 100644 --- a/Code/Framework/AzCore/Tests/Memory.cpp +++ b/Code/Framework/AzCore/Tests/Memory.cpp @@ -12,8 +12,6 @@ #include #include -#include -#include #include #include #include @@ -44,16 +42,13 @@ namespace UnitTest void SetUp() override { AZ::AllocatorManager::Instance().SetDefaultTrackingMode(AZ::Debug::AllocationRecords::RECORD_FULL); - m_drillerManager = Debug::DrillerManager::Create(); - m_drillerManager->Register(aznew MemoryDriller); + AZ::AllocatorManager::Instance().EnterProfilingMode(); } void TearDown() override { - Debug::DrillerManager::Destroy(m_drillerManager); + AZ::AllocatorManager::Instance().ExitProfilingMode(); AZ::AllocatorManager::Instance().SetDefaultTrackingMode(AZ::Debug::AllocationRecords::RECORD_NO_RECORDS); } - protected: - Debug::DrillerManager* m_drillerManager = nullptr; }; class SystemAllocatorTest diff --git a/Code/Framework/AzCore/Tests/Memory/LeakDetection.cpp b/Code/Framework/AzCore/Tests/Memory/LeakDetection.cpp index 09255ce16f..dcfc931141 100644 --- a/Code/Framework/AzCore/Tests/Memory/LeakDetection.cpp +++ b/Code/Framework/AzCore/Tests/Memory/LeakDetection.cpp @@ -270,8 +270,7 @@ namespace UnitTest void SetUp() override { - m_drillerManager = AZ::Debug::DrillerManager::Create(); - m_drillerManager->Register(aznew AZ::Debug::MemoryDriller); + AZ::AllocatorManager::Instance().EnterProfilingMode(); AZ::AllocatorManager::Instance().SetDefaultTrackingMode(AZ::Debug::AllocationRecords::RECORD_FULL); if (azrtti_typeid() != azrtti_typeid()) // simplifies instead of template specialization @@ -292,7 +291,7 @@ namespace UnitTest // Other allocators need the SystemAllocator in order to work AZ::AllocatorInstance::Destroy(); } - AZ::Debug::DrillerManager::Destroy(m_drillerManager); + AZ::AllocatorManager::Instance().ExitProfilingMode(); m_busRedirector.BusDisconnect(); EXPECT_EQ(m_leakExpected, m_leakDetected); @@ -352,7 +351,6 @@ namespace UnitTest }; BusRedirector m_busRedirector; - AZ::Debug::DrillerManager* m_drillerManager = nullptr; bool m_leakDetected = false; bool m_leakExpected = false; }; diff --git a/Code/Framework/AzCore/Tests/Rtti.cpp b/Code/Framework/AzCore/Tests/Rtti.cpp index 935df848c2..85089b0602 100644 --- a/Code/Framework/AzCore/Tests/Rtti.cpp +++ b/Code/Framework/AzCore/Tests/Rtti.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include diff --git a/Code/Framework/AzCore/Tests/Serialization/Json/BasicContainerSerializerTests.cpp b/Code/Framework/AzCore/Tests/Serialization/Json/BasicContainerSerializerTests.cpp index 4a6a8e9e8a..17a4cfbc7f 100644 --- a/Code/Framework/AzCore/Tests/Serialization/Json/BasicContainerSerializerTests.cpp +++ b/Code/Framework/AzCore/Tests/Serialization/Json/BasicContainerSerializerTests.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include diff --git a/Code/Framework/AzCore/Tests/StatisticalProfiler.cpp b/Code/Framework/AzCore/Tests/StatisticalProfiler.cpp index fc5fe66c4b..291f2a8110 100644 --- a/Code/Framework/AzCore/Tests/StatisticalProfiler.cpp +++ b/Code/Framework/AzCore/Tests/StatisticalProfiler.cpp @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include @@ -468,28 +468,29 @@ namespace UnitTest /** Trace message handler to track messages during tests */ struct MyTraceMessageSink final - : public AZ::Debug::TraceMessageDrillerBus::Handler + : public AZ::Debug::TraceMessageBus::Handler { MyTraceMessageSink() { - AZ::Debug::TraceMessageDrillerBus::Handler::BusConnect(); + AZ::Debug::TraceMessageBus::Handler::BusConnect(); } ~MyTraceMessageSink() { - AZ::Debug::TraceMessageDrillerBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); } ////////////////////////////////////////////////////////////////////////// - // TraceMessageDrillerBus - void OnPrintf(const char* window, const char* message) override + // TraceMessageBus + bool OnPrintf(const char* window, const char* message) override { - OnOutput(window, message); + return OnOutput(window, message); } - void OnOutput(const char* window, const char* message) override + bool OnOutput(const char* window, const char* message) override { printf("%s: %s\n", window, message); + return false; } }; //struct MyTraceMessageSink diff --git a/Code/Framework/AzCore/Tests/StreamerTests.cpp b/Code/Framework/AzCore/Tests/StreamerTests.cpp index fec81a9031..9007e94ce4 100644 --- a/Code/Framework/AzCore/Tests/StreamerTests.cpp +++ b/Code/Framework/AzCore/Tests/StreamerTests.cpp @@ -258,7 +258,6 @@ namespace AZ m_application = aznew GemTestApplication(); AZ::ComponentApplication::Descriptor appDesc; appDesc.m_useExistingAllocator = true; - appDesc.m_enableDrilling = false; auto m_systemEntity = m_application->Create(appDesc); m_systemEntity->AddComponent(aznew AZ::StreamerComponent()); m_systemEntity->Init(); diff --git a/Code/Framework/AzCore/Tests/azcoretests_files.cmake b/Code/Framework/AzCore/Tests/azcoretests_files.cmake index 0fca75e2a8..b7fe113bc6 100644 --- a/Code/Framework/AzCore/Tests/azcoretests_files.cmake +++ b/Code/Framework/AzCore/Tests/azcoretests_files.cmake @@ -69,7 +69,6 @@ set(FILES TickBusTest.cpp UUIDTests.cpp XML.cpp - Debug/AssetTracking.cpp Debug/LocalFileEventLoggerTests.cpp Debug/Trace.cpp Debug/UnhandledExceptions.cpp diff --git a/Code/Framework/AzFramework/AzFramework/Asset/AssetSystemComponent.cpp b/Code/Framework/AzFramework/AzFramework/Asset/AssetSystemComponent.cpp index 3db19c53ee..bb361e56de 100644 --- a/Code/Framework/AzFramework/AzFramework/Asset/AssetSystemComponent.cpp +++ b/Code/Framework/AzFramework/AzFramework/Asset/AssetSystemComponent.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -17,7 +18,6 @@ #include #include #include -#include #include #include @@ -28,6 +28,8 @@ #include #include +AZ_DECLARE_BUDGET(AzFramework); + namespace AzFramework { namespace AssetBenchmark @@ -302,7 +304,7 @@ namespace AzFramework // SystemTickBus overrides void AssetSystemComponent::OnSystemTick() { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(AzFramework); LegacyAssetEventBus::ExecuteQueuedEvents(); } diff --git a/Code/Framework/AzFramework/AzFramework/Entity/EntityContext.cpp b/Code/Framework/AzFramework/AzFramework/Entity/EntityContext.cpp index c1283c9379..2faed93ab7 100644 --- a/Code/Framework/AzFramework/AzFramework/Entity/EntityContext.cpp +++ b/Code/Framework/AzFramework/AzFramework/Entity/EntityContext.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include #include @@ -243,8 +242,6 @@ namespace AzFramework //========================================================================= void EntityContext::ActivateEntity(AZ::EntityId entityId) { - AZ_ASSET_ATTACH_TO_SCOPE(this); - // Verify that this context has the right to perform operations on the entity bool validEntity = IsOwnedByThisContext(entityId); AZ_Warning("GameEntityContext", validEntity, "Entity with id %llu does not belong to the game context.", entityId); diff --git a/Code/Framework/AzFramework/AzFramework/Entity/SliceEntityOwnershipService.cpp b/Code/Framework/AzFramework/AzFramework/Entity/SliceEntityOwnershipService.cpp index 9a077cd611..ab14dfeb7f 100644 --- a/Code/Framework/AzFramework/AzFramework/Entity/SliceEntityOwnershipService.cpp +++ b/Code/Framework/AzFramework/AzFramework/Entity/SliceEntityOwnershipService.cpp @@ -386,7 +386,6 @@ namespace AzFramework void SliceEntityOwnershipService::OnAssetReady(AZ::Data::Asset readyAsset) { AZ_PROFILE_FUNCTION(AzFramework); - AZ_ASSET_ATTACH_TO_SCOPE(readyAsset.Get()); AZ_Assert(readyAsset.GetAs(), "Asset is not a slice!"); @@ -400,7 +399,6 @@ namespace AzFramework // we intentionally capture readyAsset by value here, so that its refcount doesn't hit 0 by the time this call happens. AZStd::function instantiateCallback = [this, readyAsset]() { - AZ_ASSET_ATTACH_TO_SCOPE(readyAsset.Get()); const AZ::Data::AssetId readyAssetId = readyAsset.GetId(); for (auto iter = m_queuedSliceInstantiations.begin(); iter != m_queuedSliceInstantiations.end(); ) { diff --git a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h index d9f077f9d4..a6d3029a57 100644 --- a/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h +++ b/Code/Framework/AzFramework/Platform/Common/Xcb/AzFramework/XcbInputDeviceKeyboard.h @@ -7,6 +7,8 @@ */ #pragma once +#pragma once + #include #include #include diff --git a/Code/Framework/AzFramework/Tests/BinToTextEncode.cpp b/Code/Framework/AzFramework/Tests/BinToTextEncode.cpp index a1ebdfd945..a4055db33c 100644 --- a/Code/Framework/AzFramework/Tests/BinToTextEncode.cpp +++ b/Code/Framework/AzFramework/Tests/BinToTextEncode.cpp @@ -34,24 +34,20 @@ namespace UnitTest AllocatorInstance::Create(); ComponentApplication::Descriptor desc; desc.m_useExistingAllocator = true; - desc.m_enableDrilling = false; // we already created a memory driller for the test (AllocatorsFixture) - m_app.Create(desc); + m_app.reset(aznew ComponentApplication); + m_app->Create(desc); } void TearDown() override { - m_app.Destroy(); + m_app->Destroy(); + m_app.reset(); AllocatorInstance::Destroy(); AllocatorInstance::Destroy(); AllocatorsFixture::TearDown(); } - ~Base64Test() override - { - - } - - ComponentApplication m_app; + AZStd::unique_ptr m_app; }; TEST_F(Base64Test, EmptyStringEncodeTest) diff --git a/Code/Framework/AzFramework/Tests/EntityContext.cpp b/Code/Framework/AzFramework/Tests/EntityContext.cpp index 74a4948e04..520067a9a6 100644 --- a/Code/Framework/AzFramework/Tests/EntityContext.cpp +++ b/Code/Framework/AzFramework/Tests/EntityContext.cpp @@ -58,7 +58,6 @@ namespace UnitTest ComponentApplication app; ComponentApplication::Descriptor desc; desc.m_useExistingAllocator = true; - desc.m_enableDrilling = false; // we already created a memory driller for the test (AllocatorsFixture) app.Create(desc); Data::AssetManager::Instance().RegisterHandler(aznew SliceAssetHandler(app.GetSerializeContext()), AZ::AzTypeInfo::Uuid()); diff --git a/Code/Framework/AzFramework/Tests/FileTagTests.cpp b/Code/Framework/AzFramework/Tests/FileTagTests.cpp index 2b09a5638c..5005ab6ef9 100644 --- a/Code/Framework/AzFramework/Tests/FileTagTests.cpp +++ b/Code/Framework/AzFramework/Tests/FileTagTests.cpp @@ -83,7 +83,6 @@ namespace UnitTest m_data = AZStd::make_unique(); using namespace AzFramework::FileTag; AZ::ComponentApplication::Descriptor desc; - desc.m_enableDrilling = false; m_data->m_application.Start(desc); const char* testAssetRoot = m_tempDirectory.GetDirectory(); diff --git a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.h b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.h index 2a63a5f158..524df3e436 100644 --- a/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.h +++ b/Code/Framework/AzFramework/Tests/Platform/Common/Xcb/XcbBaseTestFixture.h @@ -10,6 +10,7 @@ #include #include +#include #include "MockXcbInterface.h" @@ -17,7 +18,7 @@ namespace AzFramework { // Sets up mock behavior for the xcb library, providing an xcb_connection_t that is returned from a call to xcb_connect class XcbBaseTestFixture - : public testing::Test + : public ::UnitTest::ScopedAllocatorSetupFixture { public: void SetUp() override; diff --git a/Code/Framework/AzFramework/Tests/Scene.cpp b/Code/Framework/AzFramework/Tests/Scene.cpp index 31df6e6774..a7325cc810 100644 --- a/Code/Framework/AzFramework/Tests/Scene.cpp +++ b/Code/Framework/AzFramework/Tests/Scene.cpp @@ -113,7 +113,6 @@ namespace SceneUnitTest m_app.RegisterComponentDescriptor(AZ::StreamerComponent::CreateDescriptor()); AZ::ComponentApplication::Descriptor desc; - desc.m_enableDrilling = false; // the unit test framework already adds a driller m_systemEntity = m_app.Create(desc); m_systemEntity->Init(); diff --git a/Code/Framework/AzTest/AzTest/GemTestEnvironment.cpp b/Code/Framework/AzTest/AzTest/GemTestEnvironment.cpp index de7f8f17c2..e862cdfa94 100644 --- a/Code/Framework/AzTest/AzTest/GemTestEnvironment.cpp +++ b/Code/Framework/AzTest/AzTest/GemTestEnvironment.cpp @@ -91,7 +91,6 @@ namespace AZ m_application = CreateApplicationInstance(); AZ::ComponentApplication::Descriptor appDesc; appDesc.m_useExistingAllocator = true; - appDesc.m_enableDrilling = false; // Set up gems for loading. for (const AZStd::string& dynamicModulePath : m_parameters->m_dynamicModulePaths) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.cpp index ac8e034faf..6647f48c31 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.cpp @@ -409,9 +409,6 @@ namespace AzToolsFramework return false; } - // Surface any errors during the renames - ScopedIOEventBusHandler renameHandler; - // Rename all the temp files to the actual bundle names for (int idx = 0; idx < bundlePathDeltaCatalogPair.size(); ++idx) { @@ -759,20 +756,5 @@ namespace AzToolsFramework } return true; } - - ScopedIOEventBusHandler::ScopedIOEventBusHandler() - { - BusConnect(); - } - - ScopedIOEventBusHandler::~ScopedIOEventBusHandler() - { - BusDisconnect(); - } - - void ScopedIOEventBusHandler::OnError([[maybe_unused]] const AZ::IO::SystemFile* file, [[maybe_unused]] const char* fileName, [[maybe_unused]] int errorCode) - { - AZ_Error("AssetBundleComponent", false, "FileIO Error for file %s (errorCode %d)", file && file->Name() ? file->Name() : fileName, errorCode); - } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.h index a2f7729e4e..8d2b0f4263 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBundle/AssetBundleComponent.h @@ -8,7 +8,6 @@ #pragma once #include -#include #include namespace AZ @@ -92,14 +91,4 @@ namespace AzToolsFramework //! We only create the delta catalog once we are sure about what all the files that will go in it. bool AddCatalogAndFilesToBundle(const AZStd::vector& deltaCatalogEntries, const AZStd::vector& fileEntries, const AZStd::string& bundleFilePath, const char* assetAlias, const AzFramework::PlatformId& platformId); }; - - class ScopedIOEventBusHandler : - public AZ::IO::FileIOEventBus::Handler - { - public: - ScopedIOEventBusHandler(); - ~ScopedIOEventBusHandler(); - - void OnError(const AZ::IO::SystemFile* file, const char* fileName, int errorCode) override; - }; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Core/EditorFrameworkApplication.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Core/EditorFrameworkApplication.cpp index 95ea5397e7..59f4b76065 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Core/EditorFrameworkApplication.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Core/EditorFrameworkApplication.cpp @@ -36,8 +36,6 @@ #include #include -#include - #ifdef AZ_PLATFORM_WINDOWS #include "shlobj.h" #endif diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/CustomMenus/CustomMenusAPI.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/CustomMenus/CustomMenusAPI.h index 3a6c337b4e..826128354d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/CustomMenus/CustomMenusAPI.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/CustomMenus/CustomMenusAPI.h @@ -35,12 +35,6 @@ namespace LegacyFramework static const AZ::Crc32 Edit; static const AZ::Crc32 Build; }; - struct Driller - { - static const AZ::Crc32 Application; - static const AZ::Crc32 DrillerMenu; - static const AZ::Crc32 Channels; - }; struct LUAEditor { static const AZ::Crc32 Application; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/CustomMenus/CustomMenusComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/CustomMenus/CustomMenusComponent.cpp index f294850214..c287874b9c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/CustomMenus/CustomMenusComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/CustomMenus/CustomMenusComponent.cpp @@ -24,10 +24,6 @@ namespace LegacyFramework const AZ::Crc32 WorldEditor::Edit = AZ_CRC("World Editor - Edit", 0x46a2bd02); const AZ::Crc32 WorldEditor::Build = AZ_CRC("World Editor - Build", 0xae0bfdee); - const AZ::Crc32 Driller::Application = AZ_CRC_CE("Driller"); - const AZ::Crc32 Driller::DrillerMenu = AZ_CRC("Driller - File", 0x5a98bdd8); - const AZ::Crc32 Driller::Channels = AZ_CRC("Driller - Debug", 0xf9cc0aae); - const AZ::Crc32 LUAEditor::Application = AZ_CRC_CE("LUAEditor"); const AZ::Crc32 LUAEditor::File = AZ_CRC("LUAEditor - File", 0xcf589de3); const AZ::Crc32 LUAEditor::Edit = AZ_CRC("LUAEditor - Edit", 0xc2f275e9); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/active_color_swatch.png b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/active_color_swatch.png deleted file mode 100644 index 352cc3ddc8..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/active_color_swatch.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:13b2e25ce3d4e2e296d28aa3c16f508a2ddfe7ddf0059dba61e8240f392aa357 -size 3253 diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/drill_down_disabled.png b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/drill_down_disabled.png deleted file mode 100644 index 9ab4e5a882..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/drill_down_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:73d7cfcfdf299bfb682a2bb4492493ad4a1a4e1c2a0b9bd2a305218fe446feae -size 781 diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/export_button_disabled.png b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/export_button_disabled.png deleted file mode 100644 index 4f15ed99ee..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/export_button_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:29f98d4b55674a38a87734be2028bb313bc85ae6360c3cb594cff466bbbf663b -size 723 diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/export_button_enabled.png b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/export_button_enabled.png deleted file mode 100644 index 9817feebeb..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/export_button_enabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:26539410861d7d40fd1efce832ccb30c65c65993dc715b30df6a2b1132590df2 -size 786 diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/inactive_color_swatch.png b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/inactive_color_swatch.png deleted file mode 100644 index ce5d8e5ef4..0000000000 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/inactive_color_swatch.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ceea1a8a0d9efc93636bc8531d91b955c05907119539448ead8c0c22ea5889a9 -size 3253 diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/sharedResources.qrc b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/sharedResources.qrc index e20a52ae0f..44759daf55 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/sharedResources.qrc +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/sharedResources.qrc @@ -80,15 +80,6 @@ bug--minus.png bug--plus.png - - active_color_swatch.png - export_button_disabled.png - export_button_enabled.png - drill_down_disabled.png - drill_down_enabled.png - inactive_color_swatch.png - settings_icon.png - style_dark.qss diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/style_dark.qss b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/style_dark.qss index 193034b781..e308875793 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/style_dark.qss +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/Resources/style_dark.qss @@ -1116,91 +1116,6 @@ QPushButton#captureButton:disabled { /*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/ -Driller--DrillerCaptureWindow > #centralwidget > #playButton { - color: white; -} - - -Driller--DrillerCaptureWindow > #centralwidget > AzToolsFramework--AZAutoSizingScrollArea#scrollArea { - background-color: rgb(100,100,100); - border: 1px solid rgb(100,100,100); -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--DrillerMainWindow QDockWidget -{ - background: rgb(56, 58, 59); -} - -Driller--DrillerMainWindow QDockWidget::title -{ - background: rgb(56, 58, 59); -} - -Driller--DrillerMainWindow QDockWidget .QWidget -{ - background: rgb(56, 58, 59); - border: 0px solid red; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--ChannelControl > QFrame { - background-color: rgb(100, 100, 100); -} - -Driller--ChannelControl > #infoArea > QLabel { - color: #999999; - font-size: 12px; - font-family: "open sans"; - font-weight:600; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--ChannelProfilerWidget #profilerName { - color: #cccccc; - font-size: 13px; - font-family: "open sans"; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--AnnotationHeaderView { - background-color: rgb(80,80,80); -} - -Driller--AnnotationHeaderView > #frame { - background-color: rgb(80,80,80); -} - -Driller--AnnotationHeaderView > #frame > #annotationBackground { - background-color: rgb(80,80,80); -} - -Driller--AnnotationHeaderView > #frame > #annotationBackground > #configureAnnotations { - color: white; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--CollapsiblePanel > QGroupBox { - background-color: rgb(56, 58, 59); - margin-top: 0px; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - AzToolsFramework--TargetSelectorButton#targetButton { color: white; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/UIFramework.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/UIFramework.cpp index 26234f47e2..3eb794d892 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/UIFramework.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/LegacyFramework/UIFramework.cpp @@ -540,7 +540,6 @@ namespace AzToolsFramework //"Application" // + Open Lua Editor // + Open World Editor - // + Open Driller // + Open Model Viewer // + Preferences... // ------------------------ diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Logging/StyledTracePrintFLogPanel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Logging/StyledTracePrintFLogPanel.cpp index 4f0fa3aa7e..8abd85bc63 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Logging/StyledTracePrintFLogPanel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Logging/StyledTracePrintFLogPanel.cpp @@ -107,7 +107,7 @@ namespace AzToolsFramework void StyledTracePrintFLogTab::LogTraceMessage(Logging::LogLine::LogType type, const char* window, const char* message, bool alwaysShowMessage) { - // note: This is responding to a trace driller bus message + // note: This is responding to a TraceMessageBus message // as such, the mutex is already locked but we could be called from any thread at all, so we buffer the lines. // is it for this window? diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Logging/TracePrintFLogPanel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Logging/TracePrintFLogPanel.cpp index aa37137c82..6d299a4aa1 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Logging/TracePrintFLogPanel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Logging/TracePrintFLogPanel.cpp @@ -145,7 +145,7 @@ namespace AzToolsFramework void AZTracePrintFLogTab::LogTraceMessage(Logging::LogLine::LogType type, const char* window, const char* message, void* userData) { - // note: This is responding to a trace driller bus message + // note: This is responding to a TraceMessageBus message // as such, the mutex is already locked but we could be called from any thread at all, so we buffer the lines. // is it for this window? diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/InvalidClicks.h b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/InvalidClicks.h index fe54b5379b..9f89b92948 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/InvalidClicks.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/ViewportSelection/InvalidClicks.h @@ -9,6 +9,7 @@ #pragma once #include +#include #include namespace AzFramework diff --git a/Code/Framework/AzToolsFramework/Tests/ComponentAddRemove.cpp b/Code/Framework/AzToolsFramework/Tests/ComponentAddRemove.cpp index 06353b17c5..730e7a7309 100644 --- a/Code/Framework/AzToolsFramework/Tests/ComponentAddRemove.cpp +++ b/Code/Framework/AzToolsFramework/Tests/ComponentAddRemove.cpp @@ -578,7 +578,6 @@ namespace UnitTest AZ::SettingsRegistryMergeUtils::MergeSettingsToRegistry_AddRuntimeFilePaths(*registry); AzFramework::Application::Descriptor descriptor; - descriptor.m_enableDrilling = false; m_app.Start(descriptor); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Framework/AzToolsFramework/Tests/EntityOwnershipService/EntityOwnershipServiceTestFixture.cpp b/Code/Framework/AzToolsFramework/Tests/EntityOwnershipService/EntityOwnershipServiceTestFixture.cpp index 646576a8c9..9cfb918758 100644 --- a/Code/Framework/AzToolsFramework/Tests/EntityOwnershipService/EntityOwnershipServiceTestFixture.cpp +++ b/Code/Framework/AzToolsFramework/Tests/EntityOwnershipService/EntityOwnershipServiceTestFixture.cpp @@ -19,7 +19,6 @@ namespace UnitTest AllocatorsTestFixture::SetUp(); AZ::ComponentApplication::Descriptor componentApplicationDescriptor; componentApplicationDescriptor.m_useExistingAllocator = true; - componentApplicationDescriptor.m_enableDrilling = false; // we already created a memory driller for the test(AllocatorsTestFixture) m_app = AZStd::make_unique(); m_app->Start(componentApplicationDescriptor); diff --git a/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h b/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h index 1bf51045c0..b100e78f6c 100644 --- a/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h +++ b/Code/Framework/AzToolsFramework/Tests/EntityTestbed.h @@ -163,7 +163,6 @@ namespace UnitTest void SetupComponentApplication() { AZ::ComponentApplication::Descriptor desc; - desc.m_enableDrilling = true; desc.m_allocationRecords = true; desc.m_recordingMode = AZ::Debug::AllocationRecords::RECORD_FULL; desc.m_stackRecordLevels = 10; diff --git a/Code/Framework/AzToolsFramework/Tests/Script/ScriptComponentTests.cpp b/Code/Framework/AzToolsFramework/Tests/Script/ScriptComponentTests.cpp index 93d108de85..f480621a40 100644 --- a/Code/Framework/AzToolsFramework/Tests/Script/ScriptComponentTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/Script/ScriptComponentTests.cpp @@ -31,7 +31,7 @@ namespace UnitTest int myReloadValue = 0; class ScriptComponentTest - : public testing::Test + : public UnitTest::ScopedAllocatorSetupFixture { public: AZ_TYPE_INFO(ScriptComponentTest, "{85CDBD49-70FF-416A-8154-B5525EDD30D4}"); diff --git a/Code/Framework/AzToolsFramework/Tests/SliceUpgradeTests.cpp b/Code/Framework/AzToolsFramework/Tests/SliceUpgradeTests.cpp index d0f97e22f3..7a578a2bf3 100644 --- a/Code/Framework/AzToolsFramework/Tests/SliceUpgradeTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/SliceUpgradeTests.cpp @@ -16,6 +16,7 @@ AZ_PUSH_DISABLE_WARNING(,"-Wdelete-non-virtual-dtor") #include #include #include +#include #include #include #include diff --git a/Code/Framework/AzToolsFramework/Tests/TransformComponent.cpp b/Code/Framework/AzToolsFramework/Tests/TransformComponent.cpp index 3849ed23c9..71ce9e3b5f 100644 --- a/Code/Framework/AzToolsFramework/Tests/TransformComponent.cpp +++ b/Code/Framework/AzToolsFramework/Tests/TransformComponent.cpp @@ -46,7 +46,6 @@ namespace UnitTest AllocatorsFixture::SetUp(); ComponentApplication::Descriptor desc; desc.m_useExistingAllocator = true; - desc.m_enableDrilling = false; // we already created a memory driller for the test (AllocatorsFixture) m_app.Start(desc); diff --git a/Code/Framework/AzToolsFramework/Tests/UI/EntityPropertyEditorTests.cpp b/Code/Framework/AzToolsFramework/Tests/UI/EntityPropertyEditorTests.cpp index a3c6666a40..bf3e6e9787 100644 --- a/Code/Framework/AzToolsFramework/Tests/UI/EntityPropertyEditorTests.cpp +++ b/Code/Framework/AzToolsFramework/Tests/UI/EntityPropertyEditorTests.cpp @@ -53,7 +53,6 @@ namespace UnitTest ToolsApplication::Descriptor desc; desc.m_useExistingAllocator = true; - desc.m_enableDrilling = false; ToolsApplication::StartupParameters startupParams; startupParams.m_allocator = &AZ::AllocatorInstance::Get(); diff --git a/Code/Framework/GridMate/GridMate/Carrier/Carrier.cpp b/Code/Framework/GridMate/GridMate/Carrier/Carrier.cpp index 2922cc2891..0fcb2e6ba3 100644 --- a/Code/Framework/GridMate/GridMate/Carrier/Carrier.cpp +++ b/Code/Framework/GridMate/GridMate/Carrier/Carrier.cpp @@ -3820,10 +3820,8 @@ CarrierImpl::DisconnectRequest(ConnectionID id, CarrierDisconnectReason reason) case Carrier::CST_CONNECTED: { conn->m_state = Carrier::CST_DISCONNECTING; - EBUS_EVENT(Debug::CarrierDrillerBus, OnConnectionStateChanged, this, conn, conn->m_state); m_handshake->OnDisconnect(conn); EBUS_EVENT_ID(m_gridMate, CarrierEventBus, OnDisconnect, this, id, reason); - EBUS_EVENT(Debug::CarrierDrillerBus, OnDisconnect, this, id, reason); ThreadMessage* ctm = aznew ThreadMessage(CTM_DISCONNECT); ctm->m_connection = conn; @@ -3836,10 +3834,8 @@ CarrierImpl::DisconnectRequest(ConnectionID id, CarrierDisconnectReason reason) case Carrier::CST_CONNECTING: { conn->m_state = Carrier::CST_DISCONNECTING; - EBUS_EVENT(Debug::CarrierDrillerBus, OnConnectionStateChanged, this, id, conn->m_state); m_handshake->OnDisconnect(conn); EBUS_EVENT_ID(m_gridMate, CarrierEventBus, OnFailedToConnect, this, id, reason); - EBUS_EVENT(Debug::CarrierDrillerBus, OnFailedToConnect, this, id, reason); ThreadMessage* ctm = aznew ThreadMessage(CTM_DISCONNECT); ctm->m_connection = conn; @@ -3873,13 +3869,11 @@ CarrierImpl::DeleteConnection(Connection* conn, CarrierDisconnectReason reason) { m_handshake->OnDisconnect(conn); EBUS_EVENT_ID(m_gridMate, CarrierEventBus, OnDisconnect, this, conn, reason); - EBUS_EVENT(Debug::CarrierDrillerBus, OnDisconnect, this, conn, reason); } break; case Carrier::CST_CONNECTING: { m_handshake->OnDisconnect(conn); EBUS_EVENT_ID(m_gridMate, CarrierEventBus, OnFailedToConnect, this, conn, reason); - EBUS_EVENT(Debug::CarrierDrillerBus, OnFailedToConnect, this, conn, reason); } break; case Carrier::CST_DISCONNECTED: case Carrier::CST_DISCONNECTING: @@ -4271,7 +4265,6 @@ CarrierImpl::ProcessMainThreadMessages() m_connections.insert(conn); EBUS_EVENT_ID(m_gridMate, CarrierEventBus, OnIncomingConnection, this, conn); - EBUS_EVENT(Debug::CarrierDrillerBus, OnIncomingConnection, this, conn); ThreadMessage* ctm = aznew ThreadMessage(CTM_CONNECT); ctm->m_connection = conn; @@ -4306,7 +4299,6 @@ CarrierImpl::ProcessMainThreadMessages() ctm->m_threadConnection = threadConn; ctm->m_disconnectReason = msg->m_disconnectReason; m_thread->PushCarrierThreadMessage(ctm); - EBUS_EVENT(Debug::CarrierDrillerBus, OnConnectionStateChanged, this, msg->m_connection, msg->m_connection->m_state); } } break; case MTM_DELETE_CONNECTION: @@ -4333,7 +4325,6 @@ CarrierImpl::ProcessMainThreadMessages() if (msg->m_errorCode == CarrierErrorCode::EC_DRIVER) { EBUS_EVENT_ID(m_gridMate, CarrierEventBus, OnDriverError, this, msg->m_connection, msg->m_error.m_driverError); - EBUS_EVENT(Debug::CarrierDrillerBus, OnDriverError, this, msg->m_connection, msg->m_error.m_driverError); if (msg->m_connection) { @@ -4344,7 +4335,6 @@ CarrierImpl::ProcessMainThreadMessages() else { EBUS_EVENT_ID(m_gridMate, CarrierEventBus, OnSecurityError, this, msg->m_connection, msg->m_error.m_securityError); - EBUS_EVENT(Debug::CarrierDrillerBus, OnSecurityError, this, msg->m_connection, msg->m_error.m_securityError); } } break; case MTM_RATE_UPDATE: @@ -4443,13 +4433,11 @@ CarrierImpl::ProcessSystemMessages() if (requestError == HandshakeErrorCode::OK) { conn->m_state = Carrier::CST_CONNECTED; - EBUS_EVENT(Debug::CarrierDrillerBus, OnConnectionStateChanged, this, conn, conn->m_state); SendSyncTime(); // send time first if we have the clock. SendSystemMessage(SM_CONNECT_ACK, wb, conn, SEND_RELIABLE); EBUS_EVENT_ID(m_gridMate, CarrierEventBus, OnConnectionEstablished, this, conn); - EBUS_EVENT(Debug::CarrierDrillerBus, OnConnectionEstablished, this, conn); ThreadMessage* ctm = aznew ThreadMessage(CTM_HANDSHAKE_COMPLETE); ctm->m_connection = conn; @@ -4494,9 +4482,7 @@ CarrierImpl::ProcessSystemMessages() m_pendingHandshakes.erase(PendingHandshake(conn)); // Connected -> no need to retry handshake anymore conn->m_state = Carrier::CST_CONNECTED; - EBUS_EVENT(Debug::CarrierDrillerBus, OnConnectionStateChanged, this, conn, conn->m_state); EBUS_EVENT_ID(m_gridMate, CarrierEventBus, OnConnectionEstablished, this, conn); - EBUS_EVENT(Debug::CarrierDrillerBus, OnConnectionEstablished, this, conn); ThreadMessage* ctm = aznew ThreadMessage(CTM_HANDSHAKE_COMPLETE); ctm->m_connection = conn; @@ -4540,7 +4526,6 @@ CarrierImpl::ProcessSystemMessages() ctm->m_threadConnection = threadConn; ctm->m_disconnectReason = reason; m_thread->PushCarrierThreadMessage(ctm); - EBUS_EVENT(Debug::CarrierDrillerBus, OnConnectionStateChanged, this, conn, conn->m_state); ////////////////////////////////////////////////////////////////////////// } break; case SM_CLOCK_SYNC: @@ -4850,7 +4835,6 @@ CarrierImpl::DebugDeleteConnection(ConnectionID id) ctm->m_threadConnection = threadConn; ctm->m_disconnectReason = reason; m_thread->PushCarrierThreadMessage(ctm); - EBUS_EVENT(Debug::CarrierDrillerBus, OnConnectionStateChanged, this, conn, conn->m_state); ////////////////////////////////////////////////////////////////////////// } diff --git a/Code/Framework/GridMate/GridMate/Carrier/Carrier.h b/Code/Framework/GridMate/GridMate/Carrier/Carrier.h index 94c31ed6d2..9255bb4016 100644 --- a/Code/Framework/GridMate/GridMate/Carrier/Carrier.h +++ b/Code/Framework/GridMate/GridMate/Carrier/Carrier.h @@ -14,8 +14,6 @@ #include #include -#include -#include #include "AzCore/std/smart_ptr/weak_ptr.h" namespace GridMate @@ -485,60 +483,6 @@ namespace GridMate }; typedef AZ::EBus CarrierEventBus; - - namespace Debug - { - class CarrierDrillerEvents - : public CarrierEventsBase - , public AZ::Debug::DrillerEBusTraits - { - public: - virtual void OnIncomingConnection(Carrier* carrier, ConnectionID id) = 0; - - virtual void OnFailedToConnect(Carrier* carrier, ConnectionID id, CarrierDisconnectReason reason) = 0; - - virtual void OnConnectionEstablished(Carrier* carrier, ConnectionID id) = 0; - - virtual void OnDisconnect(Carrier* carrier, ConnectionID id, CarrierDisconnectReason reason) = 0; - - /// Report all carrier and driver errors! id == InvalidConnectionID if the error is not connection related! - virtual void OnDriverError(Carrier* carrier, ConnectionID id, const DriverError& error) = 0; - virtual void OnSecurityError(Carrier* carrier, ConnectionID id, const SecurityError& error) = 0; - - ////////////////////////////////////////////////////////////////////////// - // Executed from NETWORK thread - - // Driver - /// SendTo - /// ReceiveFrom - /// Errors - - // Traffic control - - /// Called every second when you update last second statistics - virtual void OnUpdateStatistics(const AZStd::string& address, const TrafficControl::Statistics& lastSecond, const TrafficControl::Statistics& lifeTime, const TrafficControl::Statistics& effectiveLastSecond, const TrafficControl::Statistics& effectiveLifeTime) = 0; - - // Simulator - /// Enable/Disable - /// Change Simulator parameters - - // Carrier - virtual void OnConnectionStateChanged(Carrier* carrier, ConnectionID id, Carrier::ConnectionStates newState) = 0; - - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // Executed from GAME/MAIN thread - - // Handshake low level (we drill the handshake on session level too) - - // Carrier - in addition to carrier events - - ////////////////////////////////////////////////////////////////////////// - }; - - typedef AZ::EBus CarrierDrillerBus; - } } #endif // GM_CARRIER_H diff --git a/Code/Framework/GridMate/GridMate/Carrier/DefaultTrafficControl.cpp b/Code/Framework/GridMate/GridMate/Carrier/DefaultTrafficControl.cpp index 8743e50e83..107dfe839b 100644 --- a/Code/Framework/GridMate/GridMate/Carrier/DefaultTrafficControl.cpp +++ b/Code/Framework/GridMate/GridMate/Carrier/DefaultTrafficControl.cpp @@ -591,9 +591,6 @@ DefaultTrafficControl::Update() //AZ_TracePrintf("GridMate","Traffic control: Connection %s LifeTime(rtt %.2f packetLoss %.2f) LastSecond(rtt %.2f packetLoss %.2f)\n", // cd.m_address.c_str(),cd.m_sdLifetime.m_rtt,cd.m_sdLifetime.m_packetLoss,cd.m_sdLastSecond.m_rtt,cd.m_sdLastSecond.m_packetLoss); - // send new statistics event - EBUS_EVENT(Debug::CarrierDrillerBus, OnUpdateStatistics, cd.m_address, cd.m_sdLastSecond, cd.m_sdLifetime, cd.m_sdEffectiveLastSecond, cd.m_sdEffectiveLifetime); - cd.m_sdCurrentSecond.Reset(); cd.m_sdCurrentSecond.m_rtt = cd.m_sdLastSecond.m_rtt; //cd.sdCurrentSecond.flow = 1.0f; // Good diff --git a/Code/Framework/GridMate/GridMate/Drillers/CarrierDriller.cpp b/Code/Framework/GridMate/GridMate/Drillers/CarrierDriller.cpp deleted file mode 100644 index 38f029f0f5..0000000000 --- a/Code/Framework/GridMate/GridMate/Drillers/CarrierDriller.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include - -using namespace AZ::Debug; - -namespace GridMate -{ - namespace Debug - { - //========================================================================= - // CarrierDriller - // [4/14/2011] - //========================================================================= - CarrierDriller::CarrierDriller() - { - m_drillerTag = AZ_CRC("CarrierDriller", 0x72a37d06); - } - - //========================================================================= - // Start - // [4/14/2011] - //========================================================================= - void CarrierDriller::Start(const Param* params, int numParams) - { - (void)params; - (void)numParams; - CarrierDrillerBus::Handler::BusConnect(); - - /* get carriers and output all the data - m_output->BeginTag(m_drillerTag); - m_output->Write(AZ_CRC("CarrierId"),carrier); - m_output->BeginTag(AZ_CRC("StartDrill")); - for(unsigned int iConn = 0; iConn < carrier->GetNumConnections(); ++iConn ) - { - ConnectionID connId = carrier->GetConnectionId(iConn); - m_output->BeginTag(AZ_CRC("Connection")); - m_output->Write(AZ_CRC("Id"),connId); - m_output->Write(AZ_CRC("Address"),carrier->ConnectionToAddress(connId)); - m_output->Write(AZ_CRC("State"),static_cast(carrier->GetConnectionState(connId))); - m_output->EndTag(AZ_CRC("Connection")); - } - m_output->EndTag(AZ_CRC("StartDrill")); - m_output->EndTag(m_drillerTag);*/ - } - - //========================================================================= - // Stop - // [4/14/2011] - //========================================================================= - void CarrierDriller::Stop() - { - CarrierDrillerBus::Handler::BusDisconnect(); - } - - //========================================================================= - // OnUpdateStatistics - // [4/14/2011] - //========================================================================= - void CarrierDriller::OnUpdateStatistics(const AZStd::string& address, const TrafficControl::Statistics& lastSecond, const TrafficControl::Statistics& lifeTime, const TrafficControl::Statistics& effectiveLastSecond, const TrafficControl::Statistics& effectiveLifeTime) - { - m_output->BeginTag(m_drillerTag); - m_output->BeginTag(AZ_CRC("Statistics", 0xe2d38b22)); - m_output->Write(AZ_CRC("Address", 0x0d4e6f81), address); - m_output->BeginTag(AZ_CRC("LastSecond", 0x5e6ccbee)); - m_output->Write(AZ_CRC("DataSend", 0xae94c282), lastSecond.m_dataSend); - m_output->Write(AZ_CRC("DataReceived", 0xd92f8e4b), lastSecond.m_dataReceived); - m_output->Write(AZ_CRC("DataResend", 0xe44a3086), lastSecond.m_dataResend); - m_output->Write(AZ_CRC("DataAcked", 0xbb5e5496), lastSecond.m_dataAcked); - m_output->Write(AZ_CRC("PacketSend", 0x5b52fa79), lastSecond.m_packetSend); - m_output->Write(AZ_CRC("PacketReceived", 0xf247dd9e), lastSecond.m_packetReceived); - m_output->Write(AZ_CRC("PacketLost", 0xbc64441e), lastSecond.m_packetLost); - m_output->Write(AZ_CRC("PacketAcked", 0x91c4b93a), lastSecond.m_packetAcked); - m_output->Write(AZ_CRC("PacketLoss", 0x2200d1bd), lastSecond.m_packetLoss); - m_output->Write(AZ_CRC("rtt", 0xb40f6cfb), lastSecond.m_rtt); - //m_output->Write(AZ_CRC("flow"),lastSecond.m_flow); - m_output->EndTag(AZ_CRC("LastSecond", 0x5e6ccbee)); - m_output->BeginTag(AZ_CRC("LifeTime", 0x3de73088)); - m_output->Write(AZ_CRC("DataSend", 0xae94c282), lifeTime.m_dataSend); - m_output->Write(AZ_CRC("DataReceived", 0xd92f8e4b), lifeTime.m_dataReceived); - m_output->Write(AZ_CRC("DataResend", 0xe44a3086), lifeTime.m_dataResend); - m_output->Write(AZ_CRC("DataAcked", 0xbb5e5496), lifeTime.m_dataAcked); - m_output->Write(AZ_CRC("PacketSend", 0x5b52fa79), lifeTime.m_packetSend); - m_output->Write(AZ_CRC("PacketReceived", 0xf247dd9e), lifeTime.m_packetReceived); - m_output->Write(AZ_CRC("PacketLost", 0xbc64441e), lifeTime.m_packetLost); - m_output->Write(AZ_CRC("PacketAcked", 0x91c4b93a), lifeTime.m_packetAcked); - m_output->Write(AZ_CRC("PacketLoss", 0x2200d1bd), lifeTime.m_packetLoss); - m_output->Write(AZ_CRC("rtt", 0xb40f6cfb), lifeTime.m_rtt); - //m_output->Write(AZ_CRC("flow"),lifeTime.m_flow); - m_output->EndTag(AZ_CRC("LifeTime", 0x3de73088)); - m_output->BeginTag(AZ_CRC("EffectiveLastSecond", 0x8f84642f)); - m_output->Write(AZ_CRC("DataSend", 0xae94c282), effectiveLastSecond.m_dataSend); - m_output->Write(AZ_CRC("DataReceived", 0xd92f8e4b), effectiveLastSecond.m_dataReceived); - m_output->Write(AZ_CRC("DataResend", 0xe44a3086), effectiveLastSecond.m_dataResend); - m_output->Write(AZ_CRC("DataAcked", 0xbb5e5496), effectiveLastSecond.m_dataAcked); - m_output->Write(AZ_CRC("PacketSend", 0x5b52fa79), effectiveLastSecond.m_packetSend); - m_output->Write(AZ_CRC("PacketReceived", 0xf247dd9e), effectiveLastSecond.m_packetReceived); - m_output->Write(AZ_CRC("PacketLost", 0xbc64441e), effectiveLastSecond.m_packetLost); - m_output->Write(AZ_CRC("PacketAcked", 0x91c4b93a), effectiveLastSecond.m_packetAcked); - m_output->Write(AZ_CRC("PacketLoss", 0x2200d1bd), effectiveLastSecond.m_packetLoss); - m_output->Write(AZ_CRC("rtt", 0xb40f6cfb), effectiveLastSecond.m_rtt); - //m_output->Write(AZ_CRC("flow"),effectiveLastSecond.m_flow); - m_output->EndTag(AZ_CRC("EffectiveLastSecond", 0x8f84642f)); - m_output->BeginTag(AZ_CRC("EffectiveLifeTime", 0x4644a47a)); - m_output->Write(AZ_CRC("DataSend", 0xae94c282), effectiveLifeTime.m_dataSend); - m_output->Write(AZ_CRC("DataReceived", 0xd92f8e4b), effectiveLifeTime.m_dataReceived); - m_output->Write(AZ_CRC("DataResend", 0xe44a3086), effectiveLifeTime.m_dataResend); - m_output->Write(AZ_CRC("DataAcked", 0xbb5e5496), effectiveLifeTime.m_dataAcked); - m_output->Write(AZ_CRC("PacketSend", 0x5b52fa79), effectiveLifeTime.m_packetSend); - m_output->Write(AZ_CRC("PacketReceived", 0xf247dd9e), effectiveLifeTime.m_packetReceived); - m_output->Write(AZ_CRC("PacketLost", 0xbc64441e), effectiveLifeTime.m_packetLost); - m_output->Write(AZ_CRC("PacketAcked", 0x91c4b93a), effectiveLifeTime.m_packetAcked); - m_output->Write(AZ_CRC("PacketLoss", 0x2200d1bd), effectiveLifeTime.m_packetLoss); - m_output->Write(AZ_CRC("rtt", 0xb40f6cfb), effectiveLifeTime.m_rtt); - //m_output->Write(AZ_CRC("flow"),effectiveLifeTime.m_flow); - m_output->EndTag(AZ_CRC("EffectiveLifeTime", 0x4644a47a)); - m_output->EndTag(AZ_CRC("Statistics", 0xe2d38b22)); - m_output->EndTag(m_drillerTag); - } - //========================================================================= - // OnConnectionStateChanged - // [4/14/2011] - //========================================================================= - void CarrierDriller::OnConnectionStateChanged(Carrier* carrier, ConnectionID id, Carrier::ConnectionStates newState) - { - m_output->BeginTag(m_drillerTag); - m_output->Write(AZ_CRC("CarrierId", 0x93f4bfbe), carrier); - m_output->BeginTag(AZ_CRC("ConnectionState", 0x38a6a5da)); - m_output->Write(AZ_CRC("Id", 0xbf396750), id); - m_output->Write(AZ_CRC("State", 0xa393d2fb), static_cast(newState)); - m_output->EndTag(AZ_CRC("ConnectionState", 0x38a6a5da)); - m_output->EndTag(m_drillerTag); - } - //========================================================================= - // OnIncomingConnection - // [4/14/2011] - //========================================================================= - void CarrierDriller::OnIncomingConnection(Carrier* carrier, ConnectionID id) - { - m_output->BeginTag(m_drillerTag); - m_output->Write(AZ_CRC("CarrierId", 0x93f4bfbe), carrier); - m_output->BeginTag(AZ_CRC("IncomingConnection", 0x8c9d071a)); - m_output->Write(AZ_CRC("Id", 0xbf396750), id); - m_output->Write(AZ_CRC("Address", 0x0d4e6f81), carrier->ConnectionToAddress(id)); - m_output->EndTag(AZ_CRC("IncomingConnection", 0x8c9d071a)); - m_output->EndTag(m_drillerTag); - } - //========================================================================= - // OnFailedToConnect - // [4/14/2011] - //========================================================================= - void CarrierDriller::OnFailedToConnect(Carrier* carrier, ConnectionID id, CarrierDisconnectReason reason) - { - m_output->BeginTag(m_drillerTag); - m_output->Write(AZ_CRC("CarrierId", 0x93f4bfbe), carrier); - m_output->BeginTag(AZ_CRC("FailedToConnect", 0xb6539549)); - m_output->Write(AZ_CRC("Id", 0xbf396750), id); - m_output->Write(AZ_CRC("Reason", 0x3bb8880c), ReasonToString(reason)); - m_output->EndTag(AZ_CRC("FailedToConnect", 0xb6539549)); - m_output->EndTag(m_drillerTag); - } - //========================================================================= - // OnConnectionEstablished - // [4/14/2011] - //========================================================================= - void CarrierDriller::OnConnectionEstablished(Carrier* carrier, ConnectionID id) - { - m_output->BeginTag(m_drillerTag); - m_output->Write(AZ_CRC("CarrierId", 0x93f4bfbe), carrier); - m_output->BeginTag(AZ_CRC("ConnectionEstablished", 0xcde31aa7)); - m_output->Write(AZ_CRC("Id", 0xbf396750), id); - m_output->EndTag(AZ_CRC("ConnectionEstablished", 0xcde31aa7)); - m_output->EndTag(m_drillerTag); - } - //========================================================================= - // OnDisconnect - // [4/14/2011] - //========================================================================= - void CarrierDriller::OnDisconnect(Carrier* carrier, ConnectionID id, CarrierDisconnectReason reason) - { - m_output->BeginTag(m_drillerTag); - m_output->Write(AZ_CRC("CarrierId", 0x93f4bfbe), carrier); - m_output->BeginTag(AZ_CRC("Disconnect", 0x003a4b91)); - m_output->Write(AZ_CRC("Id", 0xbf396750), id); - m_output->Write(AZ_CRC("Reason", 0x3bb8880c), ReasonToString(reason)); - m_output->EndTag(AZ_CRC("Disconnect", 0x003a4b91)); - m_output->EndTag(m_drillerTag); - } - //========================================================================= - // OnDriverError - // [12/14/2016] - //========================================================================= - void CarrierDriller::OnDriverError(Carrier* carrier, ConnectionID id, const DriverError& error) - { - m_output->BeginTag(m_drillerTag); - m_output->Write(AZ_CRC("CarrierId", 0x93f4bfbe), carrier); - m_output->BeginTag(AZ_CRC("DriverError", 0xe7522aff)); - m_output->Write(AZ_CRC("Id", 0xbf396750), id); - m_output->Write(AZ_CRC("ErrorCode", 0x499e660e), static_cast(error.m_errorCode)); - m_output->EndTag(AZ_CRC("DriverError", 0xe7522aff)); - m_output->EndTag(m_drillerTag); - } - //========================================================================= - // OnSecurityError - //========================================================================= - void CarrierDriller::OnSecurityError(Carrier* carrier, ConnectionID id, const SecurityError& error) - { - m_output->BeginTag(m_drillerTag); - m_output->Write(AZ_CRC("CarrierId", 0x93f4bfbe), carrier); - m_output->BeginTag(AZ_CRC("SecurityError", 0xdfe940ab)); - m_output->Write(AZ_CRC("Id", 0xbf396750), id); - m_output->Write(AZ_CRC("ErrorCode", 0x499e660e), static_cast(error.m_errorCode)); - m_output->EndTag(AZ_CRC("SecurityError", 0xdfe940ab)); - m_output->EndTag(m_drillerTag); - } - } // namespace Debug -} // namespace GridMate diff --git a/Code/Framework/GridMate/GridMate/Drillers/CarrierDriller.h b/Code/Framework/GridMate/GridMate/Drillers/CarrierDriller.h deleted file mode 100644 index b12441e6fa..0000000000 --- a/Code/Framework/GridMate/GridMate/Drillers/CarrierDriller.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#ifndef GM_CARRIER_DRILLER_H -#define GM_CARRIER_DRILLER_H - -#include -#include -#include - -namespace GridMate -{ - namespace Debug - { - /** - * Carrier driller - * \note Be careful which buses you attach. The drillers work in Multi threaded environment and expect that - * a driller mutex (DrillerManager::DrillerManager) will be automatically locked on every write. - * Otherwise in output stream corruption will happen (even is the stream is thread safe). - */ - class CarrierDriller - : public AZ::Debug::Driller - , public CarrierDrillerBus::Handler - { - int m_drillerTag; - public: - AZ_CLASS_ALLOCATOR(CarrierDriller, AZ::OSAllocator, 0); - CarrierDriller(); - - ////////////////////////////////////////////////////////////////////////// - // Driller - const char* GroupName() const override { return "GridMate"; } - const char* GetName() const override { return "CarrierDriller"; } - const char* GetDescription() const override { return "Drills Carrier/transport layer,traffic control, driver,etc."; } - void Start(const Param* params = nullptr, int numParams = 0) override; - void Stop() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // Carrier Driller Bus - void OnUpdateStatistics(const AZStd::string& address, const TrafficControl::Statistics& lastSecond, const TrafficControl::Statistics& lifeTime, const TrafficControl::Statistics& effectiveLastSecond, const TrafficControl::Statistics& effectiveLifeTime) override; - void OnConnectionStateChanged(Carrier* carrier, ConnectionID id, Carrier::ConnectionStates newState) override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // Carrier Event Bus - void OnIncomingConnection(Carrier* carrier, ConnectionID id) override; - void OnFailedToConnect(Carrier* carrier, ConnectionID id, CarrierDisconnectReason reason) override; - void OnConnectionEstablished(Carrier* carrier, ConnectionID id) override; - void OnDisconnect(Carrier* carrier, ConnectionID id, CarrierDisconnectReason reason) override; - void OnDriverError(Carrier* carrier, ConnectionID id, const DriverError& error) override; - void OnSecurityError(Carrier* carrier, ConnectionID id, const SecurityError& error) override; - ////////////////////////////////////////////////////////////////////////// - }; - } -} - -#endif // GM_CARRIER_DRILLER_H diff --git a/Code/Framework/GridMate/GridMate/Drillers/ReplicaDriller.cpp b/Code/Framework/GridMate/GridMate/Drillers/ReplicaDriller.cpp deleted file mode 100644 index cb48578255..0000000000 --- a/Code/Framework/GridMate/GridMate/Drillers/ReplicaDriller.cpp +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#include -#include -#include -#include - -using namespace AZ::Debug; - -namespace GridMate -{ - namespace Debug - { - const AZ::Crc32 ReplicaDriller::Tags::REPLICA_DRILLER = AZ_CRC("ReplicaDriller", 0xd832f49a); - - // Event Types - const AZ::Crc32 ReplicaDriller::Tags::CHUNK_SEND_DATASET = AZ_CRC("ChunkSendDataSet", 0x085ea99b); - const AZ::Crc32 ReplicaDriller::Tags::CHUNK_RECEIVE_DATASET = AZ_CRC("ChunkReceiveDataSet", 0x8d4536db); - const AZ::Crc32 ReplicaDriller::Tags::CHUNK_SEND_RPC = AZ_CRC("ChunkSendRPC", 0x7c40afe0); - const AZ::Crc32 ReplicaDriller::Tags::CHUNK_RECEIVE_RPC = AZ_CRC("ChunkReceiveRPC", 0xb49b302d); - - // Data Fields - const AZ::Crc32 ReplicaDriller::Tags::REPLICA_NAME = AZ_CRC("ReplicaName", 0xc69b68ee); - const AZ::Crc32 ReplicaDriller::Tags::REPLICA_ID = AZ_CRC("ReplicaID", 0x394dd741); - const AZ::Crc32 ReplicaDriller::Tags::CHUNK_TYPE = AZ_CRC("TypeName", 0x115f811d); - const AZ::Crc32 ReplicaDriller::Tags::CHUNK_INDEX = AZ_CRC("ChunkIndex", 0x25ba3370); - const AZ::Crc32 ReplicaDriller::Tags::DATA_SET_NAME = AZ_CRC("DataSetName", 0xf22dbaae); - const AZ::Crc32 ReplicaDriller::Tags::DATA_SET_INDEX = AZ_CRC("DataSetIndex", 0x58d2421f); - const AZ::Crc32 ReplicaDriller::Tags::RPC_NAME = AZ_CRC("RPCName", 0x4c4cbf3a); - const AZ::Crc32 ReplicaDriller::Tags::RPC_INDEX = AZ_CRC("RPCIndex", 0xaf0e7447); - const AZ::Crc32 ReplicaDriller::Tags::SIZE = AZ_CRC("Size", 0xf7c0246a); - const AZ::Crc32 ReplicaDriller::Tags::TIME_PROCESSED_MILLISEC = AZ_CRC("Time", 0x6f949845); - - ReplicaDriller::ReplicaDriller() - { - } - - void ReplicaDriller::Start(const Param* params, int numParams) - { - (void)params; - (void)numParams; - ReplicaDrillerBus::Handler::BusConnect(); - } - - void ReplicaDriller::Stop() - { - ReplicaDrillerBus::Handler::BusDisconnect(); - } - - void ReplicaDriller::OnSendDataSet(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, DataSetBase* dataSet, PeerId from, PeerId to, const void* data, size_t len) - { - (void)from; - (void)to; - (void)data; - - const char* dataSetName = chunk->GetDescriptor()->GetDataSetName(chunk, dataSet); - size_t dataSetIndex = chunk->GetDescriptor()->GetDataSetIndex(chunk, dataSet); - - m_output->BeginTag(Tags::REPLICA_DRILLER); - m_output->BeginTag(Tags::CHUNK_SEND_DATASET); - OutputBaseReplicaChunkTags(chunk, chunkIndex, len); - m_output->Write(Tags::DATA_SET_NAME, dataSetName); - m_output->Write(Tags::DATA_SET_INDEX, dataSetIndex); - m_output->EndTag(Tags::CHUNK_SEND_DATASET); - m_output->EndTag(Tags::REPLICA_DRILLER); - } - - void ReplicaDriller::OnReceiveDataSet(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, DataSetBase* dataSet, PeerId from, PeerId to, const void* data, size_t len) - { - (void)from; - (void)to; - (void)data; - - const char* dataSetName = chunk->GetDescriptor()->GetDataSetName(chunk, dataSet); - size_t dataSetIndex = chunk->GetDescriptor()->GetDataSetIndex(chunk, dataSet); - - m_output->BeginTag(Tags::REPLICA_DRILLER); - m_output->BeginTag(Tags::CHUNK_RECEIVE_DATASET); - OutputBaseReplicaChunkTags(chunk, chunkIndex, len); - m_output->Write(Tags::DATA_SET_NAME, dataSetName); - m_output->Write(Tags::DATA_SET_INDEX, dataSetIndex); - m_output->EndTag(Tags::CHUNK_RECEIVE_DATASET); - m_output->EndTag(Tags::REPLICA_DRILLER); - } - - void ReplicaDriller::OnSendRpc(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, Internal::RpcRequest* rpc, PeerId from, PeerId to, const void* data, size_t len) - { - (void)from; - (void)to; - (void)data; - - const char* rpcName = chunk->GetDescriptor()->GetRpcName(chunk, rpc->m_rpc); - size_t rpcIndex = chunk->GetDescriptor()->GetRpcIndex(chunk, rpc->m_rpc); - - - m_output->BeginTag(Tags::REPLICA_DRILLER); - m_output->BeginTag(Tags::CHUNK_SEND_RPC); - OutputBaseReplicaChunkTags(chunk, chunkIndex, len); - m_output->Write(Tags::RPC_NAME, rpcName); - m_output->Write(Tags::RPC_INDEX, rpcIndex); - m_output->EndTag(Tags::CHUNK_SEND_RPC); - m_output->EndTag(Tags::REPLICA_DRILLER); - } - void ReplicaDriller::OnReceiveRpc(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, Internal::RpcRequest* rpc, PeerId from, PeerId to, const void* data, size_t len) - { - (void)from; - (void)to; - (void)data; - - const char* rpcName = chunk->GetDescriptor()->GetRpcName(chunk, rpc->m_rpc); - size_t rpcIndex = chunk->GetDescriptor()->GetRpcIndex(chunk, rpc->m_rpc); - - m_output->BeginTag(Tags::REPLICA_DRILLER); - m_output->BeginTag(Tags::CHUNK_RECEIVE_RPC); - OutputBaseReplicaChunkTags(chunk, chunkIndex, len); - m_output->Write(Tags::RPC_NAME, rpcName); - m_output->Write(Tags::RPC_INDEX, rpcIndex); - m_output->EndTag(Tags::CHUNK_RECEIVE_RPC); - m_output->EndTag(Tags::REPLICA_DRILLER); - } - - void ReplicaDriller::OutputBaseReplicaChunkTags(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, size_t len) - { - const char* chunkTypeName = chunk->GetDescriptor()->GetChunkName(); - const char* replicaName = chunk->GetReplica()->GetDebugName(); - - m_output->Write(Tags::REPLICA_NAME, replicaName); - m_output->Write(Tags::REPLICA_ID, chunk->GetReplicaId()); - m_output->Write(Tags::CHUNK_TYPE, chunkTypeName); - m_output->Write(Tags::CHUNK_INDEX, chunkIndex); - m_output->Write(Tags::SIZE, len); - m_output->Write(Tags::TIME_PROCESSED_MILLISEC, AZStd::chrono::milliseconds(AZStd::chrono::system_clock::now().time_since_epoch()).count()); - } - } -} diff --git a/Code/Framework/GridMate/GridMate/Drillers/ReplicaDriller.h b/Code/Framework/GridMate/GridMate/Drillers/ReplicaDriller.h deleted file mode 100644 index e2b7213926..0000000000 --- a/Code/Framework/GridMate/GridMate/Drillers/ReplicaDriller.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#ifndef GM_REPLICA_DRILLER_H -#define GM_REPLICA_DRILLER_H - -#include -#include -#include -#include - -namespace GridMate -{ - namespace Debug - { - class ReplicaDriller - : public AZ::Debug::Driller - , public GridMate::Debug::ReplicaDrillerBus::Handler - { - public: - struct Tags - { - // Driller - static const AZ::Crc32 REPLICA_DRILLER; - - // Event Types - static const AZ::Crc32 CHUNK_SEND_DATASET; - static const AZ::Crc32 CHUNK_RECEIVE_DATASET; - static const AZ::Crc32 CHUNK_SEND_RPC; - static const AZ::Crc32 CHUNK_RECEIVE_RPC; - - // Data Fields - static const AZ::Crc32 REPLICA_NAME; - static const AZ::Crc32 REPLICA_ID; - static const AZ::Crc32 CHUNK_TYPE; - static const AZ::Crc32 CHUNK_INDEX; - static const AZ::Crc32 DATA_SET_NAME; - static const AZ::Crc32 DATA_SET_INDEX; - static const AZ::Crc32 RPC_NAME; - static const AZ::Crc32 RPC_INDEX; - static const AZ::Crc32 SIZE; - static const AZ::Crc32 TIME_PROCESSED_MILLISEC; - }; - - AZ_CLASS_ALLOCATOR(ReplicaDriller, AZ::OSAllocator, 0); - ReplicaDriller(); - - ////////////////////////////////////////////////////////////////////////// - // Driller - const char* GroupName() const override { return "GridMate"; } - const char* GetName() const override { return "ReplicaDriller"; } - const char* GetDescription() const override { return "Drills replicas."; } - void Start(const Param* params = NULL, int numParams = 0) override; - void Stop() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // ReplicaDrillerEvents - void OnSendDataSet(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, DataSetBase* dataSet, PeerId from, PeerId to, const void* data, size_t len) override; - void OnReceiveDataSet(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, DataSetBase* dataSet, PeerId from, PeerId to, const void* data, size_t len) override; - - void OnSendRpc(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, Internal::RpcRequest* rpc, PeerId from, PeerId to, const void* data, size_t len) override; - void OnReceiveRpc(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, Internal::RpcRequest* rpc, PeerId from, PeerId to, const void* data, size_t len) override; - ////////////////////////////////////////////////////////////////////////// - - private: - - void OutputBaseReplicaChunkTags(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, size_t len); - }; - } -} - -#endif diff --git a/Code/Framework/GridMate/GridMate/Drillers/SessionDriller.cpp b/Code/Framework/GridMate/GridMate/Drillers/SessionDriller.cpp deleted file mode 100644 index a7130218f8..0000000000 --- a/Code/Framework/GridMate/GridMate/Drillers/SessionDriller.cpp +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include - -using namespace AZ::Debug; - -namespace GridMate -{ - namespace Debug - { - //========================================================================= - // SessionDriller - // [4/14/2011] - //========================================================================= - SessionDriller::SessionDriller() - { - m_drillerTag = AZ_CRC("SessionDriller", 0x30b916a9); - } - - //========================================================================= - // Start - // [4/14/2011] - //========================================================================= - void SessionDriller::Start(const Param* params, int numParams) - { - (void)params; - (void)numParams; - // Collect current session information ? - SessionDrillerBus::Handler::BusConnect(); - - // - //m_output->BeginTag(m_drillerTag); - //m_output->BeginTag(AZ_CRC("StartDrill")); - //if(sessionMgr->m_activeSession) - //{ - // GridSession* gs = sessionMgr->m_activeSession; - // // store the current session state - // m_output->BeginTag(AZ_CRC("Session")); - // m_output->Write(AZ_CRC("SessionId"),gs->GetId()); - // m_output->Write(AZ_CRC("Carrier"),gs->GetCarrier()); - // m_output->Write(AZ_CRC("ReplicaMgr"),gs->GetReplicaMgr()); - // m_output->Write(AZ_CRC("Topology"),(char)gs->GetTopology()); - // m_output->Write(AZ_CRC("Time"),gs->GetTime()); - // m_output->Write(AZ_CRC("State"),(char)gs->m_sm.GetCurrentState()); - // m_output->Write(AZ_CRC("IsHost"),gs->IsHost()); - // // There are endless params add as needed - - // for(unsigned int i = 0; i < gs->GetNumberOfMembers(); ++i ) - // { - // GridMember* gm = gs->GetMember(i); - // m_output->BeginTag(AZ_CRC("Member")); - // m_output->Write(AZ_CRC("Id"),gm->GetId().ToString()); - // m_output->Write(AZ_CRC("Name"),gm->GetName()); - // m_output->Write(AZ_CRC("ConnectionId"),gm->GetConnectionId()); - // m_output->Write(AZ_CRC("NAT"),(char)gm->GetNatType()); - // m_output->Write(AZ_CRC("CommFilter"),gm->GetCommFilter()); - // m_output->Write(AZ_CRC("IsHost"),gm->IsHost()); - // m_output->Write(AZ_CRC("IsLocal"),gm->IsLocal()); - // m_output->Write(AZ_CRC("IsInvited"),gm->IsInvited()); - // m_output->EndTag(AZ_CRC("Member")); - // } - - // m_output->EndTag(AZ_CRC("Session")); - //} - //else if(sessionMgr->m_activeSearch) - //{ - // GridSearch* gs = sessionMgr->m_activeSearch; - // m_output->BeginTag(AZ_CRC("GridSearch")); - // m_output->Write(AZ_CRC("SearchId"),gs); - // m_output->Write(AZ_CRC("IsDone"),gs->IsDone()); - // m_output->Write(AZ_CRC("NumResults"),gs->GetNumResults()); - // // add platform specific drill or just generic reporting - // m_output->EndTag(AZ_CRC("GridSearch")); - //} - //m_output->EndTag(AZ_CRC("StartDrill")); - //m_output->EndTag(m_drillerTag); - } - - //========================================================================= - // Stop - // [4/14/2011] - //========================================================================= - void SessionDriller::Stop() - { - SessionDrillerBus::Handler::BusDisconnect(); - } - - //========================================================================= - // OnSessionServiceReady - // [4/15/2011] - //========================================================================= - void - SessionDriller::OnSessionServiceReady() - { - // m_output->BeginTag(m_drillerTag); - // m_output->EndTag(m_drillerTag); - } - - //========================================================================= - // OnGridSearchComplete - // [4/15/2011] - //========================================================================= - void - SessionDriller::OnGridSearchComplete(GridSearch* gridSearch) - { - m_output->BeginTag(m_drillerTag); - m_output->BeginTag(AZ_CRC("GridSearchComplete", 0x974b5717)); - m_output->Write(AZ_CRC("SearchId", 0x4f7ef2d2), gridSearch); - m_output->Write(AZ_CRC("NumResults", 0xdfb1542f), gridSearch->GetNumResults()); - // add platform specific drill or just generic reporting - m_output->EndTag(AZ_CRC("GridSearchComplete", 0x974b5717)); - m_output->EndTag(m_drillerTag); - } - - //========================================================================= - // OnMemberJoined - // [4/15/2011] - //========================================================================= - void - SessionDriller::OnMemberJoined(GridSession* session, GridMember* member) - { - m_output->BeginTag(m_drillerTag); - m_output->BeginTag(AZ_CRC("MemberJoined", 0xbde4706c)); - m_output->Write(AZ_CRC("SessionId", 0xacd49154), session->GetId()); - m_output->Write(AZ_CRC("Id", 0xbf396750), member->GetId().ToString()); - m_output->Write(AZ_CRC("Name", 0x5e237e06), member->GetName()); - m_output->Write(AZ_CRC("ConnectionId", 0x4592a200), member->GetConnectionId()); - m_output->Write(AZ_CRC("NAT", 0x9686d0fb), (char)member->GetNatType()); - //m_output->Write(AZ_CRC("MuteList"),member->GetMuteList()); - m_output->Write(AZ_CRC("IsHost", 0xce28a9cf), member->IsHost()); - m_output->Write(AZ_CRC("IsLocal", 0x4300d6d2), member->IsLocal()); - m_output->Write(AZ_CRC("IsInvited", 0x29d785f7), member->IsInvited()); - m_output->EndTag(AZ_CRC("MemberJoined", 0xbde4706c)); - m_output->EndTag(m_drillerTag); - } - - //========================================================================= - // OnMemberLeaving - // [4/15/2011] - //========================================================================= - void - SessionDriller::OnMemberLeaving(GridSession* session, GridMember* member) - { - m_output->BeginTag(m_drillerTag); - m_output->BeginTag(AZ_CRC("MemberLeaving", 0xd10ee176)); - m_output->Write(AZ_CRC("SessionId", 0xacd49154), session->GetId()); - m_output->Write(AZ_CRC("Id", 0xbf396750), member->GetId().ToString()); - m_output->EndTag(AZ_CRC("MemberLeaving", 0xd10ee176)); - m_output->EndTag(m_drillerTag); - } - - //========================================================================= - // OnMemberKicked - // [4/15/2011] - //========================================================================= - void - SessionDriller::OnMemberKicked(GridSession* session, GridMember* member) - { - m_output->BeginTag(m_drillerTag); - m_output->BeginTag(AZ_CRC("MemberKicked", 0x908e74e6)); - m_output->Write(AZ_CRC("SessionId", 0xacd49154), session->GetId()); - m_output->Write(AZ_CRC("Id", 0xbf396750), member->GetId().ToString()); - m_output->EndTag(AZ_CRC("MemberKicked", 0x908e74e6)); - m_output->EndTag(m_drillerTag); - } - - //========================================================================= - // OnSessionCreated - // [4/15/2011] - //========================================================================= - void - SessionDriller::OnSessionCreated(GridSession* session) - { - m_output->BeginTag(m_drillerTag); - m_output->BeginTag(AZ_CRC("SessionCreated", 0x24655a62)); - m_output->Write(AZ_CRC("SessionId", 0xacd49154), session->GetId()); - m_output->Write(AZ_CRC("Carrier", 0x4739f11c), session->GetCarrier()); - m_output->Write(AZ_CRC("ReplicaMgr", 0x41cf3853), session->GetReplicaMgr()); - m_output->Write(AZ_CRC("Topology", 0x1198610c), (char)session->GetTopology()); - m_output->Write(AZ_CRC("Time", 0x6f949845), session->GetTime()); - m_output->Write(AZ_CRC("State", 0xa393d2fb), (char)session->m_sm.GetCurrentState()); - m_output->Write(AZ_CRC("IsHost", 0xce28a9cf), session->IsHost()); - m_output->EndTag(AZ_CRC("SessionCreated", 0x24655a62)); - m_output->EndTag(m_drillerTag); - } - //========================================================================= - // OnSessionJoined - // [4/15/2011] - //========================================================================= - void - SessionDriller::OnSessionJoined(GridSession* session) - { - m_output->BeginTag(m_drillerTag); - m_output->BeginTag(AZ_CRC("SessionJoined", 0x04b85d49)); - m_output->Write(AZ_CRC("SessionId", 0xacd49154), session->GetId()); - m_output->Write(AZ_CRC("Carrier", 0x4739f11c), session->GetCarrier()); - m_output->Write(AZ_CRC("ReplicaMgr", 0x41cf3853), session->GetReplicaMgr()); - m_output->Write(AZ_CRC("Topology", 0x1198610c), (char)session->GetTopology()); - m_output->Write(AZ_CRC("Time", 0x6f949845), session->GetTime()); - m_output->Write(AZ_CRC("State", 0xa393d2fb), (char)session->m_sm.GetCurrentState()); - m_output->Write(AZ_CRC("IsHost", 0xce28a9cf), session->IsHost()); - m_output->EndTag(AZ_CRC("SessionJoined", 0x04b85d49)); - m_output->EndTag(m_drillerTag); - } - //========================================================================= - // OnSessionDelete - // [4/15/2011] - //========================================================================= - void - SessionDriller::OnSessionDelete(GridSession* session) - { - m_output->BeginTag(m_drillerTag); - m_output->Write(AZ_CRC("SessionDelete", 0x6b5728cd), session->GetId()); - m_output->EndTag(m_drillerTag); - } - //========================================================================= - // OnSessionError - // [4/15/2011] - //========================================================================= - void - SessionDriller::OnSessionError(GridSession* session, const AZStd::string& errorMsg) - { - m_output->BeginTag(m_drillerTag); - m_output->BeginTag(AZ_CRC("SessionError", 0xc689cc40)); - m_output->Write(AZ_CRC("SessionId", 0xacd49154), session ? session->GetId() : "NoId"); - m_output->Write(AZ_CRC("Error", 0x5dddbc71), errorMsg); - m_output->EndTag(AZ_CRC("SessionError", 0xc689cc40)); - m_output->EndTag(m_drillerTag); - } - //========================================================================= - // OnSessionStart - // [4/15/2011] - //========================================================================= - void - SessionDriller::OnSessionStart(GridSession* session) - { - m_output->BeginTag(m_drillerTag); - m_output->Write(AZ_CRC("SessionStart", 0x042d25be), session->GetId()); - m_output->EndTag(m_drillerTag); - } - //========================================================================= - // OnSessionEnd - // [4/15/2011] - //========================================================================= - void - SessionDriller::OnSessionEnd(GridSession* session) - { - m_output->BeginTag(m_drillerTag); - m_output->Write(AZ_CRC("SessionEnd", 0x07821a5e), session->GetId()); - m_output->EndTag(m_drillerTag); - } - //========================================================================= - // OnWriteStatistics - // [6/8/2011] - //========================================================================= - void - SessionDriller::OnWriteStatistics(GridSession* session, GridMember* member, StatisticsData& data) - { - m_output->BeginTag(m_drillerTag); - m_output->BeginTag(AZ_CRC("WriteStatistics", 0xcf7f12aa)); - m_output->Write(AZ_CRC("SessionId", 0xacd49154), session->GetId()); - m_output->Write(AZ_CRC("Id", 0xbf396750), member->GetId().ToString()); - // data... - (void)data; - m_output->EndTag(AZ_CRC("WriteStatistics", 0xcf7f12aa)); - m_output->EndTag(m_drillerTag); - } - } // namespace Debug -} // namespace GridMate diff --git a/Code/Framework/GridMate/GridMate/Drillers/SessionDriller.h b/Code/Framework/GridMate/GridMate/Drillers/SessionDriller.h deleted file mode 100644 index 7af318287a..0000000000 --- a/Code/Framework/GridMate/GridMate/Drillers/SessionDriller.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#ifndef GM_SESSION_DRILLER_H -#define GM_SESSION_DRILLER_H - -#include -#include -#include - -namespace GridMate -{ - namespace Debug - { - /** - * Session Driller - * \note Be careful which buses you attach. The drillers work in Multi threaded environment and expect that - * a driller mutex (DrillerManager::DrillerManager) will be automatically locked on every write. - * Otherwise in output stream corruption will happen (even is the stream is thread safe). - */ - class SessionDriller - : public AZ::Debug::Driller - , public SessionDrillerBus::Handler - { - int m_drillerTag; - public: - AZ_CLASS_ALLOCATOR(SessionDriller, AZ::OSAllocator, 0); - SessionDriller(); - - ////////////////////////////////////////////////////////////////////////// - // Driller - const char* GroupName() const override { return "GridMate"; } - const char* GetName() const override { return "SessionDriller"; } - const char* GetDescription() const override { return "Drills GridSession, Search, etc."; } - void Start(const Param* params = NULL, int numParams = 0) override; - void Stop() override; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // Session Event Bus - /// Callback that is called when the Session service is ready to process sessions. - void OnSessionServiceReady() override; - //virtual OnCommucationChanged() = 0 Callback that notifies the title when a member's communication settings change. - /// Callback that notifies the title when a game search query have completed. - void OnGridSearchComplete(GridSearch* gridSearch) override; - /// Callback that notifies the title when a new member joins the game session. - void OnMemberJoined(GridSession* session, GridMember* member) override; - /// Callback that notifies the title that a member is leaving the game session. member pointer is NOT valid after the callback returns. - void OnMemberLeaving(GridSession* session, GridMember* member) override; - // \todo a better way will be (after we solve migration) is to supply a reason to OnMemberLeaving... like the member was kicked. - // this will require that we actually remove the replica at the same moment. - /// Callback that host decided to kick a member. You will receive a OnMemberLeaving when the actual member leaves the session. - void OnMemberKicked(GridSession* session, GridMember* member) override; - /// After this callback it is safe to access session features. If host session is fully operational if client wait for OnSessionJoined. - void OnSessionCreated(GridSession* session) override; - /// Called on client machines to indicate that we join successfully. - void OnSessionJoined(GridSession* session) override; - /// Callback that notifies the title when a session will be left. session pointer is NOT valid after the callback returns. - void OnSessionDelete(GridSession* session) override; - /// Called when a session error occurs. - void OnSessionError(GridSession* session, const AZStd::string& errorMsg) override; - /// Called when the actual game(match) starts - void OnSessionStart(GridSession* session) override; - /// Called when the actual game(match) ends - void OnSessionEnd(GridSession* session) override; - /// Called when we have our last chance to write statistics data for member in the session. - void OnWriteStatistics(GridSession* session, GridMember* member, StatisticsData& data) override; - ////////////////////////////////////////////////////////////////////////// - }; - } -} - -#endif // GM_SESSION_DRILLER_H diff --git a/Code/Framework/GridMate/GridMate/Replica/RemoteProcedureCall.cpp b/Code/Framework/GridMate/GridMate/Replica/RemoteProcedureCall.cpp index 3feef708be..7f96638cf5 100644 --- a/Code/Framework/GridMate/GridMate/Replica/RemoteProcedureCall.cpp +++ b/Code/Framework/GridMate/GridMate/Replica/RemoteProcedureCall.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include #include @@ -32,14 +31,12 @@ namespace GridMate m_replicaChunk->QueueRPCRequest(rpc); } - void RpcBase::OnRpcRequest(GridMate::Internal::RpcRequest* rpc) const + void RpcBase::OnRpcRequest(GridMate::Internal::RpcRequest*) const { - EBUS_EVENT(Debug::ReplicaDrillerBus, OnRequestRpc, m_replicaChunk, rpc); } - void RpcBase::OnRpcInvoke(GridMate::Internal::RpcRequest* rpc) const + void RpcBase::OnRpcInvoke(GridMate::Internal::RpcRequest*) const { - EBUS_EVENT(Debug::ReplicaDrillerBus, OnInvokeRpc, m_replicaChunk, rpc); } PeerId RpcBase::GetSourcePeerId() diff --git a/Code/Framework/GridMate/GridMate/Replica/Replica.cpp b/Code/Framework/GridMate/GridMate/Replica/Replica.cpp index a05b92a7a0..bc95302afd 100644 --- a/Code/Framework/GridMate/GridMate/Replica/Replica.cpp +++ b/Code/Framework/GridMate/GridMate/Replica/Replica.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -49,8 +48,6 @@ namespace GridMate replicaName = nullptr; #endif InternalCreateInitialChunks(replicaName); - - EBUS_EVENT(Debug::ReplicaDrillerBus, OnCreateReplica, this); } //----------------------------------------------------------------------------- Replica::~Replica() @@ -96,8 +93,6 @@ namespace GridMate } } m_chunks.clear(); - - EBUS_EVENT(Debug::ReplicaDrillerBus, OnDestroyReplica, this); } //----------------------------------------------------------------------------- void Replica::Destroy() @@ -257,17 +252,12 @@ namespace GridMate //----------------------------------------------------------------------------- void Replica::OnActivate(const ReplicaContext& rc) { - EBUS_EVENT(Debug::ReplicaDrillerBus, OnActivateReplica, this); - for (auto chunk : m_chunks) { if (chunk) { - { - GM_PROFILE_USER_CALLBACK("OnReplicaActivate"); - chunk->OnReplicaActivate(rc); - } - EBUS_EVENT(Debug::ReplicaDrillerBus, OnActivateReplicaChunk, chunk.get()); + GM_PROFILE_USER_CALLBACK("OnReplicaActivate"); + chunk->OnReplicaActivate(rc); } } } @@ -277,17 +267,13 @@ namespace GridMate AZ_PROFILE_FUNCTION(GridMate); EBUS_EVENT_ID(rc.m_rm->GetGridMate(), ReplicaMgrCallbackBus, OnDeactivateReplica, GetRepId(), rc.m_rm); - EBUS_EVENT(Debug::ReplicaDrillerBus, OnDeactivateReplica, this); for (auto chunk : m_chunks) { if (chunk) { - { - GM_PROFILE_USER_CALLBACK("OnReplicaDeactivate"); - chunk->OnReplicaDeactivate(rc); - } - EBUS_EVENT(Debug::ReplicaDrillerBus, OnDeactivateReplicaChunk, chunk.get()); + GM_PROFILE_USER_CALLBACK("OnReplicaDeactivate"); + chunk->OnReplicaDeactivate(rc); } } } @@ -325,8 +311,6 @@ namespace GridMate { if (IsPrimary()) { - EBUS_EVENT(Debug::ReplicaDrillerBus, OnRequestReplicaChangeOwnership, this, requestor); - if (IsMigratable() && requestor != m_manager->GetLocalPeerId()) { bool accepted; @@ -595,8 +579,6 @@ namespace GridMate chunkInfo.m_payload.Init(128); mc.m_outBuffer = &chunkInfo.m_payload; - EBUS_EVENT(Debug::ReplicaDrillerBus, OnSendReplicaChunkBegin, chunk.get(), static_cast(iChunk), mc.m_rm->GetLocalPeerId(), mc.m_peer->GetId()); - PackedSize writeOffset = mc.m_outBuffer->GetExactSize(); // Write the ctor data if we need to if (mc.m_marshalFlags & ReplicaMarshalFlags::IncludeCtorData) { @@ -606,7 +588,6 @@ namespace GridMate // Marshal the chunk data chunk->Marshal(mc, static_cast(iChunk)); - EBUS_EVENT(Debug::ReplicaDrillerBus, OnSendReplicaChunkEnd, chunk.get(), static_cast(iChunk), mc.m_outBuffer->Get() + writeOffset.GetBytes(), mc.m_outBuffer->Size() - writeOffset.GetBytes()); // Precompute the chunk payload length and add to overall replica payload length PackedSize chunkLen = chunkInfo.m_payload.GetExactSize(); @@ -696,9 +677,7 @@ namespace GridMate if (chunk) { - EBUS_EVENT(Debug::ReplicaDrillerBus, OnReceiveReplicaChunkBegin, chunk.get(), static_cast(iChunk), chunkContext.m_peer->GetId(), chunkContext.m_rm->GetLocalPeerId(), innerBuffer.Get(), chunkSize.GetSizeInBytesRoundUp()); chunk->Unmarshal(chunkContext, static_cast(iChunk)); - EBUS_EVENT(Debug::ReplicaDrillerBus, OnReceiveReplicaChunkEnd, chunk.get(), static_cast(iChunk)); } else { diff --git a/Code/Framework/GridMate/GridMate/Replica/ReplicaChunk.cpp b/Code/Framework/GridMate/GridMate/Replica/ReplicaChunk.cpp index d3db481ccd..2ded895be0 100644 --- a/Code/Framework/GridMate/GridMate/Replica/ReplicaChunk.cpp +++ b/Code/Framework/GridMate/GridMate/Replica/ReplicaChunk.cpp @@ -15,7 +15,6 @@ #include #include #include -#include #include namespace GridMate @@ -41,13 +40,11 @@ namespace GridMate ReplicaChunkInitContext* initContext = ReplicaChunkDescriptorTable::Get().GetCurrentReplicaChunkInitContext(); AZ_Assert(initContext, "Replica's descriptor is NOT pushed on the stack! Call Replica::Desriptor::Push() before construction!"); initContext->m_chunk = this; - EBUS_EVENT(Debug::ReplicaDrillerBus, OnCreateReplicaChunk, this); } //----------------------------------------------------------------------------- ReplicaChunkBase::~ReplicaChunkBase() { AZ_Assert(m_refCount == 0, "Attempting to free replica with non-zero refCount(%d)!", m_refCount); - EBUS_EVENT(Debug::ReplicaDrillerBus, OnDestroyReplicaChunk, this); } //----------------------------------------------------------------------------- void ReplicaChunkBase::Init(ReplicaChunkClassId chunkTypeId) @@ -332,7 +329,7 @@ namespace GridMate return dataSetMask; } //----------------------------------------------------------------------------- - void ReplicaChunkBase::MarshalDataSets(MarshalContext& mc, AZ::u32 chunkIndex) + void ReplicaChunkBase::MarshalDataSets(MarshalContext& mc, [[maybe_unused]] AZ::u32 chunkIndex) { //AZ_PROFILE_SCOPE("GridMate"); AZ::u32 dirtyDataSetMask = CalculateDirtyDataSetMask(mc); @@ -358,15 +355,6 @@ namespace GridMate ReadBuffer data = dataset->GetMarshalData(); mc.m_outBuffer->WriteRaw(data.Get(), data.Size()); wroteDataSet = true; - - EBUS_EVENT(Debug::ReplicaDrillerBus, OnSendDataSet, - this, - chunkIndex, - dataset, - mc.m_rm->GetLocalPeerId(), - mc.m_peer->GetId(), - data.Get(), - data.Size().GetSizeInBytesRoundUp()); } } if(wroteDataSet) @@ -380,7 +368,7 @@ namespace GridMate } } //----------------------------------------------------------------------------- - void ReplicaChunkBase::UnmarshalDataSets(UnmarshalContext& mc, AZ::u32 chunkIndex) + void ReplicaChunkBase::UnmarshalDataSets(UnmarshalContext& mc, [[maybe_unused]] AZ::u32 chunkIndex) { AZ_PROFILE_FUNCTION(GridMate); @@ -421,22 +409,12 @@ namespace GridMate dataset->MarkAsNonDefaultValue(); m_nonDefaultValueBits.set(i); - const char* readPtr = mc.m_iBuf->GetCurrent(); dataset->Unmarshal(mc); - - EBUS_EVENT(Debug::ReplicaDrillerBus, OnReceiveDataSet, - this, - chunkIndex, - dataset, - mc.m_peer->GetId(), - mc.m_rm->GetLocalPeerId(), - readPtr, - mc.m_iBuf->GetCurrent() - readPtr); } } } //----------------------------------------------------------------------------- - void ReplicaChunkBase::MarshalRpcs(MarshalContext& mc, AZ::u32 chunkIndex) + void ReplicaChunkBase::MarshalRpcs(MarshalContext& mc, [[maybe_unused]] AZ::u32 chunkIndex) { //AZ_PROFILE_SCOPE("GridMate"); @@ -467,22 +445,12 @@ namespace GridMate AZ::u8 rpcIndex = static_cast(GetDescriptor()->GetRpcIndex(this, rpc->m_rpc)); - auto bufferSize = mc.m_outBuffer->Size(); - SafeGuardWrite(mc.m_outBuffer, [rpc, rpcIndex, &mc]() { mc.m_outBuffer->Write(rpcIndex); rpc->m_rpc->Marshal(*mc.m_outBuffer, rpc); }); - EBUS_EVENT(Debug::ReplicaDrillerBus, OnSendRpc, - this, - chunkIndex, - rpc, - mc.m_rm->GetLocalPeerId(), - mc.m_peer->GetId(), - mc.m_outBuffer->Get() + bufferSize, - mc.m_outBuffer->Size() - bufferSize); rpc->m_relayed = !(mc.m_marshalFlags & ReplicaMarshalFlags::Authoritative); // marking upstream rpcs relayed, for downstream rpcs - replicamgr marks them relayed after marshaling is finished rpcsSent++; } @@ -494,7 +462,7 @@ namespace GridMate } } //----------------------------------------------------------------------------- - void ReplicaChunkBase::UnmarshalRpcs(UnmarshalContext& mc, AZ::u32 chunkIndex) + void ReplicaChunkBase::UnmarshalRpcs(UnmarshalContext& mc, [[maybe_unused]] AZ::u32 chunkIndex) { AZ_PROFILE_FUNCTION(GridMate); @@ -504,7 +472,7 @@ namespace GridMate { for (AZ::u32 rpcsRead = 0; rpcsRead < rpcCount; ++rpcsRead) { - SafeGuardRead(mc.m_iBuf, [this, &mc, &chunkIndex]() + SafeGuardRead(mc.m_iBuf, [this, &mc]() { unsigned char rpcIndex; if (!mc.m_iBuf->Read(rpcIndex)) @@ -519,7 +487,6 @@ namespace GridMate return; } - const char* dataPtr = mc.m_iBuf->GetCurrent(); Internal::RpcRequest* request = rpc->Unmarshal(*mc.m_iBuf); if (!request) { @@ -565,15 +532,6 @@ namespace GridMate request->m_sourcePeer = mc.m_peer->GetId(); } - size_t dataSize = mc.m_iBuf->GetCurrent() - dataPtr; - EBUS_EVENT(Debug::ReplicaDrillerBus, OnReceiveRpc, - this, - chunkIndex, - request, - mc.m_peer->GetId(), - mc.m_rm->GetLocalPeerId(), - dataPtr, - dataSize); m_rpcQueue.push_back(request); } else @@ -739,7 +697,6 @@ namespace GridMate m_replica = replica; - EBUS_EVENT(Debug::ReplicaDrillerBus, OnAttachReplicaChunk, this); { GM_PROFILE_USER_CALLBACK("OnAttachedToReplica"); OnAttachedToReplica(replica); @@ -751,7 +708,6 @@ namespace GridMate AZ_PROFILE_FUNCTION(GridMate); AZ_Assert(m_replica, "Should be attached to a replica"); - EBUS_EVENT(Debug::ReplicaDrillerBus, OnDetachReplicaChunk, this); { GM_PROFILE_USER_CALLBACK("OnDetachedFromReplica"); OnDetachedFromReplica(m_replica); diff --git a/Code/Framework/GridMate/GridMate/Replica/ReplicaDrillerEvents.h b/Code/Framework/GridMate/GridMate/Replica/ReplicaDrillerEvents.h deleted file mode 100644 index 9ee2785f09..0000000000 --- a/Code/Framework/GridMate/GridMate/Replica/ReplicaDrillerEvents.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#ifndef GM_REPLICA_DRILLER_EVENTS_H -#define GM_REPLICA_DRILLER_EVENTS_H - -#include - -/*! -* The replica system emits debugging EBus events via the ReplicaDrillerEvents interface. -* To listen for these events, derive from ReplicaDrillerBus::Handler and implement all -* the functions declared in the ReplicaDrillerEvents interface. -*/ - -namespace GridMate -{ - class Replica; - class ReplicaChunk; - class ReplicaChunkBase; - class DataSetBase; - typedef AZ::u32 PeerId; - - namespace Internal - { - struct RpcRequest; - } - - namespace Debug - { - /*! - * These are the driller events that the replica system will emit. - * All functions in this interface should be implemented by the user. - */ - class ReplicaDrillerEvents - : public AZ::Debug::DrillerEBusTraits - { - public: - //! Called when a replica is instantiated. It doesn't mean it will be added to the system. - virtual void OnCreateReplica(Replica* replica) { (void)replica; } - //! Called when a replica is actually destroyed. - virtual void OnDestroyReplica(Replica* replica) { (void)replica; } - //! Called when a replica is added to the system. - virtual void OnActivateReplica(Replica* replica) { (void)replica; } - //! Called when a replica is removed from the system. - virtual void OnDeactivateReplica(Replica* replica) { (void)replica; } - //! Called every time the replica data is sent to a peer. - virtual void OnSendReplicaBegin(Replica* replica) { (void)replica; } - //! Called every time the replica data is sent to a peer. - virtual void OnSendReplicaEnd(Replica* replica, const void* data, size_t len) { (void)replica; (void)data; (void)len; } - //! Called when data is received for a replica. Called with nullptr replica pointer when data for unknown replica received. - virtual void OnReceiveReplicaBegin(Replica* replica, const void* data, size_t len) { (void)replica; (void)data; (void)len; } - //! Called when data is received for a replica. Called with nullptr replica pointer when data for unknown replica received. - virtual void OnReceiveReplicaEnd(Replica* replica) { (void)replica; } - //! Called when an ownership transfer request is received. - virtual void OnRequestReplicaChangeOwnership(Replica* replica, PeerId requestor) { (void)replica; (void)requestor; } - //! Called when a replica changes ownership, not necessarily to or from the local node. - virtual void OnReplicaChangeOwnership(Replica* replica, bool wasPrimary) { (void)replica; (void)wasPrimary; } - - //! Called when a chunk has been created. It doesn't mean it will be added to the system. - //! Object will be partially constructed at this point if you inherit from ReplicaChunk - virtual void OnCreateReplicaChunk(ReplicaChunkBase* chunk) { (void)chunk; } - //! Called when a chuck is actually destroyed. - virtual void OnDestroyReplicaChunk(ReplicaChunkBase* chunk) { (void)chunk; } - //! Called when a chunk is added to the system. - virtual void OnActivateReplicaChunk(ReplicaChunkBase* chunk) { (void)chunk; } - //! Called when a chunk is removed from the system. - virtual void OnDeactivateReplicaChunk(ReplicaChunkBase* chunk) { (void)chunk; } - //! Called when a chunk is attached to a replica. - virtual void OnAttachReplicaChunk(ReplicaChunkBase* chunk) { (void)chunk; } - //! Called when a chunk is detached from a replica. - virtual void OnDetachReplicaChunk(ReplicaChunkBase* chunk) { (void)chunk; } - //! Called every time the chunk data is sent to a peer. - virtual void OnSendReplicaChunkBegin(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, PeerId from, PeerId to) { (void)chunk; (void)chunkIndex; (void)from; (void)to; } - //! Called every time the chunk data is sent to a peer. - virtual void OnSendReplicaChunkEnd(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, const void* data, size_t len) { (void)chunk; (void)chunkIndex; (void)data; (void)len; } - //! Called when data is received for a chunk. - virtual void OnReceiveReplicaChunkBegin(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, PeerId from, PeerId to, const void* data, size_t len) { (void)chunk; (void)chunkIndex; (void)from; (void)to; (void)data; (void)len; } - //! Called when data is received for a chunk. - virtual void OnReceiveReplicaChunkEnd(ReplicaChunkBase* chunk, AZ::u32 chunkIndex) { (void)chunk; (void)chunkIndex; } - - //! Called every time a dataset is sent to a peer. - virtual void OnSendDataSet(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, DataSetBase* dataSet, PeerId from, PeerId to, const void* data, size_t len) { (void)chunk; (void)chunkIndex; (void)dataSet; (void)from; (void)to; (void)data; (void)len; } - //! Called when data is received for a dataset. - virtual void OnReceiveDataSet(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, DataSetBase* dataSet, PeerId from, PeerId to, const void* data, size_t len) { (void)chunk; (void)chunkIndex; (void)dataSet; (void)from; (void)to; (void)data; (void)len; } - - //! Called when an rpc request is received. RpcRequest pointer will be null if rpc is called on primary replica. - virtual void OnRequestRpc(ReplicaChunkBase* chunk, Internal::RpcRequest* rpc) { (void)chunk; (void)rpc; } - //! Called when an rpc is invoked. RpcRequest pointer will be null if rpc is called on primary replica. - virtual void OnInvokeRpc(ReplicaChunkBase* chunk, Internal::RpcRequest* rpc) { (void)chunk; (void)rpc; } - //! Called every time an rpc is sent to a peer. - virtual void OnSendRpc(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, Internal::RpcRequest* rpc, PeerId from, PeerId to, const void* data, size_t len) { (void)chunk; (void)chunkIndex; (void)rpc; (void)from; (void)to; (void)data; (void)len; } - //! Called when an rpc is received. - virtual void OnReceiveRpc(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, Internal::RpcRequest* rpc, PeerId from, PeerId to, const void* data, size_t len) { (void)chunk; (void)chunkIndex; (void)rpc; (void)from; (void)to; (void)data; (void)len; } - - //! Called when a replica packet is sent. - virtual void OnSend(PeerId to, const void* data, size_t len, bool isReliable) { (void)to; (void)data; (void)len; (void)isReliable; } - //! Called when a replica packet is received. - virtual void OnReceive(PeerId from, const void* data, size_t len) { (void)from; (void)data; (void)len; } - }; - - /*! - * Replica driller events are sent are sent via this the ReplicaDrillerBus. - * To receive events, derive a handler from ReplicaDrillerBus::Handler and - * attach it to the bus. - */ - typedef AZ::EBus ReplicaDrillerBus; - } // namespace Debug -} // namespace GridMate - -#endif // GM_REPLICA_DRILLER_EVENTS_H - -#pragma once diff --git a/Code/Framework/GridMate/GridMate/Replica/ReplicaMgr.cpp b/Code/Framework/GridMate/GridMate/Replica/ReplicaMgr.cpp index 7a56393bd5..1331e08bd6 100644 --- a/Code/Framework/GridMate/GridMate/Replica/ReplicaMgr.cpp +++ b/Code/Framework/GridMate/GridMate/Replica/ReplicaMgr.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include @@ -147,8 +146,6 @@ namespace GridMate auto callback = AZStd::make_unique((m_reliableCallbacks)); carrier->SendWithCallback(m_reliableOutBuffer.Get(), static_cast(m_reliableOutBuffer.Size()), AZStd::move(callback), GetConnectionId(), Carrier::SEND_RELIABLE, Carrier::PRIORITY_NORMAL, commChannel); - - EBUS_EVENT(Debug::ReplicaDrillerBus, OnSend, GetId(), m_reliableOutBuffer.Get(), m_reliableOutBuffer.Size(), true); } if (hasUnreliableData) @@ -164,8 +161,6 @@ namespace GridMate auto callback = AZStd::make_unique((m_unreliableCallbacks)); carrier->SendWithCallback(m_unreliableOutBuffer.Get(), static_cast(m_unreliableOutBuffer.Size()), AZStd::move(callback), GetConnectionId(), Carrier::SEND_UNRELIABLE, Carrier::PRIORITY_NORMAL, commChannel); - - EBUS_EVENT(Debug::ReplicaDrillerBus, OnSend, GetId(), m_unreliableOutBuffer.Get(), m_unreliableOutBuffer.Size(), false); } // prepare for next cycle ResetBuffer(); @@ -1024,9 +1019,6 @@ namespace GridMate */ while (!rb.IsEmptyIgnoreTrailingBits()) { - // This is used later to report the buffer information to driller. - const char* cmdBufferBegin = rb.GetCurrent(); - CmdId cmdhdr; if (!rb.Read(cmdhdr)) { @@ -1179,10 +1171,8 @@ namespace GridMate return; } - EBUS_EVENT(Debug::ReplicaDrillerBus, OnReceiveReplicaBegin, pReplica.get(), cmdBufferBegin, rb.GetCurrent() - cmdBufferBegin); pReplica->Unmarshal(mc); OnReplicaUnmarshaled(pReplica); - EBUS_EVENT(Debug::ReplicaDrillerBus, OnReceiveReplicaEnd, pReplica.get()); } else { @@ -1195,12 +1185,10 @@ namespace GridMate pReplica->SetSyncStage(isSyncStage); pReplica->SetMigratable(isMigratable); - EBUS_EVENT(Debug::ReplicaDrillerBus, OnReceiveReplicaBegin, pReplica.get(), cmdBufferBegin, rb.GetCurrent() - cmdBufferBegin); pReplica->Unmarshal(mc); ReplicaContext rc(this, GetTime(), pFrom); RegisterReplica(pReplica, false, rc); OnReplicaUnmarshaled(pReplica); - EBUS_EVENT(Debug::ReplicaDrillerBus, OnReceiveReplicaEnd, pReplica.get()); } break; } @@ -1268,11 +1256,9 @@ namespace GridMate } if (pObj->m_upstreamHop) { - EBUS_EVENT(Debug::ReplicaDrillerBus, OnReceiveReplicaBegin, pObj.get(), cmdBufferBegin, rb.GetCurrent() - cmdBufferBegin); mc.m_peer = pFrom; pObj->Unmarshal(mc); OnReplicaUnmarshaled(pObj); - EBUS_EVENT(Debug::ReplicaDrillerBus, OnReceiveReplicaEnd, pObj.get()); } else { @@ -1332,7 +1318,6 @@ namespace GridMate } ReadBuffer rb(GetGridMate()->GetDefaultEndianType(), m_receiveBuffer.data(), result.m_numBytes); - EBUS_EVENT(Debug::ReplicaDrillerBus, OnReceive, peer->GetId(), rb.Get(), rb.Size().GetSizeInBytesRoundUp()); _Unmarshal(rb, peer); AZ_Assert(rb.IsEmptyIgnoreTrailingBits(), "We did not process the whole message!"); } @@ -1655,7 +1640,6 @@ namespace GridMate { replica->SetPrimary(isPrimary); replica->OnChangeOwnership(rc); - EBUS_EVENT(Debug::ReplicaDrillerBus, OnReplicaChangeOwnership, replica.get(), wasPrimary); } } //----------------------------------------------------------------------------- diff --git a/Code/Framework/GridMate/GridMate/Replica/Tasks/ReplicaMarshalTasks.cpp b/Code/Framework/GridMate/GridMate/Replica/Tasks/ReplicaMarshalTasks.cpp index c1d6905e14..cab40e18ca 100644 --- a/Code/Framework/GridMate/GridMate/Replica/Tasks/ReplicaMarshalTasks.cpp +++ b/Code/Framework/GridMate/GridMate/Replica/Tasks/ReplicaMarshalTasks.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include #include @@ -72,12 +71,10 @@ namespace GridMate //----------------------------------------------------------------------------- void ReplicaMarshalTaskBase::OnSendReplicaBegin() { - EBUS_EVENT(Debug::ReplicaDrillerBus, OnSendReplicaBegin, m_replica.get()); } //----------------------------------------------------------------------------- - void ReplicaMarshalTaskBase::OnSendReplicaEnd(ReplicaPeer* to, const void* data, size_t len) + void ReplicaMarshalTaskBase::OnSendReplicaEnd(ReplicaPeer* to, const void*, size_t len) { - EBUS_EVENT(Debug::ReplicaDrillerBus, OnSendReplicaEnd, m_replica.get(), data, len); to->m_sentBytes += static_cast(len); } //----------------------------------------------------------------------------- diff --git a/Code/Framework/GridMate/GridMate/Session/LANSession.cpp b/Code/Framework/GridMate/GridMate/Session/LANSession.cpp index 223085cf13..ae1e674cf2 100644 --- a/Code/Framework/GridMate/GridMate/Session/LANSession.cpp +++ b/Code/Framework/GridMate/GridMate/Session/LANSession.cpp @@ -882,7 +882,6 @@ LANSession::OnStateHostMigrateSession(AZ::HSM& sm, const AZ::HSM::Event& e) { // check the output for more info AZStd::string errorMsg = AZStd::string::format("Failed to initialize socket at port %d!", hostPort); - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnSessionError, this, errorMsg); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnSessionError, this, errorMsg); // We can't be a real host if we failed to provide matching services. Leave(false); @@ -1146,7 +1145,6 @@ void LANSessionService::OnServiceRegistered(IGridMate* gridMate) LANSessionServiceBus::Handler::BusConnect(gridMate); - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnSessionServiceReady); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnSessionServiceReady); } diff --git a/Code/Framework/GridMate/GridMate/Session/Session.cpp b/Code/Framework/GridMate/GridMate/Session/Session.cpp index 3dcb16b08d..54e1e1dfe6 100644 --- a/Code/Framework/GridMate/GridMate/Session/Session.cpp +++ b/Code/Framework/GridMate/GridMate/Session/Session.cpp @@ -316,7 +316,6 @@ GridSession::Shutdown() m_carrier->Shutdown(); } - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnSessionDelete, this); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnSessionDelete, this); m_state = nullptr; @@ -438,7 +437,6 @@ GridSession::Update() memberStateIter = m_unboundMemberStates.erase(memberStateIter); // Both member and client state are valid! send member joined message - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnMemberJoined, this, member); EBUS_EVENT_ID(GetGridMate(), SessionEventBus, OnMemberJoined, this, member); } else @@ -1221,7 +1219,6 @@ GridSession::OnDriverError(Carrier* carrier, ConnectionID id, const DriverError& } uintptr_t idInt = reinterpret_cast(static_cast(id)); AZStd::string errorMsg = AZStd::string::format("Carrier driver error ConnectionID: %" PRIuPTR "ErrorCode: 0x%08x", idInt, error.m_errorCode); - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnSessionError, this, errorMsg); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnSessionError, this, errorMsg); if (id != InvalidConnectionID) @@ -1249,7 +1246,6 @@ GridSession::OnSecurityError(Carrier* carrier, ConnectionID id, const SecurityEr } uintptr_t idInt = reinterpret_cast(static_cast(id)); AZStd::string errorMsg = AZStd::string::format("Carrier security error ConnectionID: %" PRIuPTR " ErrorCode: 0x%08x", idInt, error.m_errorCode); - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnSessionError, this, errorMsg); } //========================================================================= @@ -1276,7 +1272,6 @@ GridSession::ElectNewHost() // AZ_Assert(m_sm.IsInState(SS_HOST_MIGRATE_ELECTION),"We should be in host migrate election state to call this function!"); GridMember* newHost = nullptr; // Allow the user to choose - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnMigrationElectHost, this, newHost); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnMigrationElectHost, this, newHost); if (newHost == nullptr || newHost->GetConnectionId() == InvalidConnectionID || newHost->IsHost()) @@ -1497,7 +1492,6 @@ GridSession::OnStateJoin(HSM& sm, const HSM::Event& e) { case SE_JOINED: { - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnSessionJoined, this); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnSessionJoined, this); sm.Transition(SS_IDLE); } return true; @@ -1591,7 +1585,6 @@ GridSession::OnStateCreate(HSM& sm, const HSM::Event& e) } sm.Transition(SS_IDLE); - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnSessionCreated, this); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnSessionCreated, this); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnSessionHosted, this); } @@ -1616,7 +1609,6 @@ GridSession::OnStateCreate(HSM& sm, const HSM::Event& e) m_carrier->Connect(m_hostAddress); - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnSessionCreated, this); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnSessionCreated, this); } @@ -1639,7 +1631,6 @@ GridSession::OnStateStart(HSM& sm, const HSM::Event& e) { case HSM::EnterEventId: { - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnSessionStart, this); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnSessionStart, this); } return true; } @@ -1660,7 +1651,6 @@ GridSession::OnStateEnd(HSM& sm, const HSM::Event& e) { case HSM::EnterEventId: { - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnSessionEnd, this); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnSessionEnd, this); } return true; } @@ -1710,7 +1700,6 @@ GridSession::OnStateHostMigrateElection(AZ::HSM& sm, const AZ::HSM::Event& e) m_hostMigrationInProcess = true; m_handshake->SetHostMigration(true); - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnMigrationStart, this); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnMigrationStart, this); m_hostMigrationTimeOut = m_state ? m_state->m_hostMigrationTimeout.Get() : 0; @@ -1890,7 +1879,6 @@ GridSession::OnStateHostMigrateSession(AZ::HSM& sm, const AZ::HSM::Event& e) GridMember* host = GetHost(); - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnMigrationEnd, this, host); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnMigrationEnd, this, host); m_myMember->m_clientState->m_newHostVote.Set(0); @@ -2004,7 +1992,6 @@ GridMember::OnReplicaActivate(const ReplicaContext& rc) rc.m_rm->AddPrimary(m_clientState->GetReplica()); // Both member and client state are valid! send member joined message - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnMemberJoined, m_session, this); EBUS_EVENT_ID(m_session->GetGridMate(), SessionEventBus, OnMemberJoined, m_session, this); } } @@ -2021,7 +2008,6 @@ GridMember::OnReplicaDeactivate(const ReplicaContext& rc) if (m_clientState) { // We are deleting the member so send leave message (we are always keeping member <-> state together). - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnMemberLeaving, m_session, this); EBUS_EVENT_ID(m_session->GetGridMate(), SessionEventBus, OnMemberLeaving, m_session, this); m_clientState->m_member = nullptr; @@ -2072,7 +2058,6 @@ GridMember::OnKick(AZ::u8 reason, const RpcContext& rc) // 2 Kick messages in quick succession can cause this to crash otherwise. if (m_session && m_session->GetHost() && rc.m_sourcePeer == m_session->GetHost()->GetIdCompact()) //Only the host can kick { - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnMemberKicked, m_session, this); EBUS_EVENT_ID(m_session->GetGridMate(), SessionEventBus, OnMemberKicked, m_session, this, reason); if (IsLocal()) @@ -2325,7 +2310,6 @@ GridMemberStateReplica::OnReplicaDeactivate(const ReplicaContext& rc) if (m_member) { // client state is gone send leave message - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnMemberLeaving, m_member->m_session, m_member); EBUS_EVENT_ID(m_member->GetSession()->GetGridMate(), SessionEventBus, OnMemberLeaving, m_member->m_session, m_member); m_member->m_clientState = nullptr; @@ -2519,7 +2503,6 @@ SessionService::Update() it = m_activeSearches.erase(it); m_completedSearches.push_back(search); - EBUS_DBG_EVENT(Debug::SessionDrillerBus, OnGridSearchComplete, search); EBUS_EVENT_ID(m_gridMate, SessionEventBus, OnGridSearchComplete, search); } else diff --git a/Code/Framework/GridMate/GridMate/Session/Session.h b/Code/Framework/GridMate/GridMate/Session/Session.h index e075a0aa48..4ab978a713 100644 --- a/Code/Framework/GridMate/GridMate/Session/Session.h +++ b/Code/Framework/GridMate/GridMate/Session/Session.h @@ -28,10 +28,6 @@ namespace GridMate extern const EndianType kSessionEndian; - namespace Debug { - class SessionDriller; - } - typedef AZ::u32 MemberIDCompact; /** * MemberID interface class. @@ -403,7 +399,6 @@ namespace GridMate friend class Internal::GridSessionReplica; friend class Internal::GridMemberStateReplica; friend class SessionService; - friend class Debug::SessionDriller; public: enum CarrierChannels { @@ -742,7 +737,6 @@ namespace GridMate : public GridMateService { friend class GridSession; - friend class Debug::SessionDriller; friend class GridSearch; public: typedef vector SessionArrayType; @@ -936,62 +930,6 @@ namespace GridMate }; } - namespace Debug - { - /** - * Session driller events, - * this events are in addition to the session event bus - */ - class SessionDrillerEvents - : public AZ::Debug::DrillerEBusTraits - { - public: - virtual ~SessionDrillerEvents() {} - - /// Callback that is called when the Session service is ready to process sessions. - virtual void OnSessionServiceReady() {} - - //virtual OnCommucationChanged() = 0 Callback that notifies the title when a member's communication settings change. - - /// Callback when we start a grid search. - virtual void OnGridSearchStart(GridSearch* gridSearch) { (void)gridSearch; } - /// Callback that notifies the title when a game search query have completed. - virtual void OnGridSearchComplete(GridSearch* gridSearch) { (void)gridSearch; } - /// Callback when we release (delete) a grid search. It's not safe to hold the grid pointer after this. - virtual void OnGridSearchRelease(GridSearch* gridSearch) { (void)gridSearch; } - - /// Callback that notifies the title when a new member joins the game session. - virtual void OnMemberJoined(GridSession* session, GridMember* member) { (void)session; (void)member; } - /// Callback that notifies the title that a member is leaving the game session. member pointer is NOT valid after the callback returns. - virtual void OnMemberLeaving(GridSession* session, GridMember* member) { (void)session; (void)member; } - // \todo a better way will be (after we solve migration) is to supply a reason to OnMemberLeaving... like the member was kicked. - // this will require that we actually remove the replica at the same moment. - /// Callback that host decided to kick a member. You will receive a OnMemberLeaving when the actual member leaves the session. - virtual void OnMemberKicked(GridSession* session, GridMember* member) { (void)session; (void)member; } - /// After this callback it is safe to access session features. If host session is fully operational if client wait for OnSessionJoined. - virtual void OnSessionCreated(GridSession* session) { (void)session; } - /// Called on client machines to indicate that we join successfully. - virtual void OnSessionJoined(GridSession* session) { (void)session; } - /// Callback that notifies the title when a session will be left. session pointer is NOT valid after the callback returns. - virtual void OnSessionDelete(GridSession* session) { (void)session; } - /// Called when a session error occurs. - virtual void OnSessionError(GridSession* session, const AZStd::string& errorMsg) { (void)session; (void)errorMsg; } - /// Called when the actual game(match) starts - virtual void OnSessionStart(GridSession* session) { (void)session; } - /// Called when the actual game(match) ends - virtual void OnSessionEnd(GridSession* session) { (void)session; } - /// Called when we start a host migration. - virtual void OnMigrationStart(GridSession* session) { (void)session; } - /// Called so the user can select a member that should be the new Host. Value will be ignored if NULL, current host or the member has invalid connection id. - virtual void OnMigrationElectHost(GridSession* session, GridMember*& newHost) { (void)session; (void)newHost; } - /// Called when the host migration has completed. - virtual void OnMigrationEnd(GridSession* session, GridMember* newHost) { (void)session; (void)newHost; } - /// Called when we have our last chance to write statistics data for member in the session. - virtual void OnWriteStatistics(GridSession* session, GridMember* member, StatisticsData& data) { (void)session; (void)member; (void)data; } - }; - - typedef AZ::EBus SessionDrillerBus; - } } // namespace GridMate #endif // GM_SESSION_H diff --git a/Code/Framework/GridMate/GridMate/gridmate_files.cmake b/Code/Framework/GridMate/GridMate/gridmate_files.cmake index e318a8adcd..99dc4257f6 100644 --- a/Code/Framework/GridMate/GridMate/gridmate_files.cmake +++ b/Code/Framework/GridMate/GridMate/gridmate_files.cmake @@ -45,12 +45,6 @@ set(FILES Containers/unordered_map.h Containers/unordered_set.h Containers/vector.h - Drillers/CarrierDriller.cpp - Drillers/CarrierDriller.h - Drillers/ReplicaDriller.cpp - Drillers/ReplicaDriller.h - Drillers/SessionDriller.cpp - Drillers/SessionDriller.h Online/OnlineUtilityThread.h Online/UserServiceTypes.h Replica/BasicHostChunkDescriptor.h @@ -71,7 +65,6 @@ set(FILES Replica/ReplicaChunkInterface.h Replica/ReplicaCommon.h Replica/ReplicaDefs.h - Replica/ReplicaDrillerEvents.h Replica/ReplicaFunctions.h Replica/ReplicaFunctions.inl Replica/ReplicaInline.inl diff --git a/Code/Framework/GridMate/Tests/Replica.cpp b/Code/Framework/GridMate/Tests/Replica.cpp index 5fef135347..4e569f525a 100644 --- a/Code/Framework/GridMate/Tests/Replica.cpp +++ b/Code/Framework/GridMate/Tests/Replica.cpp @@ -1399,2553 +1399,8 @@ public: } }; -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -class MPSession - : public CarrierEventBus::Handler -{ -public: - ReplicaManager& GetReplicaMgr() { return m_rm; } - void SetTransport(Carrier* transport) { m_pTransport = transport; CarrierEventBus::Handler::BusConnect(transport->GetGridMate()); } - Carrier* GetTransport() { return m_pTransport; } - void SetClient(bool isClient) { m_client = isClient; } - void AcceptConn(bool accept) { m_acceptConn = accept; } - - ~MPSession() - { - CarrierEventBus::Handler::BusDisconnect(); - } - - void Update() - { - char buf[1500]; - for (ConnectionSet::iterator iConn = m_connections.begin(); iConn != m_connections.end(); ++iConn) - { - ConnectionID conn = *iConn; - Carrier::ReceiveResult result = m_pTransport->Receive(buf, 1500, conn, GM_REPLICA_TEST_SESSION_CHANNEL); - if (result.m_state == Carrier::ReceiveResult::RECEIVED) - { - if (strcmp(buf, "IM_A_CLIENT") == 0) - { - m_rm.AddPeer(conn, Mode_Client); - } - else if (strcmp(buf, "IM_A_PEER") == 0) - { - m_rm.AddPeer(conn, Mode_Peer); - } - } - } - } - - template - typename T::Ptr GetChunkFromReplica(ReplicaId id) - { - ReplicaPtr replica = GetReplicaMgr().FindReplica(id); - if (!replica) - { - return nullptr; - } - return replica->FindReplicaChunk(); - } - - ////////////////////////////////////////////////////////////////////////// - // CarrierEventBus - void OnConnectionEstablished(Carrier* carrier, ConnectionID id) override - { - if (carrier != m_pTransport) - { - return; // not for us - } - m_connections.insert(id); - if (m_client) - { - m_pTransport->Send("IM_A_CLIENT", 12, id, Carrier::SEND_RELIABLE, Carrier::PRIORITY_NORMAL, GM_REPLICA_TEST_SESSION_CHANNEL); - } - else - { - m_pTransport->Send("IM_A_PEER", 10, id, Carrier::SEND_RELIABLE, Carrier::PRIORITY_NORMAL, GM_REPLICA_TEST_SESSION_CHANNEL); - } - } - - void OnDisconnect(Carrier* carrier, ConnectionID id, CarrierDisconnectReason /*reason*/) override - { - if (carrier != m_pTransport) - { - return; // not for us - } - m_rm.RemovePeer(id); - m_connections.erase(id); - } - - void OnDriverError(Carrier* carrier, ConnectionID id, const DriverError& error) override - { - (void)error; - if (carrier != m_pTransport) - { - return; // not for us - } - m_pTransport->Disconnect(id); - } - - void OnSecurityError(Carrier* carrier, ConnectionID id, const SecurityError& error) override - { - (void)carrier; - (void)id; - (void)error; - //Ignore security warnings in unit tests - } - ////////////////////////////////////////////////////////////////////////// - - ReplicaManager m_rm; - Carrier* m_pTransport; - typedef unordered_set ConnectionSet; - ConnectionSet m_connections; - bool m_client; - bool m_acceptConn; -}; - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -class MyObj -{ -public: - GM_CLASS_ALLOCATOR(MyObj); - MyObj() - : m_f1(0.f) - , m_b1(false) - , m_i1(0) {} - - float m_f1; - bool m_b1; - int m_i1; -}; - -//----------------------------------------------------------------------------- -class MyCtorContext - : public CtorContextBase -{ -public: - CtorDataSet m_f; - - MyCtorContext() - : m_f(Float16Marshaler(0.f, 1.f)) - {} -}; - -//----------------------------------------------------------------------------- -class MigratableReplica - : public ReplicaChunk -{ -public: - class Descriptor - : public ReplicaChunkDescriptor - { - public: - Descriptor() - : ReplicaChunkDescriptor(MigratableReplica::GetChunkName(), sizeof(MigratableReplica)) - { - } - - ReplicaChunkBase* CreateFromStream(UnmarshalContext& mc) override - { - MyCtorContext cc; - cc.Unmarshal(*mc.m_iBuf); - - // Important hooks. Pre/Post construct allows us to detect all datasets. - if (mc.m_rm->GetUserContext(12345)) - { - AZ_TracePrintf("GridMate", "Create with UserData:%p\n", mc.m_rm->GetUserContext(12345)); - } - ReplicaChunk* chunk = aznew MigratableReplica; - return chunk; - } - - void DiscardCtorStream(UnmarshalContext& mc) override - { - MyCtorContext cc; - cc.Unmarshal(*mc.m_iBuf); - } - - void DeleteReplicaChunk(ReplicaChunkBase* chunkInstance) override { delete chunkInstance; } - - void MarshalCtorData(ReplicaChunkBase*, WriteBuffer& wb) override - { - MyCtorContext cc; - cc.m_f.Set(0.5f); - cc.Marshal(wb); - } - }; - - class MigratableReplicaDebugMsgs - : public AZ::Debug::DrillerEBusTraits - { - public: - typedef AZ::EBus EBus; - - virtual void OnNewOwner(ReplicaId repId, ReplicaManager* repMgr) = 0; - }; - - typedef AZStd::intrusive_ptr Ptr; - - GM_CLASS_ALLOCATOR(MigratableReplica); - static const char* GetChunkName() {return "MigratableReplica"; } - - MigratableReplica(MyObj* pObj = nullptr) - : MyHandler123Rpc("MyHandler123Rpc") - , m_data1("Data1") - , m_data2("Data2") - , m_data3("Data3", 3.0f, Float16Marshaler(0.0f, 10.0f)) - , m_data4("Data4") - - { - Bind(pObj); - } - - bool IsReplicaMigratable() override - { - return true; - } - - bool MyHandler123(const float& f, const RpcContext& rc) - { - (void)f; - (void)rc; - AZ_TracePrintf("GridMate", "Executed MyHandler123 requested at %u with %g on %s at %u.\n", rc.m_timestamp, f, GetReplica()->IsPrimary() ? "Primary" : "Proxy", rc.m_realTime); - return true; - } - - Rpc >::BindInterface MyHandler123Rpc; - - void UpdateChunk(const ReplicaContext& rc) override - { - if (m_pLocalObj) - { - m_data1.Set(m_pLocalObj->m_f1); - m_data1Interpolated.AddSample(m_pLocalObj->m_f1, rc.m_localTime); - - m_data2.Set(m_pLocalObj->m_i1); - m_data3.Set(m_pLocalObj->m_f1); - } - AZStd::bitset<25> bits = m_data4.Get(); - m_data4.Set(bits.flip()); - } - - void UpdateFromChunk(const ReplicaContext& rc) override - { - // AZ_TracePrintf("GridMate", "Updating proxy 0x%x on peer %d coming from peer %d %s\n", GetRepId(), rc.rm->GetLocalPeerId(), rc.myPeer->GetId(), rc.myPeer->GetConnectionId() == InvalidConnectionID ? "(orphan)" : ""); - if (m_pLocalObj) - { - m_data1Interpolated.AddSample(m_data1.Get(), m_data1.GetLastUpdateTime()); - m_pLocalObj->m_f1 = m_data1Interpolated.GetInterpolatedValue(rc.m_localTime); - - m_pLocalObj->m_i1 = m_data2.Get(); - } - m_dummy = m_data3.Get(); - } - - void OnReplicaActivate(const ReplicaContext& rc) override - { - (void)rc; - if (rc.m_rm->GetUserContext(12345)) - { - AZ_TracePrintf("GridMate", "Activate %s with UserData:%p\n", GetReplica()->IsPrimary() ? "primary" : "proxy", rc.m_rm->GetUserContext(12345)); - } - if (IsProxy()) - { - Bind(aznew MyObj()); - } - - if (IsPrimary()) - { - EBUS_EVENT(MigratableReplicaDebugMsgs::EBus, OnNewOwner, GetReplicaId(), rc.m_rm); - } - } - - void OnReplicaDeactivate(const ReplicaContext& rc) override - { - (void)rc; - if (m_pLocalObj) - { - delete m_pLocalObj; - m_pLocalObj = NULL; - } - } - - void OnReplicaChangeOwnership(const ReplicaContext& rc) override - { - (void)rc; - AZ_TracePrintf("GridMate", "Migratable replica 0x%x became %s on Peer %d\n", (int) GetReplicaId(), IsPrimary() ? "primary" : "proxy", (int) rc.m_rm->GetLocalPeerId()); - - if (IsPrimary()) - { - EBUS_EVENT(MigratableReplicaDebugMsgs::EBus, OnNewOwner, GetReplicaId(), rc.m_rm); - } - } - - void Bind(MyObj* pObj) - { - m_pLocalObj = pObj; - } -private: - DataSet m_data1; - LinearInterpExtrap m_data1Interpolated; - - DataSet m_data2; - DataSet m_data3; - DataSet > m_data4; - - MyObj* m_pLocalObj; - float m_dummy; -}; -//----------------------------------------------------------------------------- - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -class NonMigratableReplica - : public ReplicaChunk -{ -public: - enum EBla : AZ::u8 - { - e_Bla0, - e_Bla1, - }; - typedef vector IntVectorType; - bool m_unreliableCheck; -protected: - MyObj* m_pLocalObj; - int m_prevUnreliableValue; - - bool MyHandler123(const float& f, const RpcContext& rc) - { - (void)f; - (void)rc; - AZ_TracePrintf("GridMate", "Executed MyHandler123 requested at %u with %g on %s at %u.\n", rc.m_timestamp, f, IsPrimary() ? "Primary" : "Proxy", rc.m_realTime); - return true; - } - bool MyHandler2(const float& f, int p2, const RpcContext& rc) - { - (void)f; - (void)p2; - (void)rc; - AZ_TracePrintf("GridMate", "Executed MyHandler2 requested at %u with %g,%d on %s at %u.\n", rc.m_timestamp, f, p2, IsPrimary() ? "Primary" : "Proxy", rc.m_realTime); - return true; - } - bool MyHandler3(const float& f, int p2, EBla p3, const RpcContext& rc) - { - (void)f; - (void)p2; - (void)p3; - (void)rc; - AZ_TracePrintf("GridMate", "Executed MyHandler3 requested at %u with %g,%d,%d on %s at %u.\n", rc.m_timestamp, f, p2, p3, IsPrimary() ? "Primary" : "Proxy", rc.m_realTime); - return true; - } - bool MyHandler4(const float& f, int p2, EBla p3, const IntVectorType& p4, const RpcContext& rc) - { - (void)f; - (void)p2; - (void)p3; - (void)p4; - (void)rc; - AZ_TracePrintf("GridMate", "Executed MyHandler4 requested at %u with %g,%d,%d,%d,%d on %s at %u.\n", rc.m_timestamp, f, p2, p3, p4[0], p4[1], IsPrimary() ? "Primary" : "Proxy", rc.m_realTime); - return true; - } - bool MyHandlerUnreliable(const int& i, const RpcContext& rc) - { - (void)rc; - AZ_TracePrintf("GridMate", "Executed MyHandlerUnreliable requested at %u with %d on %s at %u.\n", rc.m_timestamp, i, IsPrimary() ? "Primary" : "Proxy", rc.m_realTime); - AZ_TEST_ASSERT(i > m_prevUnreliableValue); - if ((i - m_prevUnreliableValue) > 1) - { - m_unreliableCheck = true; - } - m_prevUnreliableValue = i; - return true; - } -public: - GM_CLASS_ALLOCATOR(NonMigratableReplica); - typedef AZStd::intrusive_ptr Ptr; - static const char* GetChunkName() { return "NonMigratableReplica"; } - - Rpc >::BindInterface MyHandler123Rpc; - Rpc, RpcArg >::BindInterface MyHandler2Rpc; - Rpc, RpcArg, RpcArg >::BindInterface MyHandler3Rpc; - Rpc, RpcArg, RpcArg, RpcArg >::BindInterface MyHandler4Rpc; - - Rpc >::BindInterface MyHandlerUnreliableRpc; - - NonMigratableReplica(MyObj* pObj = NULL) - : m_unreliableCheck(false) - , m_prevUnreliableValue(0) - , MyHandler123Rpc("MyHandler123Rpc") - , MyHandler2Rpc("MyHandler2Rpc") - , MyHandler3Rpc("MyHandler3Rpc") - , MyHandler4Rpc("MyHandler4Rpc") - , MyHandlerUnreliableRpc("MyHandlerUnreliableRpc") - , m_data1("Data1") - , m_data2("Data2") - { - Bind(pObj); - } - - bool IsReplicaMigratable() override - { - return false; - } - - ~NonMigratableReplica() - { - AZ_Assert(!m_pLocalObj, "Local object should be cleared"); - } - - void UpdateChunk(const ReplicaContext& rc) override - { - m_data1.Set(m_pLocalObj->m_f1); - m_data1Interpolated.AddSample(m_pLocalObj->m_f1, rc.m_localTime); - - m_data2.Set(m_pLocalObj->m_i1); - } - - void UpdateFromChunk(const ReplicaContext& rc) override - { - m_data1Interpolated.AddSample(m_data1.Get(), m_data1.GetLastUpdateTime()); - m_pLocalObj->m_f1 = m_data1Interpolated.GetInterpolatedValue(rc.m_localTime); - - m_pLocalObj->m_i1 = m_data2.Get(); - } - - void OnReplicaActivate(const ReplicaContext& rc) override - { - (void)rc; - if (rc.m_rm->GetUserContext(12345)) - { - AZ_TracePrintf("GridMate", "Activate %s with UserData:%p\n", IsPrimary() ? "primary" : "proxy", rc.m_rm->GetUserContext(12345)); - } - if (IsProxy()) - { - Bind(aznew MyObj()); - } - } - - void OnReplicaDeactivate(const ReplicaContext& rc) override - { - (void)rc; - if (m_pLocalObj) - { - delete m_pLocalObj; - m_pLocalObj = NULL; - } - } - - void OnReplicaChangeOwnership(const ReplicaContext& rc) override - { - (void)rc; - AZ_TracePrintf("GridMate", "NonMigratable replica 0x%x became %s on Peer %d\n", (int) GetReplicaId(), IsPrimary() ? "primary" : "proxy", (int) rc.m_rm->GetLocalPeerId()); - } - - void Bind(MyObj* pObj) - { - m_pLocalObj = pObj; - } - -protected: - DataSet m_data1; - LinearInterpExtrap m_data1Interpolated; - - DataSet m_data2; -}; -//----------------------------------------------------------------------------- - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -class MyDerivedReplica - : public NonMigratableReplica -{ -public: - GM_CLASS_ALLOCATOR(MyDerivedReplica); - - MyDerivedReplica() - : m_data3("Data3") { } - - typedef AZStd::intrusive_ptr Ptr; - static const char* GetChunkName() { return "MyDerivedReplica"; } - - virtual void UpdateChunk(const ReplicaContext& rc) override - { - NonMigratableReplica::UpdateChunk(rc); - m_data3.Set(m_pLocalObj->m_b1); - } - - virtual void UpdateFromChunk(const ReplicaContext& rc) override - { - NonMigratableReplica::UpdateFromChunk(rc); - m_pLocalObj->m_b1 = m_data3.Get(); - } - -protected: - DataSet m_data3; -}; -//----------------------------------------------------------------------------- - -class ReplicaGMTest - : public UnitTest::GridMateMPTestFixture - , public ::testing::Test -{}; - -TEST_F(ReplicaGMTest, DISABLED_ReplicaTest) - { - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - - AZ_TracePrintf("GridMate", "\n"); - enum - { - s1, - s2, - s3, - nSessions - }; - const int k_delay = 100; - - // Setting up simulator with outgoing packet loss - DefaultSimulator clientSimulator; - clientSimulator.SetOutgoingPacketLoss(1, 1); - - MPSession sessions[nSessions]; - - MyObj* s1obj1 = NULL, * s1obj2 = NULL, * s2obj1 = NULL, * s3obj1 = NULL; - MigratableReplica::Ptr s1rep1, s3rep1; - NonMigratableReplica::Ptr s1rep2; - MyDerivedReplica::Ptr s2rep1; - ReplicaId s1rep1id = 0, s1rep2id = 0, s2rep1id = 0, s3rep1id = 0; - - // initialize transport - int basePort = 4427; - for (int i = 0; i < nSessions; ++i) - { - TestCarrierDesc desc; - desc.m_port = basePort + i; - desc.m_enableDisconnectDetection = false; - if (i == s2) - { - desc.m_simulator = &clientSimulator; - } - - // initialize replica managers - // s2(p)<-->(p)s1(p)<-->(c)s3 - sessions[i].SetTransport(DefaultCarrier::Create(desc, m_gridMate)); - sessions[i].AcceptConn(true); - sessions[i].SetClient(i == s3); - sessions[i].GetReplicaMgr().Init(ReplicaMgrDesc(i + 1, sessions[i].GetTransport(), 0, i == 0 ? ReplicaMgrDesc::Role_SyncHost : 0)); - sessions[i].GetReplicaMgr().RegisterUserContext(12345, reinterpret_cast(static_cast(i + 1))); - } - sessions[0].GetReplicaMgr().SetLocalLagAmt(50); - - // put something on s1 to get it going - auto rep = Replica::CreateReplica(nullptr); - s1rep1 = CreateAndAttachReplicaChunk(rep); - s1rep1id = sessions[s1].GetReplicaMgr().AddPrimary(rep); - s1rep1->Bind(s1obj1 = aznew MyObj()); - - // connect s2 to s1 - sessions[s2].GetTransport()->Connect("127.0.0.1", basePort); - - // main test loop - static bool keepRunning = true; - int tick = 0; - while (keepRunning) - { - // perform some random actions on a timeline - switch (tick) - { - case 5: - { - // connect s3 to s1 - sessions[s3].GetTransport()->Connect("127.0.0.1", basePort); - break; - } - case 25: - // remove s1rep1 - AZ_TEST_ASSERT(s1rep1id); - s1rep1->GetReplica()->Destroy(); - s1obj1 = NULL; - break; - case 35: - //AZ_TracePrintf("GridMate", "No more updates.\n"); - break; - case 70: - //AZ_TracePrintf("GridMate", "Restart updates.\n"); - break; - case 90: - keepRunning = false; - } - - // add an object on s2 - if (sessions[s2].GetReplicaMgr().IsReady()) - { - if (!s2rep1id) - { - auto newReplica = Replica::CreateReplica(nullptr); - s2rep1 = CreateAndAttachReplicaChunk(newReplica); - s2rep1id = sessions[s2].GetReplicaMgr().AddPrimary(newReplica); - s2rep1->Bind(s2obj1 = aznew MyObj()); - } - else - { - static bool sends2rep1rpc = true; - if (sends2rep1rpc && tick >= 20) - { - s2rep1->MyHandler123Rpc(5.f); - s2rep1->MyHandler2Rpc(6.0f, 1); - s2rep1->MyHandler3Rpc(7.0f, 2, NonMigratableReplica::e_Bla0); - NonMigratableReplica::IntVectorType v; - v.push_back(10); - v.push_back(13); - s2rep1->MyHandler4Rpc(8.0f, 3, NonMigratableReplica::e_Bla1, v); - sends2rep1rpc = false; - } - } - } - - // add object on s1 - if (sessions[s1].GetReplicaMgr().IsReady()) - { - if (!s1rep2) - { - auto newReplica = Replica::CreateReplica(nullptr); - s1rep2 = CreateAndAttachReplicaChunk(newReplica); - s1rep2id = sessions[s1].GetReplicaMgr().AddPrimary(newReplica); - s1rep2->Bind(s1obj2 = aznew MyObj); - } - else - { - if (s1rep2id && tick >= 40) - { - s1rep2->GetReplica()->Destroy(); - s1obj2 = NULL; - s1rep2id = 0; - } - } - } - - // add object on s3 - if (sessions[s3].GetReplicaMgr().IsReady()) - { - if (!s3rep1) - { - auto newReplica = Replica::CreateReplica(nullptr); - s3rep1 = CreateAndAttachReplicaChunk(newReplica); - s3rep1id = sessions[s3].GetReplicaMgr().AddPrimary(newReplica); - s3rep1->Bind(s3obj1 = aznew MyObj()); - } - else - { - if (s3rep1id && tick >= 45) - { - s3rep1->MyHandler123Rpc(-1.f); - s3rep1->GetReplica()->Destroy(); - s3obj1 = NULL; - s3rep1id = 0; - } - } - } - - { // Testing unreliable rpcs: enabling network simulator with outgoing packetloss, - // calling 10 rpcs with 1..10 int argument, checking if replicas got rpcs in an order, and have missing calls - static bool requestrpc = true; - if (s3rep1id && requestrpc) - { - if (ReplicaPtr pObj = sessions[s2].GetReplicaMgr().FindReplica(s3rep1id)) - { - pObj->FindReplicaChunk()->MyHandler123Rpc(2.0f); - requestrpc = false; - } - } - - static bool unreliableRequest = true; - static int numUnreliableRequests = 0; - if (sessions[s2].GetReplicaMgr().IsReady() && s2rep1 && tick > 15 && unreliableRequest) - { - // Starting packet loss - unreliableRequest = false; - } - - if (!unreliableRequest && numUnreliableRequests < 10) - { - if (numUnreliableRequests == 4) - { - clientSimulator.Enable(); - } - else if (numUnreliableRequests == 5) - { - clientSimulator.Disable(); - } - s2rep1->MyHandlerUnreliableRpc(++numUnreliableRequests); - } - - static bool checkUnreliableDelivery = true; - if (checkUnreliableDelivery && tick >= 25) - { - // Stopping packet loss - ReplicaPtr rep1 = sessions[s1].GetReplicaMgr().FindReplica(s2rep1->GetReplicaId()); - ReplicaPtr rep3 = sessions[s3].GetReplicaMgr().FindReplica(s2rep1->GetReplicaId()); - AZ_TEST_ASSERT(rep1); - AZ_TEST_ASSERT(rep3); - AZ_TEST_ASSERT(rep1->FindReplicaChunk()->m_unreliableCheck); - AZ_TEST_ASSERT(rep3->FindReplicaChunk()->m_unreliableCheck); - checkUnreliableDelivery = false; - } - } - - // modify local objects - if (tick < 20 || tick > 70) - { - if (s1obj1) - { - s1obj1->m_f1 += 0.5f; - s1obj1->m_i1 += 1; - s1obj1->m_b1 = !s1obj1->m_b1; - } - if (s1obj2) - { - s1obj2->m_f1 += 1.0f; - s1obj2->m_i1 -= 1; - s1obj2->m_b1 = !s1obj2->m_b1; - } - if (s2obj1) - { - s2obj1->m_f1 += 0.1f; - s2obj1->m_i1 += 2; - s2obj1->m_b1 = !s2obj1->m_b1; - } - if (s3obj1) - { - s3obj1->m_f1 += 0.3f; - s3obj1->m_i1 += 3; - s3obj1->m_b1 = !s3obj1->m_b1; - } - } - ++tick; - // tick everything - for (int i = 0; i < nSessions; ++i) - { - sessions[i].Update(); - sessions[i].GetReplicaMgr().Unmarshal(); - } - for (int i = 0; i < nSessions; ++i) - { - sessions[i].GetReplicaMgr().UpdateReplicas(); - } - for (int i = 0; i < nSessions; ++i) - { - sessions[i].GetReplicaMgr().UpdateFromReplicas(); - sessions[i].GetReplicaMgr().Marshal(); - } - for (int i = 0; i < nSessions; ++i) - { - sessions[i].GetTransport()->Update(); - } - AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(k_delay)); - } - - for (int i = 0; i < nSessions; ++i) - { - sessions[i].GetReplicaMgr().Shutdown(); - DefaultCarrier::Destroy(sessions[i].GetTransport()); - } - } - -class ForcedReplicaMigrationTest - : public UnitTest::GridMateMPTestFixture - , public ReplicaMgrCallbackBus::Handler - , public MigratableReplica::MigratableReplicaDebugMsgs::EBus::Handler - , public ::testing::Test -{ - void OnNewHost(bool isHost, ReplicaManager* pMgr) override - { - if (isHost) - { - AZ_TracePrintf("GridMate", "Peer %d has completed host migration and is now the host.\n", (int)pMgr->GetLocalPeerId()); - pMgr->SetSendTimeInterval(k_hostSendRateMs); - m_newHostEventOnNewHostCount++; - } - else - { - AZ_TracePrintf("GridMate", "Peer %d has has received notification that host migration is complete.\n", (int)pMgr->GetLocalPeerId()); - pMgr->SetSendTimeInterval(0); - m_newHostEventOnPeersCount++; - } - } - - void OnNewOwner(ReplicaId repId, ReplicaManager* repMgr) override - { - AZ_TracePrintf("GridMate", "Replica 0x%08x got new owner %d on frame %d.\n", repId, (int)repMgr->GetLocalPeerId(), m_frameCount); - m_replicaOwnership[repId] = repMgr; - } - -public: - ForcedReplicaMigrationTest() { ReplicaMgrCallbackBus::Handler::BusConnect(m_gridMate); } - ~ForcedReplicaMigrationTest() { ReplicaMgrCallbackBus::Handler::BusDisconnect(); } - - - enum - { - p1, p2, p3, p4, p5, nPeers - }; - - static const int k_frameTimePerNodeMs = 10; - static const int k_numFramesToRun = 300; - static const int k_hostSendRateMs = k_frameTimePerNodeMs * nPeers * 2; // limiting host send rate x2 times - - int m_frameCount; - int m_newHostEventOnNewHostCount; - int m_newHostEventOnPeersCount; - AZStd::unordered_map m_replicaOwnership; -}; - -const int ForcedReplicaMigrationTest::k_frameTimePerNodeMs; -const int ForcedReplicaMigrationTest::k_numFramesToRun; -const int ForcedReplicaMigrationTest::k_hostSendRateMs; - -TEST_F(ForcedReplicaMigrationTest, DISABLED_ForcedReplicaMigrationTest) - { - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - - MPSession peers[nPeers]; - MigratableReplica::Ptr migrRep[nPeers]; - NonMigratableReplica::Ptr nonMigrRep[nPeers]; - - m_newHostEventOnNewHostCount = 0; - m_newHostEventOnPeersCount = 0; - - MigratableReplica::MigratableReplicaDebugMsgs::EBus::Handler::BusConnect(); - - // initialize full-mesh P2P session - int basePort = 4427; - for (int i = 0; i < nPeers; ++i) - { - TestCarrierDesc desc; - desc.m_port = basePort + i; - desc.m_enableDisconnectDetection = /*false*/ true; - desc.m_threadUpdateTimeMS = k_frameTimePerNodeMs / 2; - - // initialize replica managers - peers[i].SetTransport(DefaultCarrier::Create(desc, m_gridMate)); - peers[i].AcceptConn(true); - peers[i].SetClient(false); - peers[i].GetReplicaMgr().Init(ReplicaMgrDesc(i + 1 - , peers[i].GetTransport() - , 0 - , i == 0 ? ReplicaMgrDesc::Role_SyncHost : 0 - , i == 0 ? k_hostSendRateMs : 0)); - } - - AZ_TracePrintf("GridMate", "\n"); - m_frameCount = 0; - while (m_frameCount < k_numFramesToRun) - { - static bool allReady = false; - // establish all connections - if (m_frameCount < nPeers) - { - for (int i = 0; i < m_frameCount; ++i) - { - peers[m_frameCount].GetTransport()->Connect("127.0.0.1", basePort + i); - } - } - - if (!allReady) - { - allReady = true; - for (int i = 0; i < nPeers; ++i) - { - if (!peers[i].GetReplicaMgr().IsReady()) - { - allReady = false; - } - } - if (allReady) - { - AZ_TracePrintf("GridMate", "All peers ready at frame %d\n", m_frameCount); - } - } - - // perform tests - if (allReady) - { - // add replicas - static bool addReplicas = true; - if (addReplicas) - { - for (int i = 0; i < nPeers; ++i) - { - { - auto rep = Replica::CreateReplica(nullptr); - migrRep[i] = CreateAndAttachReplicaChunk(rep, aznew MyObj()); - peers[i].GetReplicaMgr().AddPrimary(rep); - AZ_TEST_ASSERT(m_replicaOwnership[migrRep[i]->GetReplicaId()] == &peers[i].GetReplicaMgr()); - } - { - auto rep = Replica::CreateReplica(nullptr); - nonMigrRep[i] = CreateAndAttachReplicaChunk(rep, aznew MyObj()); - peers[i].GetReplicaMgr().AddPrimary(rep); - } - } - addReplicas = false; - AZ_TracePrintf("GridMate", "Replicas added at frame %d\n", m_frameCount); - } - - // disconnect p3 and trigger peer migration - static bool dropP3 = true; - if (m_frameCount > 50 && dropP3) - { - peers[p3].GetTransport()->Disconnect(AllConnections); - dropP3 = false; - AZ_TracePrintf("GridMate", "Dropped P3 at frame %d\n", m_frameCount); - } - - // Check that p3's MigratableReplica has migrated to p1 (host) - if (m_frameCount == 85) - { - AZ_TEST_ASSERT(m_replicaOwnership[migrRep[p3]->GetReplicaId()] == &peers[p1].GetReplicaMgr()); - } - - // disconnect p1 and trigger host loss - static bool dropP1 = true; - if (m_frameCount > 100 && dropP1) - { - peers[p1].GetTransport()->Disconnect(AllConnections); - dropP1 = false; - AZ_TracePrintf("GridMate", "Dropped P1 at frame %d\n", m_frameCount); - } - - // promote p2 to host - static bool promoteP2 = true; - if (m_frameCount > 150 && promoteP2) - { - peers[p2].GetReplicaMgr().Promote(); - promoteP2 = false; - AZ_TracePrintf("GridMate", "Promoted P2 at frame %d\n", m_frameCount); - } - } - - // tick - int tickPeer = m_frameCount++ % nPeers; - peers[tickPeer].Update(); - peers[tickPeer].GetReplicaMgr().Unmarshal(); - peers[tickPeer].GetReplicaMgr().UpdateReplicas(); - peers[tickPeer].GetReplicaMgr().UpdateFromReplicas(); - peers[tickPeer].GetReplicaMgr().Marshal(); - peers[tickPeer].GetTransport()->Update(); - AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(k_frameTimePerNodeMs)); - } - - // Check that p1's MigratableReplicas (including the one from p3) have migrated to p2 (host) - AZ_TEST_ASSERT(m_replicaOwnership[migrRep[p1]->GetReplicaId()] == &peers[p2].GetReplicaMgr()); - AZ_TEST_ASSERT(m_replicaOwnership[migrRep[p3]->GetReplicaId()] == &peers[p2].GetReplicaMgr()); - - AZ_TEST_ASSERT(m_newHostEventOnNewHostCount == 1); // New host should have received OnNewHost event - AZ_TEST_ASSERT(m_newHostEventOnPeersCount == 2); // 2 peers remaining should have received OnNewHost event - - // clean up - for (int i = 0; i < nPeers; ++i) - { - peers[i].GetReplicaMgr().Shutdown(); - DefaultCarrier::Destroy(peers[i].GetTransport()); - } - - MigratableReplica::MigratableReplicaDebugMsgs::EBus::Handler::BusDisconnect(); - } - -class ReplicaMigrationRequestTest - : public UnitTest::GridMateMPTestFixture - , public ::testing::Test -{ -public: - enum - { - Host, - Peer1, - Peer2, - Client1, - Client2, - TotalNodes - }; - - class AlwaysMigratable - : public ReplicaChunk - { - public: - GM_CLASS_ALLOCATOR(AlwaysMigratable); - typedef AZStd::intrusive_ptr Ptr; - static const char* GetChunkName() { return "AlwaysMigratable"; } - - AlwaysMigratable() - : UpdateControlValue("UpdateControlValue") - , m_requests(0) - , m_accepted(0) - , m_triggerNextTransfer(false) - , m_owner("Owner") - , m_control("Control") - { - } - - bool IsReplicaMigratable() override - { - return true; - } - - bool AcceptChangeOwnership(PeerId requestor, const ReplicaContext& rc) override - { - AZ_TracePrintf("GridMate", "Node %d accepted transfer of AlwaysMigratable 0x%x to node %d.\n", rc.m_rm->GetLocalPeerId() - 1, GetReplicaId(), requestor - 1); - m_requests++; - m_accepted++; - - if (rc.m_rm->GetLocalPeerId() - 1 == Peer2 && requestor - 1 == Host) - { - m_triggerNextTransfer = true; - } - - return true; - } - - void OnReplicaActivate(const ReplicaContext& rc) override - { - if (IsPrimary()) - { - m_owner.Set(rc.m_rm->GetLocalPeerId() - 1); - m_control.Set(rc.m_rm->GetLocalPeerId() - 1); - } - } - - void OnReplicaChangeOwnership(const ReplicaContext& rc) override - { - if (IsPrimary()) - { - AZ_TracePrintf("GridMate", "OnChangeOwnership: 0x%04x Became primary on node %d\n", GetReplicaId(), rc.m_rm->GetLocalPeerId() - 1); - m_owner.Set(rc.m_rm->GetLocalPeerId() - 1); - } - else - { - AZ_TracePrintf("GridMate", "OnChangeOwnership: 0x%04x Became proxy on node %d\n", GetReplicaId(), rc.m_rm->GetLocalPeerId() - 1); - if (m_triggerNextTransfer) - { - GetReplica()->RequestChangeOwnership(Client2 + 1); - m_triggerNextTransfer = false; - } - } - } - - bool UpdateControlValueFn(const RpcContext& rc) - { - (void)rc; - m_control.Set(GetReplicaManager()->GetLocalPeerId() - 1); - return false; - } - Rpc<>::BindInterface UpdateControlValue; - - int m_requests; - int m_accepted; - bool m_triggerNextTransfer; - - DataSet m_owner; - DataSet m_control; - }; - - class NeverMigratable - : public AlwaysMigratable - { - public: - GM_CLASS_ALLOCATOR(NeverMigratable); - typedef AZStd::intrusive_ptr Ptr; - static const char* GetChunkName() { return "NeverMigratable"; } - - NeverMigratable() - { - } - - bool IsReplicaMigratable() override - { - return false; - } - }; - - class SometimesMigratable - : public AlwaysMigratable - { - public: - GM_CLASS_ALLOCATOR(SometimesMigratable); - typedef AZStd::intrusive_ptr Ptr; - static const char* GetChunkName() { return "SometimesMigratable"; } - - SometimesMigratable() - { - m_acceptMigrationRequests = false; - } - - virtual bool AcceptChangeOwnership(PeerId requestor, const ReplicaContext& rc) override - { - (void)requestor; - (void)rc; - m_requests++; - if (m_acceptMigrationRequests) - { - AZ_TracePrintf("GridMate", "Node %d accepted transfer of SometimesMigratable 0x%x to node %d.\n", rc.m_rm->GetLocalPeerId() - 1, GetReplicaId(), requestor - 1); - m_accepted++; - return true; - } - return false; - } - - bool m_acceptMigrationRequests; - }; - - struct Node - { - MPSession m_session; - AlwaysMigratable::Ptr m_always; - NeverMigratable::Ptr m_never; - SometimesMigratable::Ptr m_sometimes; - }; - - - static const int k_frameTimePerNodeMs = 10; - static const int k_hostSendTimeMs = k_frameTimePerNodeMs * TotalNodes * 4; // limiting host send rate to be x4 times slower than tick -}; - -TEST_F(ReplicaMigrationRequestTest, DISABLED_ReplicaMigrationRequestTest) - { - /* - Topology: - P1---P2 - \ / - \ / - H - / \ - / \ - C1 C2 - - Migration pattern: - AlwaysMigratable: - P1 -> P2 - P2 -> Host -> C2 (both at same time, with C2 arriving second) - Host -> C1 - C1 -> C2 -> Host - C2 -> P1 - NeverMigratable: - P1 -> C1 (Forbidden) - C2 -> P2 (Forbidden) - SometimesMigratable: - P1 -> Host - C1 -> P1 - P2 -> C2 (Forbidden) - C2 -> Host (Forbidden) - */ - - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - - Node nodes[TotalNodes]; - int basePort = 4427; - for (int i = 0; i < TotalNodes; ++i) - { - TestCarrierDesc desc; - desc.m_port = basePort + i; - desc.m_connectionTimeoutMS = 15000; - // initialize replica managers - nodes[i].m_session.SetTransport(DefaultCarrier::Create(desc, m_gridMate)); - nodes[i].m_session.AcceptConn(true); - nodes[i].m_session.SetClient(i == Client1 || i == Client2); - nodes[i].m_session.GetReplicaMgr().Init(ReplicaMgrDesc(i + 1 - , nodes[i].m_session.GetTransport() - , 0 - , i == Host ? ReplicaMgrDesc::Role_SyncHost : 0 - , i == Host ? k_hostSendTimeMs : 0)); - } - - // Connect all the nodes - nodes[Peer1].m_session.GetTransport()->Connect("127.0.0.1", basePort + Host); - nodes[Peer2].m_session.GetTransport()->Connect("127.0.0.1", basePort + Host); - nodes[Client1].m_session.GetTransport()->Connect("127.0.0.1", basePort + Host); - nodes[Client2].m_session.GetTransport()->Connect("127.0.0.1", basePort + Host); - nodes[Peer1].m_session.GetTransport()->Connect("127.0.0.1", basePort + Peer2); - - - int framesToRun = 800; - for (int iTick = 0; iTick < framesToRun; ++iTick) - { - for (int iNode = 0; iNode < TotalNodes; ++iNode) - { - if (nodes[iNode].m_session.GetReplicaMgr().IsReady()) - { - if (nodes[iNode].m_always == nullptr) - { - { - auto rep = Replica::CreateReplica(nullptr); - nodes[iNode].m_always = CreateAndAttachReplicaChunk(rep); - nodes[iNode].m_session.GetReplicaMgr().AddPrimary(rep); - } - { - auto rep = Replica::CreateReplica(nullptr); - nodes[iNode].m_never = CreateAndAttachReplicaChunk(rep); - nodes[iNode].m_session.GetReplicaMgr().AddPrimary(rep); - } - { - auto rep = Replica::CreateReplica(nullptr); - nodes[iNode].m_sometimes = CreateAndAttachReplicaChunk(rep); - nodes[iNode].m_sometimes->m_acceptMigrationRequests = iNode == Peer1 || iNode == Client1; - nodes[iNode].m_session.GetReplicaMgr().AddPrimary(rep); - } - } - } - } - - // First round of migrations - if (iTick == 200) - { - // P1 -> P2 - ReplicaPtr aP1onP2 = nodes[Peer2].m_session.GetReplicaMgr().FindReplica(nodes[Peer1].m_always->GetReplicaId()); - AZ_TEST_ASSERT(aP1onP2); - aP1onP2->RequestChangeOwnership(); - - // P2 -> Host -> C2 (both at same time, with C2 arriving second) - ReplicaPtr aP2onH = nodes[Host].m_session.GetReplicaMgr().FindReplica(nodes[Peer2].m_always->GetReplicaId()); - AZ_TEST_ASSERT(aP2onH); - aP2onH->RequestChangeOwnership(); - - // Host -> C1 - ReplicaPtr aHonC1 = nodes[Client1].m_session.GetReplicaMgr().FindReplica(nodes[Host].m_always->GetReplicaId()); - AZ_TEST_ASSERT(aHonC1); - aHonC1->RequestChangeOwnership(); - - // C1 -> C2 -> Host (first migration) - ReplicaPtr aC1onC2 = nodes[Client2].m_session.GetReplicaMgr().FindReplica(nodes[Client1].m_always->GetReplicaId()); - AZ_TEST_ASSERT(aC1onC2); - aC1onC2->RequestChangeOwnership(); - - // C2 -> P1 - ReplicaPtr aC2onP1 = nodes[Peer1].m_session.GetReplicaMgr().FindReplica(nodes[Client2].m_always->GetReplicaId()); - AZ_TEST_ASSERT(aC2onP1); - aC2onP1->RequestChangeOwnership(); - - // P1 -> C1 (Forbidden) - ReplicaPtr nP1onC1 = nodes[Client1].m_session.GetReplicaMgr().FindReplica(nodes[Peer1].m_never->GetReplicaId()); - AZ_TEST_ASSERT(nP1onC1); - nP1onC1->RequestChangeOwnership(); - - // C2 -> P2 (Forbidden) - ReplicaPtr nC2onP2 = nodes[Peer2].m_session.GetReplicaMgr().FindReplica(nodes[Client2].m_never->GetReplicaId()); - AZ_TEST_ASSERT(nC2onP2); - nC2onP2->RequestChangeOwnership(); - - // P1 -> Host - ReplicaPtr sP1onH = nodes[Host].m_session.GetReplicaMgr().FindReplica(nodes[Peer1].m_sometimes->GetReplicaId()); - AZ_TEST_ASSERT(sP1onH); - sP1onH->RequestChangeOwnership(); - - // C1 -> P1 - ReplicaPtr sC1onP1 = nodes[Peer1].m_session.GetReplicaMgr().FindReplica(nodes[Client1].m_sometimes->GetReplicaId()); - AZ_TEST_ASSERT(sC1onP1); - sC1onP1->RequestChangeOwnership(); - - // P2 -> C2 (Forbidden) - ReplicaPtr sP2onC2 = nodes[Client2].m_session.GetReplicaMgr().FindReplica(nodes[Peer2].m_sometimes->GetReplicaId()); - AZ_TEST_ASSERT(sP2onC2); - sP2onC2->RequestChangeOwnership(); - - // C2 -> Host (Forbidden) - ReplicaPtr sC2onH = nodes[Host].m_session.GetReplicaMgr().FindReplica(nodes[Client2].m_sometimes->GetReplicaId()); - AZ_TEST_ASSERT(sC2onH); - sC2onH->RequestChangeOwnership(); - } - - // Second round of migrations - if (iTick == 400) - { - // C1 -> C2 -> Host (1st migration) - AZ_TEST_ASSERT(nodes[Client1].m_always->m_requests == 1); - AZ_TEST_ASSERT(nodes[Client1].m_always->m_accepted == 1); - AZ_TEST_ASSERT(nodes[Client1].m_always->GetReplica()->IsProxy()); - AZ_TEST_ASSERT(nodes[Client1].m_always->m_owner.Get() == Client2); - AZ_TEST_ASSERT(nodes[Client2].m_session.GetReplicaMgr().FindReplica(nodes[Client1].m_always->GetReplicaId())->IsPrimary()); - - // C1 -> C2 -> Host (2nd migration) - ReplicaPtr aHonC1 = nodes[Host].m_session.GetReplicaMgr().FindReplica(nodes[Client1].m_always->GetReplicaId()); - AZ_TEST_ASSERT(aHonC1); - aHonC1->RequestChangeOwnership(); - } - - // Send non-authoritative control RPCs - if (iTick == 600) - { - // P1 -> P2 - AlwaysMigratable::Ptr aP1onH = nodes[Host].m_session.GetChunkFromReplica(nodes[Peer1].m_always->GetReplicaId()); - aP1onH->UpdateControlValue(); - // P2 -> Host -> C2 (both at same time, with C2 arriving second) - AlwaysMigratable::Ptr aP2onC1 = nodes[Client1].m_session.GetChunkFromReplica(nodes[Peer2].m_always->GetReplicaId()); - aP2onC1->UpdateControlValue(); - // Host -> C1 - AlwaysMigratable::Ptr aHonP1 = nodes[Peer1].m_session.GetChunkFromReplica(nodes[Host].m_always->GetReplicaId()); - aHonP1->UpdateControlValue(); - // C1 -> C2 -> Host - AlwaysMigratable::Ptr aC1onP2 = nodes[Peer2].m_session.GetChunkFromReplica(nodes[Client1].m_always->GetReplicaId()); - aC1onP2->UpdateControlValue(); - // C2 -> P1 - AlwaysMigratable::Ptr aC2onP2 = nodes[Peer2].m_session.GetChunkFromReplica(nodes[Client2].m_always->GetReplicaId()); - aC2onP2->UpdateControlValue(); - // P1 -> C1 (Forbidden) - NeverMigratable::Ptr nP1onH = nodes[Host].m_session.GetChunkFromReplica(nodes[Peer1].m_never->GetReplicaId()); - nP1onH->UpdateControlValue(); - // C2 -> P2 (Forbidden) - NeverMigratable::Ptr nC2onP1 = nodes[Peer1].m_session.GetChunkFromReplica(nodes[Client2].m_never->GetReplicaId()); - nC2onP1->UpdateControlValue(); - // P1 -> Host - SometimesMigratable::Ptr sP1onH = nodes[Host].m_session.GetChunkFromReplica(nodes[Peer1].m_sometimes->GetReplicaId()); - sP1onH->UpdateControlValue(); - // C1 -> P1 - SometimesMigratable::Ptr sC1onC2 = nodes[Client2].m_session.GetChunkFromReplica(nodes[Client1].m_sometimes->GetReplicaId()); - sC1onC2->UpdateControlValue(); - // P2 -> C2 (Forbidden) - SometimesMigratable::Ptr sP2onC2 = nodes[Client2].m_session.GetChunkFromReplica(nodes[Peer2].m_sometimes->GetReplicaId()); - sP2onC2->UpdateControlValue(); - // C2 -> Host (Forbidden) - SometimesMigratable::Ptr sC2onP1 = nodes[Peer1].m_session.GetChunkFromReplica(nodes[Client2].m_sometimes->GetReplicaId()); - sC2onP1->UpdateControlValue(); - } - - // tick - int tickNode = iTick % TotalNodes; - nodes[tickNode].m_session.Update(); - nodes[tickNode].m_session.GetReplicaMgr().Unmarshal(); - nodes[tickNode].m_session.GetReplicaMgr().UpdateFromReplicas(); - nodes[tickNode].m_session.GetReplicaMgr().UpdateReplicas(); - nodes[tickNode].m_session.GetReplicaMgr().Marshal(); - nodes[tickNode].m_session.GetTransport()->Update(); - AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(k_frameTimePerNodeMs)); - } - - // P1 -> P2 - AZ_TEST_ASSERT(nodes[Peer1].m_always->m_requests == 1); - AZ_TEST_ASSERT(nodes[Peer1].m_always->m_accepted == 1); - AZ_TEST_ASSERT(nodes[Peer1].m_always->GetReplica()->IsProxy()); - AZ_TEST_ASSERT(nodes[Peer1].m_always->m_owner.Get() == Peer2); - AZ_TEST_ASSERT(nodes[Peer2].m_session.GetReplicaMgr().FindReplica(nodes[Peer1].m_always->GetReplicaId())->IsPrimary()); - AZ_TEST_ASSERT(nodes[Peer1].m_always->m_control.Get() == Peer2); - - // P2 -> Host -> C2 (both at same time, with C2 arriving second) - AZ_TEST_ASSERT(nodes[Peer2].m_always->m_requests == 1); - AZ_TEST_ASSERT(nodes[Peer2].m_always->m_accepted == 1); - AZ_TEST_ASSERT(nodes[Peer2].m_always->GetReplica()->IsProxy()); - AZ_TEST_ASSERT(nodes[Peer2].m_always->m_owner.Get() == Client2); - AlwaysMigratable::Ptr aP2onH = nodes[Host].m_session.GetChunkFromReplica(nodes[Peer2].m_always->GetReplicaId()); - AZ_TEST_ASSERT(aP2onH->m_requests == 1); - AZ_TEST_ASSERT(aP2onH->m_accepted == 1); - AZ_TEST_ASSERT(aP2onH->GetReplica()->IsProxy()); - AZ_TEST_ASSERT(aP2onH->m_owner.Get() == Client2); - AZ_TEST_ASSERT(nodes[Client2].m_session.GetReplicaMgr().FindReplica(nodes[Peer2].m_always->GetReplicaId())->IsPrimary()); - AZ_TEST_ASSERT(nodes[Peer2].m_always->m_control.Get() == Client2); - - // Host -> C1 - AZ_TEST_ASSERT(nodes[Host].m_always->m_requests == 1); - AZ_TEST_ASSERT(nodes[Host].m_always->m_accepted == 1); - AZ_TEST_ASSERT(nodes[Host].m_always->GetReplica()->IsProxy()); - AZ_TEST_ASSERT(nodes[Host].m_always->m_owner.Get() == Client1); - AZ_TEST_ASSERT(nodes[Client1].m_session.GetReplicaMgr().FindReplica(nodes[Host].m_always->GetReplicaId())->IsPrimary()); - AZ_TEST_ASSERT(nodes[Host].m_always->m_control.Get() == Client1); - - // C1 -> C2 -> Host (2nd migration) - AZ_TEST_ASSERT(nodes[Client1].m_always->m_requests == 1); - AZ_TEST_ASSERT(nodes[Client1].m_always->m_accepted == 1); - AZ_TEST_ASSERT(nodes[Client1].m_always->GetReplica()->IsProxy()); - AZ_TEST_ASSERT(nodes[Client1].m_always->m_owner.Get() == Host); - AlwaysMigratable::Ptr aC1onC2 = nodes[Client2].m_session.GetChunkFromReplica(nodes[Client1].m_always->GetReplicaId()); - AZ_TEST_ASSERT(aC1onC2->m_requests == 1); - AZ_TEST_ASSERT(aC1onC2->m_accepted == 1); - AZ_TEST_ASSERT(aC1onC2->GetReplica()->IsProxy()); - AZ_TEST_ASSERT(aC1onC2->m_owner.Get() == Host); - AZ_TEST_ASSERT(nodes[Host].m_session.GetReplicaMgr().FindReplica(nodes[Client1].m_always->GetReplicaId())->IsPrimary()); - AZ_TEST_ASSERT(nodes[Client1].m_always->m_control.Get() == Host); - - // C2 -> P1 - AZ_TEST_ASSERT(nodes[Client2].m_always->m_requests == 1); - AZ_TEST_ASSERT(nodes[Client2].m_always->m_accepted == 1); - AZ_TEST_ASSERT(nodes[Client2].m_always->GetReplica()->IsProxy()); - AZ_TEST_ASSERT(nodes[Client2].m_always->m_owner.Get() == Peer1); - AZ_TEST_ASSERT(nodes[Peer1].m_session.GetReplicaMgr().FindReplica(nodes[Client2].m_always->GetReplicaId())->IsPrimary()); - AZ_TEST_ASSERT(nodes[Client2].m_always->m_control.Get() == Peer1); - - // P1 -> C1 (Forbidden) - AZ_TEST_ASSERT(nodes[Peer1].m_never->m_requests == 0); - AZ_TEST_ASSERT(nodes[Peer1].m_never->m_accepted == 0); - AZ_TEST_ASSERT(nodes[Peer1].m_never->GetReplica()->IsPrimary()); - AZ_TEST_ASSERT(nodes[Peer1].m_never->m_owner.Get() == Peer1); - AZ_TEST_ASSERT(nodes[Client1].m_session.GetReplicaMgr().FindReplica(nodes[Peer1].m_never->GetReplicaId())->IsProxy()); - AZ_TEST_ASSERT(nodes[Peer1].m_never->m_control.Get() == Peer1); - - // C2 -> P2 (Forbidden) - AZ_TEST_ASSERT(nodes[Client2].m_never->m_requests == 0); - AZ_TEST_ASSERT(nodes[Client2].m_never->m_accepted == 0); - AZ_TEST_ASSERT(nodes[Client2].m_never->GetReplica()->IsPrimary()); - AZ_TEST_ASSERT(nodes[Client2].m_never->m_owner.Get() == Client2); - AZ_TEST_ASSERT(nodes[Peer2].m_session.GetReplicaMgr().FindReplica(nodes[Client2].m_never->GetReplicaId())->IsProxy()); - AZ_TEST_ASSERT(nodes[Client2].m_never->m_control.Get() == Client2); - - // P1 -> Host - AZ_TEST_ASSERT(nodes[Peer1].m_sometimes->m_requests == 1); - AZ_TEST_ASSERT(nodes[Peer1].m_sometimes->m_accepted == 1); - AZ_TEST_ASSERT(nodes[Peer1].m_sometimes->GetReplica()->IsProxy()); - AZ_TEST_ASSERT(nodes[Peer1].m_sometimes->m_owner.Get() == Host); - AZ_TEST_ASSERT(nodes[Host].m_session.GetReplicaMgr().FindReplica(nodes[Peer1].m_sometimes->GetReplicaId())->IsPrimary()); - AZ_TEST_ASSERT(nodes[Peer1].m_sometimes->m_control.Get() == Host); - - // C1 -> P1 - AZ_TEST_ASSERT(nodes[Client1].m_sometimes->m_requests == 1); - AZ_TEST_ASSERT(nodes[Client1].m_sometimes->m_accepted == 1); - AZ_TEST_ASSERT(nodes[Client1].m_sometimes->GetReplica()->IsProxy()); - AZ_TEST_ASSERT(nodes[Client1].m_sometimes->m_owner.Get() == Peer1); - AZ_TEST_ASSERT(nodes[Peer1].m_session.GetReplicaMgr().FindReplica(nodes[Client1].m_sometimes->GetReplicaId())->IsPrimary()); - AZ_TEST_ASSERT(nodes[Client1].m_sometimes->m_control.Get() == Peer1); - - // P2 -> C2 (Forbidden) - AZ_TEST_ASSERT(nodes[Peer2].m_sometimes->m_requests == 1); - AZ_TEST_ASSERT(nodes[Peer2].m_sometimes->m_accepted == 0); - AZ_TEST_ASSERT(nodes[Peer2].m_sometimes->GetReplica()->IsPrimary()); - AZ_TEST_ASSERT(nodes[Peer2].m_sometimes->m_owner.Get() == Peer2); - AZ_TEST_ASSERT(nodes[Client2].m_session.GetReplicaMgr().FindReplica(nodes[Peer2].m_never->GetReplicaId())->IsProxy()); - AZ_TEST_ASSERT(nodes[Peer2].m_sometimes->m_control.Get() == Peer2); - - // C2 -> Host (Forbidden) - AZ_TEST_ASSERT(nodes[Client2].m_sometimes->m_requests == 1); - AZ_TEST_ASSERT(nodes[Client2].m_sometimes->m_accepted == 0); - AZ_TEST_ASSERT(nodes[Client2].m_sometimes->GetReplica()->IsPrimary()); - AZ_TEST_ASSERT(nodes[Client2].m_sometimes->m_owner.Get() == Client2); - AZ_TEST_ASSERT(nodes[Host].m_session.GetReplicaMgr().FindReplica(nodes[Client2].m_never->GetReplicaId())->IsProxy()); - AZ_TEST_ASSERT(nodes[Client2].m_sometimes->m_control.Get() == Client2); - - // clean up - for (int i = 0; i < TotalNodes; ++i) - { - nodes[i].m_always = nullptr; - nodes[i].m_never = nullptr; - nodes[i].m_sometimes = nullptr; - nodes[i].m_session.GetReplicaMgr().Shutdown(); - DefaultCarrier::Destroy(nodes[i].m_session.GetTransport()); - } - } - -const int ReplicaMigrationRequestTest::k_frameTimePerNodeMs; -const int ReplicaMigrationRequestTest::k_hostSendTimeMs; - - -class PeerRejoinTest - : public UnitTest::GridMateMPTestFixture - , public ReplicaMgrCallbackBus::Handler - , public ::testing::Test -{ - void OnNewHost(bool isHost, ReplicaManager* pMgr) override - { - (void)pMgr; - if (isHost) - { - AZ_TracePrintf("GridMate", "Peer %d has completed host migration and is now the host.\n", (int)pMgr->GetLocalPeerId()); - } - else - { - AZ_TracePrintf("GridMate", "Peer %d has has received notification that host migration is complete.\n", (int)pMgr->GetLocalPeerId()); - } - } - -public: - PeerRejoinTest() { ReplicaMgrCallbackBus::Handler::BusConnect(m_gridMate); } - ~PeerRejoinTest() { ReplicaMgrCallbackBus::Handler::BusDisconnect(); } -}; - -TEST_F(PeerRejoinTest, DISABLED_PeerRejoinTest) - { - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - - int frameTime = 10; - int framesToRun = 300; - enum - { - p1, p2, nPeers - }; - - MPSession peers[nPeers]; - MigratableReplica::Ptr migrRep[nPeers]; - NonMigratableReplica::Ptr nonMigrRep[nPeers]; - - // initialize full-mesh P2P session - int basePort = 4427; - for (int i = 0; i < nPeers; ++i) - { - TestCarrierDesc desc; - desc.m_port = basePort + i; - desc.m_enableDisconnectDetection = true; - desc.m_threadUpdateTimeMS = frameTime / 2; - - // initialize replica managers - peers[i].SetTransport(DefaultCarrier::Create(desc, m_gridMate)); - peers[i].AcceptConn(true); - peers[i].SetClient(false); - peers[i].GetReplicaMgr().Init(ReplicaMgrDesc(i + 1 - , peers[i].GetTransport() - , 0 - , i == 0 ? ReplicaMgrDesc::Role_SyncHost : 0 - , frameTime / 2)); - } - - AZ_TracePrintf("GridMate", "\n"); - int frameCount = 0; - while (frameCount < framesToRun) - { - static bool allReady = false; - // establish all connections - if (frameCount < nPeers) - { - for (int i = 0; i < frameCount; ++i) - { - peers[frameCount].GetTransport()->Connect("127.0.0.1", basePort + i); - } - } - - if (!allReady) - { - allReady = true; - for (int i = 0; i < nPeers; ++i) - { - if (!peers[i].GetReplicaMgr().IsReady()) - { - allReady = false; - } - } - if (allReady) - { - AZ_TracePrintf("GridMate", "All peers ready at frame %d\n", frameCount); - } - } - - // perform tests - if (allReady) - { - // add replicas - static bool addReplicas = true; - if (addReplicas) - { - for (int i = 0; i < nPeers; ++i) - { - { - auto rep = Replica::CreateReplica(nullptr); - migrRep[i] = CreateAndAttachReplicaChunk(rep, aznew MyObj()); - peers[i].GetReplicaMgr().AddPrimary(rep); - } - { - auto rep = Replica::CreateReplica(nullptr); - nonMigrRep[i] = CreateAndAttachReplicaChunk(rep, aznew MyObj()); - peers[i].GetReplicaMgr().AddPrimary(rep); - } - } - addReplicas = false; - AZ_TracePrintf("GridMate", "Replicas added at frame %d\n", frameCount); - } - - // disconnect p2 and trigger peer migration - static bool dropP2 = true; - if (frameCount > 50 && dropP2) - { - peers[p2].GetTransport()->Disconnect(AllConnections); - peers[p2].GetReplicaMgr().Shutdown(); - dropP2 = false; - AZ_TracePrintf("GridMate", "Dropped P2 at frame %d\n", frameCount); - } - - // reconnect p2 - static bool reconP2 = true; - if (frameCount > 100 && reconP2) - { - peers[p2].GetReplicaMgr().Init(ReplicaMgrDesc(p2 + 1 - , peers[p2].GetTransport() - , 0 - , 0 - , frameTime / 2)); - peers[p1].GetTransport()->Connect("127.0.0.1", basePort + p2); - peers[p2].GetTransport()->Connect("127.0.0.1", basePort + p1); - reconP2 = false; - AZ_TracePrintf("GridMate", "Reconnected P2 at frame %d\n", frameCount); - } - - // disconnect p2 again - static bool redropP2 = true; - if (frameCount > 150 && redropP2) - { - peers[p2].GetTransport()->Disconnect(AllConnections); - redropP2 = false; - AZ_TracePrintf("GridMate", "Re-Dropped P2 at frame %d\n", frameCount); - } - } - - // tick - int tickPeer = frameCount++ % nPeers; - peers[tickPeer].Update(); - if (peers[tickPeer].GetReplicaMgr().IsInitialized()) - { - peers[tickPeer].GetReplicaMgr().Unmarshal(); - peers[tickPeer].GetReplicaMgr().UpdateReplicas(); - peers[tickPeer].GetReplicaMgr().UpdateFromReplicas(); - peers[tickPeer].GetReplicaMgr().Marshal(); - } - peers[tickPeer].GetTransport()->Update(); - AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(frameTime)); - } - - // clean up - for (int i = 0; i < nPeers; ++i) - { - peers[i].GetReplicaMgr().Shutdown(); - DefaultCarrier::Destroy(peers[i].GetTransport()); - } - } - -class ReplicationSecurityOptionsTest - : public UnitTest::GridMateMPTestFixture - , public ::testing::Test -{ -public: - enum - { - s1, - s2, - s3, - nSessions - }; - - class TestChunk : public ReplicaChunk - { - public: - struct ForwardSourcePeerTrait : public RpcDefaultTraits - { - static const bool s_alwaysForwardSourcePeer = true; - static const bool s_allowNonAuthoritativeRequestRelay = false; - }; - - struct DisableNonAuthoritativeRequestTrait : public RpcAuthoritativeTraits - { - static const bool s_alwaysForwardSourcePeer = true; - }; - - GM_CLASS_ALLOCATOR(TestChunk); - - static const char* GetChunkName() { return "ReplicationSecurityOptionsTest::TestChunk"; } - - TestChunk() - : m_nForwardSourcePeerRpcCallsFromS1("m_nForwardSourcePeerRpcCallsFromS1", 0) - , m_nForwardSourcePeerRpcCallsFromS2("m_nForwardSourcePeerRpcCallsFromS2", 0) - , m_nForwardSourcePeerRpcCallsFromS3("m_nForwardSourcePeerRpcCallsFromS3", 0) - , ForwardSourcePeerRpcFromS1("ForwardSourcePeerRpcFromS1") - , ForwardSourcePeerRpcFromS2("ForwardSourcePeerRpcFromS2") - , ForwardSourcePeerRpcFromS3("ForwardSourcePeerRpcFromS3") - , m_nAuthoritativeOnlyRpcCallsFromS1("m_nAuthoritativeOnlyRpcCallsFromS1", 0) - , m_nAuthoritativeOnlyRpcCallsFromS2("m_nAuthoritativeOnlyRpcCallsFromS2", 0) - , m_nAuthoritativeOnlyRpcCallsFromS3("m_nAuthoritativeOnlyRpcCallsFromS3", 0) - , m_nAuthoritativeOnlyProxyRpcCallsFromS1(0) - , m_nAuthoritativeOnlyProxyRpcCallsFromS2(0) - , m_nAuthoritativeOnlyProxyRpcCallsFromS3(0) - , AuthoritativeOnlyRpcFromS1("AuthoritativeOnlyRpcFromS1") - , AuthoritativeOnlyRpcFromS2("AuthoritativeOnlyRpcFromS2") - , AuthoritativeOnlyRpcFromS3("AuthoritativeOnlyRpcFromS3") - { - } - - bool IsReplicaMigratable() override { return false; } - - bool OnForwardSourcePeerRpcFromS1(const RpcContext& rpcContext) - { - // make sure the requestor is set to s1 - AZ_TEST_ASSERT(rpcContext.m_sourcePeer == s1 + 1); - m_nForwardSourcePeerRpcCallsFromS1.Modify([](int& value) { ++value; return true; }); - return false; - } - - bool OnForwardSourcePeerRpcFromS2(const RpcContext& rpcContext) - { - // make sure the requestor is set to s2 - AZ_TEST_ASSERT(rpcContext.m_sourcePeer == s2 + 1); - // requests to s3 should be blocked in this test - AZ_TEST_ASSERT(GetReplicaManager()->GetLocalPeerId() != s3 + 1); - m_nForwardSourcePeerRpcCallsFromS2.Modify([](int& value) { ++value; return true; }); - return false; - } - - bool OnForwardSourcePeerRpcFromS3(const RpcContext& rpcContext) - { - // make sure the requestor is set to s3 - AZ_TEST_ASSERT(rpcContext.m_sourcePeer == s3 + 1); - // requests to s2 should be blocked in this test - AZ_TEST_ASSERT(GetReplicaManager()->GetLocalPeerId() != s2 + 1); - m_nForwardSourcePeerRpcCallsFromS3.Modify([](int& value) { ++value; return true; }); - return false; - } - - bool OnAuthoritativeOnlyRpcFromS1(const RpcContext& rpcContext) - { - // make sure the requestor is set to s1 - AZ_TEST_ASSERT(rpcContext.m_sourcePeer == s1 + 1); - if (IsPrimary()) - { - m_nAuthoritativeOnlyRpcCallsFromS1.Modify([](int& value) { ++value; return true; }); - } - else - { - ++m_nAuthoritativeOnlyProxyRpcCallsFromS1; - } - return true; - } - - bool OnAuthoritativeOnlyRpcFromS2(const RpcContext& rpcContext) - { - // make sure the requestor is set to s2 - AZ_TEST_ASSERT(rpcContext.m_sourcePeer == s2 + 1); - if (IsPrimary()) - { - m_nAuthoritativeOnlyRpcCallsFromS2.Modify([](int& value) { ++value; return true; }); - } - else - { - ++m_nAuthoritativeOnlyProxyRpcCallsFromS2; - } - return true; - } - - bool OnAuthoritativeOnlyRpcFromS3(const RpcContext& rpcContext) - { - // make sure the requestor is set to s3 - AZ_TEST_ASSERT(rpcContext.m_sourcePeer == s3 + 1); - if (IsPrimary()) - { - m_nAuthoritativeOnlyRpcCallsFromS3.Modify([](int& value) { ++value; return true; }); - } - else - { - ++m_nAuthoritativeOnlyProxyRpcCallsFromS3; - } - return true; - } - - DataSet m_nForwardSourcePeerRpcCallsFromS1; - DataSet m_nForwardSourcePeerRpcCallsFromS2; - DataSet m_nForwardSourcePeerRpcCallsFromS3; - Rpc<>::BindInterface ForwardSourcePeerRpcFromS1; - Rpc<>::BindInterface ForwardSourcePeerRpcFromS2; - Rpc<>::BindInterface ForwardSourcePeerRpcFromS3; - - DataSet m_nAuthoritativeOnlyRpcCallsFromS1; - DataSet m_nAuthoritativeOnlyRpcCallsFromS2; - DataSet m_nAuthoritativeOnlyRpcCallsFromS3; - int m_nAuthoritativeOnlyProxyRpcCallsFromS1; - int m_nAuthoritativeOnlyProxyRpcCallsFromS2; - int m_nAuthoritativeOnlyProxyRpcCallsFromS3; - Rpc<>::BindInterface AuthoritativeOnlyRpcFromS1; - Rpc<>::BindInterface AuthoritativeOnlyRpcFromS2; - Rpc<>::BindInterface AuthoritativeOnlyRpcFromS3; - }; - using TestChunkPtr = AZStd::intrusive_ptr ; -}; - -TEST_F(ReplicationSecurityOptionsTest, DISABLED_ReplicationSecurityOptionsTest) - { - AZ_TracePrintf("GridMate", "\n"); - - // Register test chunks - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - - MPSession sessions[nSessions]; - ReplicaPtr primarys[nSessions]; - - // initialize transport - int basePort = 4427; - for (int i = 0; i < nSessions; ++i) - { - TestCarrierDesc desc; - desc.m_port = basePort + i; - // initialize replica managers - // s2(c)<-->(p)s1(p)<-->(c)s3 - sessions[i].SetTransport(DefaultCarrier::Create(desc, m_gridMate)); - sessions[i].AcceptConn(true); - sessions[i].SetClient(i != s1); - sessions[i].GetReplicaMgr().Init(ReplicaMgrDesc(i + 1, sessions[i].GetTransport(), 0, i == 0 ? ReplicaMgrDesc::Role_SyncHost : 0)); - - ReplicationSecurityOptions options; - options.m_enableStrictSourceValidation = true; - sessions[i].GetReplicaMgr().SetSecurityOptions(options); - } - - // connect s2 to s1 - sessions[s2].GetTransport()->Connect("127.0.0.1", basePort); - - // connect s3 to s1 - sessions[s3].GetTransport()->Connect("127.0.0.1", basePort); - - // main test loop - for (int tick = 0; tick < 1000; ++tick) - { - if (tick == 100) - { - for (int i = 0; i < nSessions; ++i) - { - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().IsReady()); - primarys[i] = Replica::CreateReplica("ReplicationSecurityOptionsTest::TestReplica"); - TestChunkPtr chunk = CreateReplicaChunk(); - primarys[i]->AttachReplicaChunk(chunk); - sessions[i].GetReplicaMgr().AddPrimary(primarys[i]); - } - } - - if (tick == 200) - { - AZ_TEST_START_TRACE_SUPPRESSION; - for (int i = 0; i < nSessions; ++i) - { - sessions[s1].GetReplicaMgr().FindReplica(primarys[i]->GetRepId())->FindReplicaChunk()->ForwardSourcePeerRpcFromS1(); - sessions[s2].GetReplicaMgr().FindReplica(primarys[i]->GetRepId())->FindReplicaChunk()->ForwardSourcePeerRpcFromS2(); - sessions[s3].GetReplicaMgr().FindReplica(primarys[i]->GetRepId())->FindReplicaChunk()->ForwardSourcePeerRpcFromS3(); - } - } - - if (tick == 300) - { - // The previous test should have triggered the following assert twice: - // ReplicaChunk.cpp(449): AZ_Assert(false, "Discarding non-authoritative RPC <%s> because s_allowNonAuthoritativeRequestRelay trait is disabled!", GetDescriptor()->GetRpcName(this, rpc)); - AZ_TEST_STOP_TRACE_SUPPRESSION(2); - - // All chunks should have received the call from the host - AZ_TEST_ASSERT(primarys[s1]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS1 == 1); - AZ_TEST_ASSERT(primarys[s2]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS1 == 1); - AZ_TEST_ASSERT(primarys[s3]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS1 == 1); - - // the host chunk should have received calls from both clients - AZ_TEST_ASSERT(primarys[s1]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS2 == 1); - AZ_TEST_ASSERT(primarys[s1]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS3 == 1); - - // the chunk on s2 should receive its own call but not from s3 - AZ_TEST_ASSERT(primarys[s2]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS2 == 1); - AZ_TEST_ASSERT(primarys[s2]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS3 == 0); - - // the chunk on s3 should receive its own call but not from s2 - AZ_TEST_ASSERT(primarys[s3]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS2 == 0); - AZ_TEST_ASSERT(primarys[s3]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS3 == 1); - - // all datasets should have propagated properly - for (int i = 0; i < nSessions; ++i) - { - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s1]->GetRepId())->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS1.Get() == primarys[s1]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS1.Get()); - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s1]->GetRepId())->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS2.Get() == primarys[s1]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS2.Get()); - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s1]->GetRepId())->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS3.Get() == primarys[s1]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS3.Get()); - - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s2]->GetRepId())->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS1.Get() == primarys[s2]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS1.Get()); - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s2]->GetRepId())->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS2.Get() == primarys[s2]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS2.Get()); - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s2]->GetRepId())->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS3.Get() == primarys[s2]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS3.Get()); - - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s3]->GetRepId())->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS1.Get() == primarys[s3]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS1.Get()); - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s3]->GetRepId())->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS2.Get() == primarys[s3]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS2.Get()); - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s3]->GetRepId())->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS3.Get() == primarys[s3]->FindReplicaChunk()->m_nForwardSourcePeerRpcCallsFromS3.Get()); - } - } - - if (tick == 400) - { - AZ_TEST_START_TRACE_SUPPRESSION; - for (int i = 0; i < nSessions; ++i) - { - sessions[s1].GetReplicaMgr().FindReplica(primarys[i]->GetRepId())->FindReplicaChunk()->AuthoritativeOnlyRpcFromS1(); - sessions[s2].GetReplicaMgr().FindReplica(primarys[i]->GetRepId())->FindReplicaChunk()->AuthoritativeOnlyRpcFromS2(); - sessions[s3].GetReplicaMgr().FindReplica(primarys[i]->GetRepId())->FindReplicaChunk()->AuthoritativeOnlyRpcFromS3(); - } - } - - if (tick == 500) - { - // The previous test should have triggered the following assert six times: - // ReplicaChunk.cpp(444): AZ_Assert(false, "Discarding non-authoritative RPC <%s> because s_allowNonAuthoritativeRequests trait is disabled!", GetDescriptor()->GetRpcName(this, rpc)); - AZ_TEST_STOP_TRACE_SUPPRESSION(6); - - // Each chunk should have received their own AuthoritativeOnlyRpc once. - AZ_TEST_ASSERT(primarys[s1]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS1 == 1); - AZ_TEST_ASSERT(primarys[s2]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS2 == 1); - AZ_TEST_ASSERT(primarys[s3]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS3 == 1); - - // Calls from other nodes should have been discarded. - AZ_TEST_ASSERT(primarys[s1]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS2 == 0); - AZ_TEST_ASSERT(primarys[s1]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS3 == 0); - AZ_TEST_ASSERT(primarys[s2]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS1 == 0); - AZ_TEST_ASSERT(primarys[s2]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS3 == 0); - AZ_TEST_ASSERT(primarys[s3]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS1 == 0); - AZ_TEST_ASSERT(primarys[s3]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS2 == 0); - - // Calls should have successfully propagated to the other 2 proxies - AZ_TEST_ASSERT(sessions[s1].GetReplicaMgr().FindReplica(primarys[s2]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyProxyRpcCallsFromS2 == 1); - AZ_TEST_ASSERT(sessions[s1].GetReplicaMgr().FindReplica(primarys[s3]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyProxyRpcCallsFromS3 == 1); - AZ_TEST_ASSERT(sessions[s2].GetReplicaMgr().FindReplica(primarys[s1]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyProxyRpcCallsFromS1 == 1); - AZ_TEST_ASSERT(sessions[s2].GetReplicaMgr().FindReplica(primarys[s3]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyProxyRpcCallsFromS3 == 1); - AZ_TEST_ASSERT(sessions[s3].GetReplicaMgr().FindReplica(primarys[s1]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyProxyRpcCallsFromS1 == 1); - AZ_TEST_ASSERT(sessions[s3].GetReplicaMgr().FindReplica(primarys[s2]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyProxyRpcCallsFromS2 == 1); - - // all datasets should have propagated properly - for (int i = 0; i < nSessions; ++i) - { - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s1]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS1.Get() == primarys[s1]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS1.Get()); - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s1]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS2.Get() == primarys[s1]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS2.Get()); - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s1]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS3.Get() == primarys[s1]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS3.Get()); - - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s2]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS1.Get() == primarys[s2]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS1.Get()); - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s2]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS2.Get() == primarys[s2]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS2.Get()); - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s2]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS3.Get() == primarys[s2]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS3.Get()); - - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s3]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS1.Get() == primarys[s3]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS1.Get()); - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s3]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS2.Get() == primarys[s3]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS2.Get()); - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().FindReplica(primarys[s3]->GetRepId())->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS3.Get() == primarys[s3]->FindReplicaChunk()->m_nAuthoritativeOnlyRpcCallsFromS3.Get()); - } - } - - // tick everything - for (int i = 0; i < nSessions; ++i) - { - sessions[i].Update(); - sessions[i].GetReplicaMgr().Unmarshal(); - sessions[i].GetReplicaMgr().UpdateReplicas(); - sessions[i].GetReplicaMgr().UpdateFromReplicas(); - sessions[i].GetReplicaMgr().Marshal(); - sessions[i].GetTransport()->Update(); - } - - AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(10)); - } - - - for (int i = 0; i < nSessions; ++i) - { - sessions[i].GetReplicaMgr().Shutdown(); - DefaultCarrier::Destroy(sessions[i].GetTransport()); - } - } - - -/* - *03.25.2015* Typical test results on Core i7 3.4 GHz desktop (with polling): - Release: - Replica update time (msec): avg=2.02, min=2, max=3 (peers=40, replicas=16000, freq=0%, samples=4000) - Replica update time (msec): avg=4.83, min=2, max=12 (peers=40, replicas=16000, freq=10%, samples=4000) - Replica update time (msec): avg=4.73, min=3, max=12 (peers=40, replicas=16000, freq=100%, samples=4000) - DebugOpt: - Replica update time (msec): avg=2.53, min=2, max=5 (peers=40, replicas=16000, freq=0%, samples=4000) - Replica update time (msec): avg=4.21, min=2, max=8 (peers=40, replicas=16000, freq=10%, samples=4000) - Replica update time (msec): avg=5.59, min=3, max=14 (peers=40, replicas=16000, freq=100%, samples=4000) - - - Test results (task based marshaling): - Release: - Replica update time (msec): avg=0.03, min=0, max=1 (peers=40, replicas=16000, freq=0%, samples=4000) - Replica update time (msec): avg=3.94, min=1, max=11 (peers=40, replicas=16000, freq=10%, samples=4000) - Replica update time (msec): avg=5.21, min=4, max=15 (peers=40, replicas=16000, freq=100%, samples=4000) - DebugOpt: - Replica update time (msec): avg=1.00, min=1, max=2 (peers=40, replicas=16000, freq=0%, samples=4000) - Replica update time (msec): avg=4.94, min=1, max=9 (peers=40, replicas=16000, freq=10%, samples=4000) - Replica update time (msec): avg=8.05, min=6, max=15 (peers=40, replicas=16000, freq=100%, samples=4000) -*/ -class DISABLED_ReplicaStressTest - : public UnitTest::GridMateMPTestFixture -{ -public: - class StressTestReplica - : public ReplicaChunk - { - public: - GM_CLASS_ALLOCATOR(StressTestReplica); - typedef AZStd::intrusive_ptr Ptr; - static const char* GetChunkName() { return "StressTestReplica"; } - - StressTestReplica() - : m_data("Data") - { - } - - bool IsReplicaMigratable() override - { - return false; - } - - bool m_changing; - DataSet m_data; - }; - - static const size_t NUM_PEERS = 40; - static const size_t NUM_REPLICAS_PER_PEER = 400; - static const int FRAME_TIME = 5; - static const int BASE_PORT = 44270; - - // TODO: Reduce the size or disable the test for platforms which can't allocate 2 GiB - DISABLED_ReplicaStressTest() - : UnitTest::GridMateMPTestFixture(2000u * 1024u * 1024u) - {} - - void UpdateReplica(MPSession& session) - { - session.GetReplicaMgr().Unmarshal(); - session.GetReplicaMgr().UpdateReplicas(); - - session.GetReplicaMgr().UpdateFromReplicas(); - session.GetReplicaMgr().Marshal(); - } - - void Wait(MPSession* sessions, vector >& replicas, int numFrames, int frameTime) - { - (void)replicas; - while (numFrames--) - { - for (size_t i = 0; i < NUM_PEERS; ++i) - { - sessions[i].Update(); - UpdateReplica(sessions[i]); - } - - for (size_t i = 0; i < NUM_PEERS; ++i) - { - sessions[i].GetTransport()->Update(); - } - - AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(frameTime)); - } - } - - // freq is 0..1, 0.0 - no dirty replicas per tick, 1.0 - all replicas are dirty every tick, 0.5 - 50% of replicas per tick - void TestReplicas(MPSession* sessions, vector >& replicas, int numFrames, int frameTime, double freq) - { - AZStd::chrono::system_clock::duration minUpdateTime(AZStd::chrono::system_clock::duration::max()); - AZStd::chrono::system_clock::duration maxUpdateTime(AZStd::chrono::system_clock::duration::min()); - AZStd::chrono::system_clock::duration sumSamples(AZStd::chrono::system_clock::duration::zero()); - unsigned long long numSamples = 0; - - int count = 0; - while (numFrames--) - { - MarkChanging(replicas, freq); - - for (auto& r : replicas) - { - if (r.second->m_changing) - { - r.second->m_data.Set(count++); - } - } - - for (size_t i = 0; i < NUM_PEERS; ++i) - { - sessions[i].Update(); - AZStd::chrono::system_clock::time_point beforeUpdateTime = AZStd::chrono::system_clock::now(); - UpdateReplica(sessions[i]); - auto updateTime = AZStd::chrono::system_clock::now() - beforeUpdateTime; - minUpdateTime = AZStd::min(updateTime, minUpdateTime); - maxUpdateTime = AZStd::max(updateTime, maxUpdateTime); - sumSamples += updateTime; - ++numSamples; - } - - for (size_t i = 0; i < NUM_PEERS; ++i) - { - sessions[i].GetTransport()->Update(); - } - - AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(frameTime)); - } - - AZ_TEST_ASSERT(numSamples > 0); - - AZ_Printf("GridMate", "\n\n----------------\nReplica update time (msec): avg=%.2f, min=%.2f, max=%.2f (peers=%d, replicas=%d, freq=%d%%, samples=%llu)\n", - static_cast(AZStd::chrono::duration_cast(sumSamples).count()) / static_cast(numSamples), - AZStd::chrono::duration_cast(minUpdateTime).count() / 1000.0, - AZStd::chrono::duration_cast(maxUpdateTime).count() / 1000.0, - NUM_PEERS, - replicas.size(), - static_cast(freq * 100.0), - numSamples); - } - - bool ConnectPeers(MPSession* sessions, int frameTime) - { - size_t frameCount = 0; - bool allReady = false; - size_t maxFramesToReady = NUM_PEERS + 100; // this is to avoid infinite loop waiting for all peers to become ready in case some peer cannot connect - vector > replicas; - - while (!allReady && frameCount < maxFramesToReady) - { - // establish all connections - if (frameCount < NUM_PEERS) - { - for (size_t i = 0; i < frameCount; ++i) - { - sessions[frameCount].GetTransport()->Connect("127.0.0.1", BASE_PORT + static_cast(i)); - } - } - - allReady = true; - for (size_t i = 0; i < NUM_PEERS; ++i) - { - if (!sessions[i].GetReplicaMgr().IsReady()) - { - allReady = false; - break; - } - } - if (allReady) - { - AZ_Printf("GridMate", "All peers ready at frame %d\n", frameCount); - } - - Wait(sessions, replicas, 1, frameTime); - ++frameCount; - } - - return allReady; - } - - virtual void RunStressTests(MPSession* sessions, vector >& replicas) - { - // testing 3 cases & waiting for system to settle in between - //TestProfiler::StartProfiling(); - Wait(sessions, replicas, 50, FRAME_TIME); - //TestProfiler::PrintProfilingTotal("GridMate"); - - Wait(sessions, replicas, 20, FRAME_TIME); - //TestProfiler::StartProfiling(); - TestReplicas(sessions, replicas, 100, FRAME_TIME, 0.0); // no replicas are dirty - //TestProfiler::PrintProfilingTotal("GridMate"); - - Wait(sessions, replicas, 20, FRAME_TIME); - //TestProfiler::StartProfiling(); - TestReplicas(sessions, replicas, 1, FRAME_TIME, 1.0); // single burst dirty replicas - Wait(sessions, replicas, 2, FRAME_TIME); - //TestProfiler::PrintProfilingTotal("GridMate"); - - Wait(sessions, replicas, 20, FRAME_TIME); - //TestProfiler::StartProfiling(); - TestReplicas(sessions, replicas, 100, FRAME_TIME, 0.1); // 10% of replicas are marked dirty every frame - //TestProfiler::PrintProfilingTotal("GridMate"); - - Wait(sessions, replicas, 20, FRAME_TIME); - //TestProfiler::StartProfiling(); - TestReplicas(sessions, replicas, 100, FRAME_TIME, 1.0); // every replica is marked dirty every frame - //TestProfiler::PrintProfilingTotal("GridMate"); - //TestProfiler::PrintProfilingSelf("GridMate"); - - //TestProfiler::StopProfiling(); - } - - virtual void MarkChanging(vector >& replicas, double freq) - { - AZ::Sfmt& sfmt = AZ::Sfmt::GetInstance(); - for (auto& r : replicas) - { - r.second->m_changing = sfmt.RandR32_2() <= freq; - } - } - - void run() - { - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - - MPSession sessions[NUM_PEERS]; - vector > replicas; - - replicas.reserve(NUM_PEERS * NUM_REPLICAS_PER_PEER); - - for (unsigned int i = 0; i < NUM_PEERS; ++i) - { - TestCarrierDesc desc; - desc.m_port = BASE_PORT + i; - desc.m_enableDisconnectDetection = false; - - // initialize replica managers - sessions[i].SetTransport(DefaultCarrier::Create(desc, m_gridMate)); - sessions[i].AcceptConn(true); - sessions[i].SetClient(false); - sessions[i].GetReplicaMgr().Init(ReplicaMgrDesc(i + 1 - , sessions[i].GetTransport() - , 0 - , i == 0 ? ReplicaMgrDesc::Role_SyncHost : 0)); - } - - bool allReady = ConnectPeers(sessions, FRAME_TIME); - - AZ_TEST_ASSERT(allReady); - - for (auto& session : sessions) - { - for (size_t j = 0; j < NUM_REPLICAS_PER_PEER; ++j) - { - auto rep = Replica::CreateReplica(nullptr); - auto chunk = CreateAndAttachReplicaChunk(rep); - replicas.push_back(AZStd::make_pair(rep, chunk)); - session.GetReplicaMgr().AddPrimary(rep); - } - } - - RunStressTests(sessions, replicas); - - // clean up - for (auto& s : sessions) - { - s.GetReplicaMgr().Shutdown(); - DefaultCarrier::Destroy(s.GetTransport()); - } - } -}; - -/* - This test performs updates to the same replicas every frame unlike stress test that picks random replicas every frame - *03.25.2015* Typical test results on Core i7 3.4 GHz desktop (with polling): - Release: - Replica update time (msec): avg=2.54, min=2, max=9 (peers=40, replicas=16000, freq=10%, samples=4000) - Replica update time (msec): avg=3.15, min=2, max=7 (peers=40, replicas=16000, freq=50%, samples=4000) - DebugOpt: - Replica update time (msec): avg=3.35, min=3, max=8 (peers=40, replicas=16000, freq=10%, samples=4000) - Replica update time (msec): avg=4.45, min=3, max=10 (peers=40, replicas=16000, freq=50%, samples=4000) - - Test results (task based marshaling): - Release: - Replica update time (msec): avg=1.62, min=1, max=10 (peers=40, replicas=16000, freq=10%, samples=4000) - Replica update time (msec): avg=4.38, min=2, max=15 (peers=40, replicas=16000, freq=50%, samples=4000) - DebugOpt: - Replica update time (msec): avg=2.01, min=1, max=5 (peers=40, replicas=16000, freq=10%, samples=4000) - Replica update time (msec): avg=4.61, min=3, max=10 (peers=40, replicas=16000, freq=50%, samples=4000) -*/ -class DISABLED_ReplicaStableStressTest - : public DISABLED_ReplicaStressTest -{ -public: - - void MarkChanging(vector >& replicas, double freq) override - { - (void)replicas; - (void)freq; - } - - void RunStressTests(MPSession* sessions, vector >& replicas) override - { - DISABLED_ReplicaStressTest::MarkChanging(replicas, 0.1); // picks 10% of replicas - Wait(sessions, replicas, 20, FRAME_TIME); - //TestProfiler::StartProfiling(); - TestReplicas(sessions, replicas, 100, FRAME_TIME, 0.1); - /*TestProfiler::PrintProfilingTotal("GridMate"); - TestProfiler::PrintProfilingSelf("GridMate");*/ - - DISABLED_ReplicaStressTest::MarkChanging(replicas, 0.5); // picks 50% of replicas - Wait(sessions, replicas, 20, FRAME_TIME); - //TestProfiler::StartProfiling(); - TestReplicas(sessions, replicas, 100, FRAME_TIME, 0.5); - /*TestProfiler::PrintProfilingTotal("GridMate"); - TestProfiler::PrintProfilingSelf("GridMate"); - - TestProfiler::StopProfiling();*/ - } -}; - - -/* -* This test verifies bandwidth limiter. The test takes ~2 minutes. It sends ~7k/s of data with a limit of 4k with the following pattern: -* -* -* time | 10s | 10s | 20s | 20s | 10s | 20s | -* +-----+-----+----------+----------+-----+----------+ -* sendrate | 0k | 7k | 7k | 1.5k | 7k | 7k | -* | | | | | | | -* expected |none |brst | capped |under cap |brst | capped | -* -*/ -class DISABLED_ReplicaBandiwdthTest - : public UnitTest::GridMateMPTestFixture -{ -public: - - class BandwidthTestChunk - : public ReplicaChunk - { - public: - GM_CLASS_ALLOCATOR(BandwidthTestChunk); - typedef AZStd::intrusive_ptr Ptr; - static const char* GetChunkName() { return "BandwidthTestChunk"; } - - BandwidthTestChunk() - : m_value("Value") - { - Touch(); - } - - void Touch() - { - AZStd::string randomStr; - for (unsigned i = 0; i < k_strSize; ++i) - { - randomStr += 'a' + (rand() % 26); - } - m_value.Set(randomStr); - } - - bool IsReplicaMigratable() override { return false; } - - static const unsigned k_strSize = 64; - DataSet m_value; - }; - - void run() - { - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - - MPSession sessions[nSessions]; - // initialize transport - int basePort = 4427; - for (int i = 0; i < nSessions; ++i) - { - TestCarrierDesc desc; - desc.m_port = basePort + i; - desc.m_enableDisconnectDetection = false; - sessions[i].SetClient(i != sHost); - sessions[i].SetTransport(DefaultCarrier::Create(desc, m_gridMate)); - sessions[i].AcceptConn(true); - sessions[i].GetReplicaMgr().Init(ReplicaMgrDesc(i + 1, sessions[i].GetTransport(), 0, i == 0 ? ReplicaMgrDesc::Role_SyncHost : 0)); - } - - // adding replicas for the host - static const size_t k_numReplicas = 10; - BandwidthTestChunk::Ptr chunks[k_numReplicas]; - for (size_t i = 0; i < k_numReplicas; ++i) - { - auto rep = Replica::CreateReplica(nullptr); - chunks[i] = CreateAndAttachReplicaChunk(rep); - sessions[sHost].GetReplicaMgr().AddPrimary(rep); - } - - // connect to host - for (size_t i = 0; i < nSessions; ++i) - { - if (i == sHost) - { - continue; - } - - sessions[i].GetTransport()->Connect("127.0.0.1", basePort); - } - - static const int k_delayMS = 100; // tick time - - bool isDone = false; - size_t numReplicasToChange = 0; - - /* - 10 replicas x ~70 bytes per replica x 10 frames per second =~ 7000 bytes per second - Will try to cutoff it at 4k per sec - */ - static const unsigned k_sendRateLimit = 4000; - - unsigned tickNo = 0; - AZ_Printf("GridMate", "Created %d sessions.\n", nSessions); - while (!isDone) - { - for (size_t i = 0; i < numReplicasToChange; ++i) - { - chunks[i]->Touch(); - } - - for (auto connId : sessions[sHost].m_connections) - { - if (connId == InvalidConnectionID) - { - continue; - } - - TrafficControl::Statistics lastSecEffective; - sessions[sHost].GetTransport()->QueryStatistics(connId, nullptr, nullptr, &lastSecEffective); - m_measurements[connId].m_sendData.push_back(lastSecEffective.m_dataSend); - - if (!(tickNo % 30)) // printout every 3 seconds - { - AZ_Printf("GridMate", " - effective sendRate=%.2f KB\n", lastSecEffective.m_dataSend / 1000.f); - } - //AZ_TracePrintf("GridMate", "%d\n", lastSecEffective.m_dataSend); - } - - - // ======================================================= - // Actual tests - // ======================================================= - if (tickNo == 100) // things should've settle at this point, session is established, initial replicas are sent - { - for (size_t i = 0; i < AZ_ARRAY_SIZE(sessions); ++i) - { - AZ_TEST_ASSERT(sessions[i].GetReplicaMgr().IsReady()); - } - - numReplicasToChange = k_numReplicas; - ResetMeasurements(); - AZ_Printf("GridMate", "Starting replica data send. Unlimited.\n"); - } - else if (tickNo == 200) - { - // test if initial unlimited burst was allowed - for (const auto& m : m_measurements) - { - AZ_TEST_ASSERT(m.second.Max() > k_sendRateLimit * 1.5f); - } - ResetMeasurements(); - sessions[sHost].GetReplicaMgr().SetSendLimit(k_sendRateLimit); - AZ_Printf("GridMate", "Limited by SendLimit=%d Bps.\n", sessions[sHost].GetReplicaMgr().GetSendLimit()); - } - else if (tickNo == 400) - { - // checking if bandwidth was rate limited - for (const auto& m : m_measurements) - { - if (!(m.second.Mean() < k_sendRateLimit * 1.1f)) - { - AZ_Printf("GridMate", "rate mean: %f limit %d\n", m.second.Mean(), sessions[sHost].GetReplicaMgr().GetSendLimit()) - } - AZ_TEST_ASSERT(m.second.Mean() < k_sendRateLimit * 1.1f); // allowing 10% margin of error - } - ResetMeasurements(); - numReplicasToChange = k_numReplicas / 4; // reducing outgoing traffic 1/4 - AZ_Printf("GridMate", "Reduced send rate...\n"); - } - else if (tickNo == 600) - { - // checking if traffic below the limit - for (const auto& m : m_measurements) - { - AZ_TEST_ASSERT(m.second.Mean() < k_sendRateLimit * 0.7f); - } - ResetMeasurements(); - sessions[sHost].GetReplicaMgr().SetSendLimit(0); // returning to unlimited send rate - numReplicasToChange = k_numReplicas; - AZ_Printf("GridMate", "Full send rate...\n"); - } - else if (tickNo == 700) - { - // test if burst allowed - for (const auto& m : m_measurements) - { - AZ_TEST_ASSERT(m.second.Max() > k_sendRateLimit * 1.5f); - } - ResetMeasurements(); - sessions[sHost].GetReplicaMgr().SetSendLimit(k_sendRateLimit); - AZ_Printf("GridMate", "Limited by SendLimit=%d Bps.\n", sessions[sHost].GetReplicaMgr().GetSendLimit()); - } - else if (tickNo == 900) - { - // checking if bandwidth was limited - for (const auto& m : m_measurements) - { - AZ_TEST_ASSERT(m.second.Mean() < k_sendRateLimit * 1.1f); // allowing 10% jerking around limit - } - - isDone = true; - } - - // ======================================================= - // Tick everything - // ======================================================= - for (size_t i = 0; i < nSessions; ++i) - { - sessions[i].Update(); - sessions[i].GetReplicaMgr().Unmarshal(); - } - - for (size_t i = 0; i < nSessions; ++i) - { - sessions[i].GetReplicaMgr().UpdateReplicas(); - } - - for (size_t i = 0; i < nSessions; ++i) - { - sessions[i].GetReplicaMgr().UpdateFromReplicas(); - sessions[i].GetReplicaMgr().Marshal(); - } - - for (size_t i = 0; i < nSessions; ++i) - { - sessions[i].GetTransport()->Update(); - } - - ++tickNo; - AZStd::this_thread::sleep_for(AZStd::chrono::milliseconds(k_delayMS)); - } - - - for (int i = 0; i < nSessions; ++i) - { - sessions[i].GetReplicaMgr().Shutdown(); - DefaultCarrier::Destroy(sessions[i].GetTransport()); - } - } - - void ResetMeasurements() - { - for (auto& m : m_measurements) - { - m.second.Reset(); - } - } - - struct Measurement - { - unsigned int Mean() const - { - AZ_Assert(!m_sendData.empty(), "No data!"); - unsigned int sum = 0; - for (auto val : m_sendData) - { - sum += val; - } - - return sum / static_cast(m_sendData.size()); - } - - unsigned int Max() const - { - unsigned int curMax = 0; - for (auto val : m_sendData) - { - curMax = AZStd::GetMax(curMax, val); - } - - return curMax; - } - - void Reset() - { - m_sendData.clear(); - } - - vector m_sendData; // data sent per second - }; - - enum - { - sHost, sClient1, nSessions - }; - unordered_map m_measurements; -}; - } // namespace UnitTest GM_TEST_SUITE(ReplicaSuite) GM_TEST(InterpolatorTest) - -#if !defined(AZ_DEBUG_BUILD) // these tests are a little slow for debug -GM_TEST(DISABLED_ReplicaBandiwdthTest) -GM_TEST(DISABLED_ReplicaStressTest) -GM_TEST(DISABLED_ReplicaStableStressTest) -#endif - GM_TEST_SUITE_END() diff --git a/Code/Framework/GridMate/Tests/ReplicaBehavior.cpp b/Code/Framework/GridMate/Tests/ReplicaBehavior.cpp index 86f9f4605b..67b5e49df7 100644 --- a/Code/Framework/GridMate/Tests/ReplicaBehavior.cpp +++ b/Code/Framework/GridMate/Tests/ReplicaBehavior.cpp @@ -18,7 +18,6 @@ #include #include #include -#include #include using namespace GridMate; @@ -584,837 +583,5 @@ namespace ReplicaBehavior { AZStd::array m_sessions; }; - /* - * A hook to intercept the payload size of a replica and it's contents. - */ - class ReplicaDrillerHook - : public Debug::ReplicaDrillerBus::Handler - { - public: - ReplicaDrillerHook() - { - } - - void OnSendReplicaEnd(Replica* /*replica*/, const void* /*data*/, size_t len) override - { - m_replicaLengths.push_back(len); - } - - void ResetCounts([[maybe_unused]] bool trace = false) - { -#if defined(AZ_ENABLE_TRACING) - if (trace && m_replicaLengths.size() > 0) - { - AZ_TracePrintf("GridMate", "Driller saw replicas with the following byte sizes:\n"); - for (auto length : m_replicaLengths) - { - AZ_TracePrintf("GridMate", "\t\t\t %d \n", length); - } - } -#endif - - m_replicaLengths.clear(); - } - - AZStd::vector m_replicaLengths; - }; - - template - class FilteredHook : public ReplicaDrillerHook - { - public: - void OnSendReplicaEnd(Replica* replica, const void* /*data*/, size_t len) override - { - if (ContainsChunkTypeWeWant(replica)) - { - m_replicaLengths.push_back(len); - } - } - - private: - bool ContainsChunkTypeWeWant(Replica* replica) const - { - auto numChunks = replica->GetNumChunks(); - for (size_t i = 0; i < numChunks; i++) - { - auto chunk = replica->GetChunkByIndex(i); - if (chunk->GetDescriptor()->GetChunkName() == ReplicaChunkType::GetChunkName()) - { - return true; - } - } - - return false; - } - }; - - /* - * The most basic functionality test for sending datasets that have a default value and have not yet been modified - * from their constructor values. - * - * This is a simple sanity check to ensure the logic sends the update when it's necessary. - */ - class Replica_DontSendDataSets_WithNoDiffFromCtorData - : public SimpleBehaviorTest - { - public: - Replica_DontSendDataSets_WithNoDiffFromCtorData() - : m_replicaIdDefault(InvalidReplicaId), m_replicaIdModified(InvalidReplicaId) - { - } - - enum - { - sHost, - s2, - nSessions - }; - - int GetNumSessions() override { return nSessions; } - - void PreConnect() override - { - m_driller.BusConnect(); - { - ReplicaPtr replica = Replica::CreateReplica(nullptr); - - auto chunk = CreateAndAttachReplicaChunk(replica); - AZ_TEST_ASSERT(chunk); - AZ_TEST_ASSERT(chunk->Data1.IsDefaultValue()); - AZ_TEST_ASSERT(chunk->Data2.IsDefaultValue()); - - m_replicaIdDefault = m_sessions[sHost].GetReplicaMgr().AddPrimary(replica); - } - } - - const int ExpectedReplicaSizeWithDefaults = 37; - const int ExpectedReplicaSizeWithNonDefaults = 46; - - TestStatus Tick(int tick) override - { - switch (tick) - { - case 20: - { - { - ReplicaPtr rep = m_sessions[s2].GetReplicaMgr().FindReplica(m_replicaIdDefault); - AZ_TEST_ASSERT(rep); - - auto chunk = rep->FindReplicaChunk(); - AZ_TEST_ASSERT(chunk); - - auto replicaSize = m_driller.m_replicaLengths[0]; - AZ_TEST_ASSERT(replicaSize == ExpectedReplicaSizeWithDefaults); - m_driller.ResetCounts(); - } - // create another replica with non-default values - { - ReplicaPtr replica = Replica::CreateReplica(nullptr); - - auto chunk = CreateAndAttachReplicaChunk(replica); - AZ_TEST_ASSERT(chunk); - - AZ_TEST_ASSERT(chunk->Data1.IsDefaultValue()); - AZ_TEST_ASSERT(chunk->Data2.IsDefaultValue()); - chunk->Data1.Set(4242); - chunk->Data2.Set(4242); - AZ_TEST_ASSERT(!chunk->Data1.IsDefaultValue()); - AZ_TEST_ASSERT(!chunk->Data2.IsDefaultValue()); - - m_replicaIdModified = m_sessions[sHost].GetReplicaMgr().AddPrimary(replica); - } - break; - } - case 40: - { - { - ReplicaPtr rep = m_sessions[s2].GetReplicaMgr().FindReplica(m_replicaIdModified); - AZ_TEST_ASSERT(rep); - - auto chunk = rep->FindReplicaChunk(); - AZ_TEST_ASSERT(chunk); - - auto replicaSize = m_driller.m_replicaLengths[0]; - AZ_TEST_ASSERT(replicaSize == ExpectedReplicaSizeWithNonDefaults); - m_driller.ResetCounts(); - - // check that non-default values are set for the dataset - { - AZ_TEST_ASSERT(!chunk->Data1.IsDefaultValue()); - auto value = chunk->Data1.Get(); - AZ_TEST_ASSERT(value == 4242); - } - { - AZ_TEST_ASSERT(!chunk->Data2.IsDefaultValue()); - auto value = chunk->Data2.Get(); - AZ_TEST_ASSERT(value == 4242); - } - } - m_driller.ResetCounts(true); - break; - } - case 45: - { - { - m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaIdDefault)->Destroy(); - m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaIdModified)->Destroy(); - } - break; - } - case 50: - return TestStatus::Completed; - default: - break; - } - return TestStatus::Running; - } - - ReplicaId m_replicaIdDefault; - ReplicaId m_replicaIdModified; - FilteredHook m_driller; - }; - - TEST(Replica_DontSendDataSets_WithNoDiffFromCtorData, DISABLED_Replica_DontSendDataSets_WithNoDiffFromCtorData) - { - Replica_DontSendDataSets_WithNoDiffFromCtorData tester; - tester.run(); - } - - /* - * This test checks the actual size of the replica as marshalled in the binary payload. - * The assessment of the payload size is done using driller EBus. - */ - class ReplicaDefaultDataSetDriller - : public SimpleBehaviorTest - { - public: - ReplicaDefaultDataSetDriller() - : m_replicaId(InvalidReplicaId) - { - } - - enum - { - sHost, - s2, - nSessions - }; - - int GetNumSessions() override { return nSessions; } - - static const int NonDefaultValue = 4242; - - void PreConnect() override - { - m_driller.BusConnect(); - - ReplicaPtr replica = Replica::CreateReplica(nullptr); - LargeChunkWithDefaults* chunk = CreateAndAttachReplicaChunk(replica); - AZ_TEST_ASSERT(chunk); - - m_replicaId = m_sessions[sHost].GetReplicaMgr().AddPrimary(replica); - } - - ~ReplicaDefaultDataSetDriller() override - { - m_driller.BusDisconnect(); - } - - TestStatus Tick(int tick) override - { - switch (tick) - { - case 10: - { - auto rep = m_sessions[s2].GetReplicaMgr().FindReplica(m_replicaId); - AZ_TEST_ASSERT(rep); - - m_driller.ResetCounts(); - - break; - } - case 15: - { - ReplicaPtr replica = m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaId); - auto chunk = replica->FindReplicaChunk(); - int nonDefaultValue = NonDefaultValue; - auto touch = [nonDefaultValue](DataSet& dataSet) { dataSet.Set(nonDefaultValue); }; - touch(chunk->Data1); - touch(chunk->Data2); - touch(chunk->Data3); - - m_driller.ResetCounts(); - - break; - } - case 20: - { - auto repLengths = m_driller.m_replicaLengths; - m_driller.ResetCounts(); - - // check exact expected sizes - const auto countUnreliable = 4; - const auto countReliable = 1; - const auto expectedReplicaSize = 22; - - AZ_TEST_ASSERT(repLengths.size() == countUnreliable + countReliable); - for (auto length : repLengths) - { - AZ_TEST_ASSERT(length == expectedReplicaSize); - } - - m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaId)->Destroy(); - break; - } - case 25: - { - return TestStatus::Completed; - } - default: - break; - } - return TestStatus::Running; - } - - ReplicaDrillerHook m_driller; - ReplicaId m_replicaId; - }; - - const int ReplicaDefaultDataSetDriller::NonDefaultValue; - - TEST(ReplicaDefaultDataSetDriller, DISABLED_ReplicaDefaultDataSetDriller) - { - ReplicaDefaultDataSetDriller tester; - tester.run(); - } - - /* - * This test checks the actual size of the replica as marshalled in the binary payload. - * The assessment of the payload size is done using driller EBus. - */ - class Replica_ComparePackingBoolsVsU8 - : public SimpleBehaviorTest - { - public: - Replica_ComparePackingBoolsVsU8() - : m_replicaBoolsId(InvalidReplicaId) - , m_replicaU8Id(InvalidReplicaId) - { - } - - enum - { - sHost, - s2, - nSessions - }; - - int GetNumSessions() override { return nSessions; } - - void PreConnect() override - { - m_driller.BusConnect(); - - ReplicaPtr replica1 = Replica::CreateReplica(nullptr); - ChunkWithBools* chunk1 = CreateAndAttachReplicaChunk(replica1); - AZ_TEST_ASSERT(chunk1); - - m_replicaBoolsId = m_sessions[sHost].GetReplicaMgr().AddPrimary(replica1); - - ReplicaPtr replica2 = Replica::CreateReplica(nullptr); - ChunkWithShortInts* chunk2 = CreateAndAttachReplicaChunk(replica2); - AZ_TEST_ASSERT(chunk2); - - m_replicaU8Id = m_sessions[sHost].GetReplicaMgr().AddPrimary(replica2); - } - - ~Replica_ComparePackingBoolsVsU8() override - { - m_driller.BusDisconnect(); - } - - TestStatus Tick(int tick) override - { - switch (tick) - { - case 10: - { - auto rep1 = m_sessions[s2].GetReplicaMgr().FindReplica(m_replicaBoolsId); - AZ_TEST_ASSERT(rep1); - auto rep2 = m_sessions[s2].GetReplicaMgr().FindReplica(m_replicaU8Id); - AZ_TEST_ASSERT(rep2); - break; - } - case 15: - { - // we have to poke the values so that they become non-default - { - ReplicaPtr replica = m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaBoolsId); - auto chunk = replica->FindReplicaChunk(); - - auto touch = [](DataSet& dataSet) { dataSet.Set(true); }; - touch(chunk->Data1); - touch(chunk->Data2); - touch(chunk->Data3); - touch(chunk->Data4); - touch(chunk->Data5); - touch(chunk->Data6); - touch(chunk->Data7); - touch(chunk->Data8); - touch(chunk->Data9); - touch(chunk->Data10); - } - { - ReplicaPtr replica = m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaU8Id); - auto chunk = replica->FindReplicaChunk(); - - auto touch = [](DataSet& dataSet) { dataSet.Set(42); }; - touch(chunk->Data1); - touch(chunk->Data2); - touch(chunk->Data3); - touch(chunk->Data4); - touch(chunk->Data5); - touch(chunk->Data6); - touch(chunk->Data7); - touch(chunk->Data8); - touch(chunk->Data9); - touch(chunk->Data10); - } - m_driller.ResetCounts(); - - break; - } - case 30: - { - auto repLengths = m_driller.m_replicaLengths; - m_driller.ResetCounts(); - - // check exact expected sizes - const auto expectedReplicaSizeWithBools = 12; - const auto expectedReplicaSizeWithShortInts = 20; - - AZ_TEST_ASSERT(repLengths.size() >= 2); - AZ_TEST_ASSERT(AZStd::find(repLengths.begin(), repLengths.end(), expectedReplicaSizeWithBools)); - AZ_TEST_ASSERT(AZStd::find(repLengths.begin(), repLengths.end(), expectedReplicaSizeWithShortInts)); - - m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaBoolsId)->Destroy(); - m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaU8Id)->Destroy(); - break; - } - case 35: - { - //auto boolDatasetSize = m_driller.m_boolChunkLengths[1]; - //auto u8DatasetSize = m_driller.m_u8ChunkLengths[1]; - //AZ_TEST_ASSERT(boolDatasetSize < u8DatasetSize); // Observed example: 5bytes < 13bytes - - return TestStatus::Completed; - } - default: - break; - } - return TestStatus::Running; - } - - ReplicaDrillerHook m_driller; - ReplicaId m_replicaBoolsId; - ReplicaId m_replicaU8Id; - }; - - TEST(Replica_ComparePackingBoolsVsU8, DISABLED_Replica_ComparePackingBoolsVsU8) - { - Replica_ComparePackingBoolsVsU8 tester; - tester.run(); - } - - class CheckDataSetStreamIsntWrittenMoreThanNecessary - : public SimpleBehaviorTest - { - public: - CheckDataSetStreamIsntWrittenMoreThanNecessary() - : m_replicaId(InvalidReplicaId) - { - } - - enum - { - sHost, - s2, - nSessions - }; - - int GetNumSessions() override { return nSessions; } - - static const int NonDefaultValue = 4242; - - void PreConnect() override - { - m_driller.BusConnect(); - - ReplicaPtr replica = Replica::CreateReplica(nullptr); - auto chunk = CreateAndAttachReplicaChunk(replica); - AZ_TEST_ASSERT(chunk); - - m_replicaId = m_sessions[sHost].GetReplicaMgr().AddPrimary(replica); - } - - ~CheckDataSetStreamIsntWrittenMoreThanNecessary() override - { - m_driller.BusDisconnect(); - } - - CustomMarshalerTestChunk::Ptr GetHostChunk() - { - ReplicaPtr replica = m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaId); - auto chunk = replica->FindReplicaChunk(); - - return chunk; - } - - TestStatus Tick(int tick) override - { - switch (tick) - { - case 10: - { - auto rep = m_sessions[s2].GetReplicaMgr().FindReplica(m_replicaId); - AZ_TEST_ASSERT(rep); - break; - } - case 15: - { - auto chunk = GetHostChunk(); - //chunk->Data1.Set(CustomInt(41)); - - const auto& m = chunk->Data1.GetMarshaler(); - // Only the initial setup call should have occurred - AZ_TEST_ASSERT(m.m_marshalCalls == 1); - m.m_marshalCalls = 0; - m_driller.ResetCounts(); - - break; - } - case 42: - { - auto chunk = GetHostChunk(); - const auto& m = chunk->Data1.GetMarshaler(); - // No reason for any new calls to occur - AZ_TEST_ASSERT(m.m_marshalCalls == 0); - - m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaId)->Destroy(); - break; - } - case 45: - { - return TestStatus::Completed; - } - default: - break; - } - return TestStatus::Running; - } - - ReplicaDrillerHook m_driller; - ReplicaId m_replicaId; - }; - - TEST(CheckDataSetStreamIsntWrittenMoreThanNecessary, DISABLED_CheckDataSetStreamIsntWrittenMoreThanNecessary) - { - CheckDataSetStreamIsntWrittenMoreThanNecessary tester; - tester.run(); - } - - class CheckDataSetStreamIsntWrittenMoreThanNecessaryOnceDirty - : public SimpleBehaviorTest - { - public: - CheckDataSetStreamIsntWrittenMoreThanNecessaryOnceDirty() - : m_replicaId(InvalidReplicaId) - { - } - - enum - { - sHost, - s2, - nSessions - }; - - int GetNumSessions() override { return nSessions; } - - static const int NonDefaultValue = 4242; - - void PreConnect() override - { - m_driller.BusConnect(); - - ReplicaPtr replica = Replica::CreateReplica(nullptr); - auto chunk = CreateAndAttachReplicaChunk(replica); - AZ_TEST_ASSERT(chunk); - - m_replicaId = m_sessions[sHost].GetReplicaMgr().AddPrimary(replica); - } - - ~CheckDataSetStreamIsntWrittenMoreThanNecessaryOnceDirty() override - { - m_driller.BusDisconnect(); - } - - CustomMarshalerTestChunk::Ptr GetHostChunk() - { - ReplicaPtr replica = m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaId); - auto chunk = replica->FindReplicaChunk(); - - return chunk; - } - - TestStatus Tick(int tick) override - { - switch (tick) - { - case 10: - { - auto rep = m_sessions[s2].GetReplicaMgr().FindReplica(m_replicaId); - AZ_TEST_ASSERT(rep); - break; - } - case 15: - { - auto chunk = GetHostChunk(); - chunk->Data1.Set(CustomInt(41)); - - const auto& m = chunk->Data1.GetMarshaler(); - // Only the initial setup call - AZ_TEST_ASSERT(m.m_marshalCalls == 1); - m.m_marshalCalls = 0; - m_driller.ResetCounts(); - - break; - } - case 42: - { - auto chunk = GetHostChunk(); - const auto& m = chunk->Data1.GetMarshaler(); - AZ_TEST_ASSERT(m.m_marshalCalls == 6 /* 5 unreliables + 1 reliable */); - - m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaId)->Destroy(); - break; - } - case 45: - { - return TestStatus::Completed; - } - default: - break; - } - return TestStatus::Running; - } - - ReplicaDrillerHook m_driller; - ReplicaId m_replicaId; - }; - - TEST(CheckDataSetStreamIsntWrittenMoreThanNecessaryOnceDirty, DISABLED_CheckDataSetStreamIsntWrittenMoreThanNecessaryOnceDirty) - { - CheckDataSetStreamIsntWrittenMoreThanNecessaryOnceDirty tester; - tester.run(); - } - - class CheckReplicaIsntSentWithNoChanges - : public SimpleBehaviorTest - { - public: - CheckReplicaIsntSentWithNoChanges() - : m_replicaId(InvalidReplicaId) - { - } - - enum - { - sHost, - s2, - nSessions - }; - - int GetNumSessions() override { return nSessions; } - - void PreConnect() override - { - m_driller.BusConnect(); - - ReplicaPtr replica = Replica::CreateReplica(nullptr); - ForcingDirtyTestChunk* chunk = CreateAndAttachReplicaChunk(replica); - AZ_TEST_ASSERT(chunk); - - m_replicaId = m_sessions[sHost].GetReplicaMgr().AddPrimary(replica); - } - - ~CheckReplicaIsntSentWithNoChanges() override - { - m_driller.BusDisconnect(); - } - - const int NewValue = 999; - const int MomentaryValue = 1; - const int ExpectedNumberReplicasSent = 6; - - ReplicaPtr GetHostReplica() - { - return m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaId); - } - - TestStatus Tick(int tick) override - { - switch (tick) - { - case 9: - { - auto rep = GetHostReplica(); - AZ_TEST_ASSERT(rep); - m_driller.ResetCounts(); - - auto chunk = rep->FindReplicaChunk(); - chunk->Data1.Set(NewValue); - - break; - } - case 15: - { - auto rep = GetHostReplica(); - AZ_TEST_ASSERT(rep); - - auto counts = m_driller.m_replicaLengths.size(); - AZ_TEST_ASSERT(counts == ExpectedNumberReplicasSent); - m_driller.ResetCounts(); - - auto chunk = rep->FindReplicaChunk(); - chunk->Data1.Set(MomentaryValue); - - break; - } - case 16: - { - auto rep = GetHostReplica(); - AZ_TEST_ASSERT(rep); - auto chunk = rep->FindReplicaChunk(); - chunk->Data1.Set(NewValue); - - auto counts = m_driller.m_replicaLengths.size(); - AZ_TEST_ASSERT(counts == 1); - m_driller.ResetCounts(); - - break; - } - case 100: - { - auto counts = m_driller.m_replicaLengths.size(); - AZ_TEST_ASSERT(counts == ExpectedNumberReplicasSent); - m_driller.ResetCounts(); - - m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaId)->Destroy(); - return TestStatus::Completed; - } - default: - break; - } - return TestStatus::Running; - } - - FilteredHook m_driller; - ReplicaId m_replicaId; - }; - - TEST(CheckReplicaIsntSentWithNoChanges, DISABLED_CheckReplicaIsntSentWithNoChanges) - { - CheckReplicaIsntSentWithNoChanges tester; - tester.run(); - } - - class CheckEntityScriptReplicaIsntSentWithNoChanges - : public SimpleBehaviorTest - { - public: - CheckEntityScriptReplicaIsntSentWithNoChanges() - : m_replicaId(InvalidReplicaId) - { - } - - enum - { - sHost, - s2, - nSessions - }; - - - int GetNumSessions() override { return nSessions; } - - void PreConnect() override - { - m_driller.BusConnect(); - - ReplicaPtr replica = Replica::CreateReplica(nullptr); - auto chunk = CreateAndAttachReplicaChunk(replica); - AZ_TEST_ASSERT(chunk); - - m_replicaId = m_sessions[sHost].GetReplicaMgr().AddPrimary(replica); - } - - ~CheckEntityScriptReplicaIsntSentWithNoChanges() override - { - m_driller.BusDisconnect(); - } - - const int NewValue = 999; - const int MomentaryValue = 1; - const int ExpectedNumberReplicasSent = 6; - - ReplicaPtr GetHostReplica() - { - return m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaId); - } - - TestStatus Tick(int tick) override - { - switch (tick) - { - case 10: - { - auto rep = GetHostReplica(); - AZ_TEST_ASSERT(rep); - m_driller.ResetCounts(); - - auto chunk = rep->FindReplicaChunk(); - - // mimicing behavior of entity script chunk - chunk->m_scriptDataSets[0].SetIsEnabled(true); - chunk->m_scriptDataSets[0].Set(NewValue); - - break; - } - case 60: - { - auto counts = m_driller.m_replicaLengths.size(); - AZ_TEST_ASSERT(counts == ExpectedNumberReplicasSent); - m_driller.ResetCounts(); - - m_sessions[sHost].GetReplicaMgr().FindReplica(m_replicaId)->Destroy(); - return TestStatus::Completed; - } - default: - break; - } - return TestStatus::Running; - } - - ReplicaDrillerHook m_driller; - ReplicaId m_replicaId; - }; - - TEST(CheckEntityScriptReplicaIsntSentWithNoChanges, DISABLED_CheckEntityScriptReplicaIsntSentWithNoChanges) - { - CheckEntityScriptReplicaIsntSentWithNoChanges tester; - tester.run(); - } - } // namespace ReplicaBehavior } // namespace UnitTest diff --git a/Code/Framework/GridMate/Tests/ReplicaMedium.cpp b/Code/Framework/GridMate/Tests/ReplicaMedium.cpp index 2e8d2a3a73..b258d7d310 100644 --- a/Code/Framework/GridMate/Tests/ReplicaMedium.cpp +++ b/Code/Framework/GridMate/Tests/ReplicaMedium.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include #include @@ -525,22 +524,6 @@ public: int m_deactivates; }; -class DrillerTestChunk - : public ReplicaChunk -{ -public: - GM_CLASS_ALLOCATOR(DrillerTestChunk); - typedef AZStd::intrusive_ptr Ptr; - static const char* GetChunkName() { return "DrillerTestChunk"; } - - DrillerTestChunk() { } - - bool IsReplicaMigratable() override - { - return true; - } -}; - class NonConstMarshaler { public: @@ -744,10 +727,6 @@ public: { ReplicaChunkDescriptorTable::Get().RegisterChunkType(); } - if (!ReplicaChunkDescriptorTable::Get().FindReplicaChunkDescriptor(ReplicaChunkClassId(DrillerTestChunk::GetChunkName()))) - { - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - } if (!ReplicaChunkDescriptorTable::Get().FindReplicaChunkDescriptor(ReplicaChunkClassId(NonConstMarshalerChunk::GetChunkName()))) { ReplicaChunkDescriptorTable::Get().RegisterChunkType(); @@ -1648,440 +1627,6 @@ TEST_F(ReplicaChunkEventsDeactivate, DISABLED_ReplicaChunkEventsDeactivate) }); } - -class ReplicaDriller - : public SimpleTest -{ -public: - ReplicaDriller() - : m_replicaId(InvalidReplicaId) - { - } - - enum - { - sHost, - s2, - nSessions - }; - - class ReplicaDrillerHook - : public Debug::ReplicaDrillerBus::Handler - { - public: - ReplicaDrillerHook() - : m_createdReplicas(0) - , m_destroyedReplicas(0) - , m_activatedReplicas(0) - , m_deactivatedReplicas(0) - , m_attachedChunks(0) - , m_detachedChunks(0) - , m_numReplicaBytesSent(0) - , m_numReplicaBytesReceived(0) - , m_numRequestChangeOwnership(0) - , m_numChangedOwnership(0) - , m_createdChunks(0) - , m_destroyedChunks(0) - , m_activatedChunks(0) - , m_deactivatedChunks(0) - , m_numChunkBytesSent(0) - , m_numChunkBytesReceived(0) - , m_numOutgoingDatasets(0) - , m_numIncomingDatasets(0) - , m_numRpcRequests(0) - , m_numRpcInvokes(0) - , m_outgoingRpcDataSize(0) - , m_incomingRpcDataSize(0) - , m_totalOutgoingBytes(0) - , m_totalIncomingBytes(0) - , m_curReplicaSend(nullptr) - , m_curReplicaChunkSend(nullptr) - , m_curReplicaChunkIndexSend(GM_MAX_CHUNKS_PER_REPLICA) - , m_curReplicaReceive(nullptr) - , m_curReplicaChunkReceive(nullptr) - , m_curReplicaChunkIndexReceive(GM_MAX_CHUNKS_PER_REPLICA) - { - } - - AZStd::size_t m_createdReplicas; - AZStd::size_t m_destroyedReplicas; - AZStd::size_t m_activatedReplicas; - AZStd::size_t m_deactivatedReplicas; - AZStd::size_t m_attachedChunks; - AZStd::size_t m_detachedChunks; - AZStd::size_t m_numReplicaBytesSent; - AZStd::size_t m_numReplicaBytesReceived; - AZStd::size_t m_numRequestChangeOwnership; - AZStd::size_t m_numChangedOwnership; - - AZStd::size_t m_createdChunks; - AZStd::size_t m_destroyedChunks; - AZStd::size_t m_activatedChunks; - AZStd::size_t m_deactivatedChunks; - AZStd::size_t m_numChunkBytesSent; - AZStd::size_t m_numChunkBytesReceived; - - AZStd::size_t m_numOutgoingDatasets; - AZStd::size_t m_numIncomingDatasets; - - AZStd::size_t m_numRpcRequests; - AZStd::size_t m_numRpcInvokes; - AZStd::size_t m_outgoingRpcDataSize; - AZStd::size_t m_incomingRpcDataSize; - - AZStd::size_t m_totalOutgoingBytes; - AZStd::size_t m_totalIncomingBytes; - - Replica* m_curReplicaSend; - ReplicaChunkBase* m_curReplicaChunkSend; - size_t m_curReplicaChunkIndexSend; - Replica* m_curReplicaReceive; - ReplicaChunkBase* m_curReplicaChunkReceive; - AZ::u32 m_curReplicaChunkIndexReceive; - - void OnCreateReplica(Replica* replica) override - { - AZ_TEST_ASSERT(replica); - ++m_createdReplicas; - } - - void OnDestroyReplica(Replica* replica) override - { - AZ_TEST_ASSERT(replica); - ++m_destroyedReplicas; - } - - void OnActivateReplica(Replica* replica) override - { - AZ_TEST_ASSERT(replica); - ++m_activatedReplicas; - } - - void OnDeactivateReplica(Replica* replica) override - { - AZ_TEST_ASSERT(replica); - ++m_deactivatedReplicas; - } - - void OnAttachReplicaChunk(ReplicaChunkBase* chunk) override - { - AZ_TEST_ASSERT(chunk); - ++m_attachedChunks; - } - - void OnDetachReplicaChunk(ReplicaChunkBase* chunk) override - { - AZ_TEST_ASSERT(chunk); - ++m_detachedChunks; - } - - void OnSendReplicaBegin(Replica* replica) override - { - AZ_TEST_ASSERT(replica); - AZ_TEST_ASSERT(m_curReplicaSend == nullptr); - m_curReplicaSend = replica; - } - - void OnSendReplicaEnd(Replica* replica, const void* data, size_t len) override - { - AZ_TEST_ASSERT(replica); - AZ_TEST_ASSERT(replica == m_curReplicaSend); - AZ_TEST_ASSERT(data); - AZ_TEST_ASSERT(len > 0); - m_numReplicaBytesSent += len; - m_curReplicaSend = nullptr; - } - - void OnReceiveReplicaBegin(Replica* replica, const void* data, size_t len) override - { - AZ_TEST_ASSERT(replica); - AZ_TEST_ASSERT(m_curReplicaReceive == nullptr); - AZ_TEST_ASSERT(data); - AZ_TEST_ASSERT(len > 0); - m_curReplicaReceive = replica; - m_numReplicaBytesReceived += len; - } - - void OnReceiveReplicaEnd(Replica* replica) override - { - AZ_TEST_ASSERT(replica); - AZ_TEST_ASSERT(replica == m_curReplicaReceive); - m_curReplicaReceive = nullptr; - } - - void OnRequestReplicaChangeOwnership(Replica* replica, PeerId requestor) override - { - AZ_TEST_ASSERT(replica); - AZ_TEST_ASSERT(requestor == (s2 + 1)); - ++m_numRequestChangeOwnership; - } - - void OnReplicaChangeOwnership(Replica* replica, bool wasPrimary) override - { - AZ_TEST_ASSERT(replica); - switch (m_numChangedOwnership) - { - case 0: // host loses ownership - AZ_TEST_ASSERT(replica->IsProxy() && wasPrimary == true); - break; - case 1: // peer acquires ownership - AZ_TEST_ASSERT(replica->IsPrimary() && wasPrimary == false); - break; - default: - AZ_TEST_ASSERT(0); - } - - ++m_numChangedOwnership; - } - - void OnCreateReplicaChunk(ReplicaChunkBase* chunk) override - { - AZ_TEST_ASSERT(chunk); - ++m_createdChunks; - } - - void OnDestroyReplicaChunk(ReplicaChunkBase* chunk) override - { - AZ_TEST_ASSERT(chunk); - ++m_destroyedChunks; - } - - void OnActivateReplicaChunk(ReplicaChunkBase* chunk) override - { - AZ_TEST_ASSERT(chunk); - ++m_activatedChunks; - } - - void OnDeactivateReplicaChunk(ReplicaChunkBase* chunk) override - { - AZ_TEST_ASSERT(chunk); - ++m_deactivatedChunks; - } - - void OnSendReplicaChunkBegin(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, PeerId from, PeerId to) override - { - (void)from; - (void)to; - - AZ_TEST_ASSERT(chunk); - AZ_TEST_ASSERT(m_curReplicaSend == chunk->GetReplica()); - AZ_TEST_ASSERT(m_curReplicaChunkSend == nullptr); - AZ_TEST_ASSERT(m_curReplicaChunkIndexSend == GM_MAX_CHUNKS_PER_REPLICA); - m_curReplicaChunkSend = chunk; - m_curReplicaChunkIndexSend = chunkIndex; - } - - void OnSendReplicaChunkEnd(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, const void* data, size_t len) override - { - AZ_TEST_ASSERT(chunk); - AZ_TEST_ASSERT(m_curReplicaSend == chunk->GetReplica()); - AZ_TEST_ASSERT(m_curReplicaChunkSend == chunk); - AZ_TEST_ASSERT(m_curReplicaChunkIndexSend == chunkIndex); - AZ_TEST_ASSERT(data); - AZ_TEST_ASSERT(len > 0); - m_numChunkBytesSent += len; - m_curReplicaChunkSend = nullptr; - m_curReplicaChunkIndexSend = GM_MAX_CHUNKS_PER_REPLICA; - - } - - void OnReceiveReplicaChunkBegin(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, PeerId from, PeerId to, const void* data, size_t len) override - { - AZ_TEST_ASSERT(chunk); - AZ_TEST_ASSERT(m_curReplicaReceive == chunk->GetReplica()); - AZ_TEST_ASSERT(m_curReplicaChunkReceive == nullptr); - AZ_TEST_ASSERT(m_curReplicaChunkIndexReceive == GM_MAX_CHUNKS_PER_REPLICA); - AZ_TEST_ASSERT(from); - AZ_TEST_ASSERT(to); - AZ_TEST_ASSERT(data); - AZ_TEST_ASSERT(len > 0); - m_curReplicaChunkReceive = chunk; - m_curReplicaChunkIndexReceive = chunkIndex; - m_numChunkBytesReceived += len; - } - - void OnReceiveReplicaChunkEnd(ReplicaChunkBase* chunk, AZ::u32 chunkIndex) override - { - AZ_TEST_ASSERT(chunk); - AZ_TEST_ASSERT(m_curReplicaReceive == chunk->GetReplica()); - AZ_TEST_ASSERT(m_curReplicaChunkReceive == chunk); - AZ_TEST_ASSERT(m_curReplicaChunkIndexReceive == chunkIndex); - m_curReplicaChunkReceive = nullptr; - m_curReplicaChunkIndexReceive = GM_MAX_CHUNKS_PER_REPLICA; - } - - void OnSendDataSet(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, DataSetBase* dataSet, PeerId from, PeerId to, const void* data, size_t len) override - { - AZ_TEST_ASSERT(chunk); - AZ_TEST_ASSERT(m_curReplicaChunkSend == chunk); - AZ_TEST_ASSERT(m_curReplicaChunkIndexSend == chunkIndex); - AZ_TEST_ASSERT(dataSet); - AZ_TEST_ASSERT(from); - AZ_TEST_ASSERT(to); - AZ_TEST_ASSERT(data); - AZ_TEST_ASSERT(len > 0); - - ++m_numOutgoingDatasets; - } - - void OnReceiveDataSet(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, DataSetBase* dataSet, PeerId from, PeerId to, const void* data, size_t len) override - { - AZ_TEST_ASSERT(chunk); - AZ_TEST_ASSERT(m_curReplicaChunkReceive == chunk); - AZ_TEST_ASSERT(m_curReplicaChunkIndexReceive == chunkIndex); - AZ_TEST_ASSERT(dataSet); - AZ_TEST_ASSERT(from); - AZ_TEST_ASSERT(to); - AZ_TEST_ASSERT(data); - AZ_TEST_ASSERT(len > 0); - - ++m_numIncomingDatasets; - } - - void OnRequestRpc(ReplicaChunkBase* chunk, Internal::RpcRequest* rpc) override - { - (void)chunk; - (void)rpc; - ++m_numRpcRequests; - } - - void OnInvokeRpc(ReplicaChunkBase* chunk, Internal::RpcRequest* rpc) override - { - (void)chunk; - (void)rpc; - ++m_numRpcInvokes; - } - - void OnSendRpc(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, Internal::RpcRequest* rpc, PeerId from, PeerId to, const void* data, size_t len) override - { - AZ_TEST_ASSERT(chunk); - AZ_TEST_ASSERT(m_curReplicaChunkSend == chunk); - AZ_TEST_ASSERT(m_curReplicaChunkIndexSend == chunkIndex); - AZ_TEST_ASSERT(rpc); - AZ_TEST_ASSERT(from); - AZ_TEST_ASSERT(to); - AZ_TEST_ASSERT(data); - AZ_TEST_ASSERT(len > 0); - m_outgoingRpcDataSize += len; - } - - void OnReceiveRpc(ReplicaChunkBase* chunk, AZ::u32 chunkIndex, Internal::RpcRequest* rpc, PeerId from, PeerId to, const void* data, size_t len) override - { - AZ_TEST_ASSERT(chunk); - AZ_TEST_ASSERT(m_curReplicaChunkReceive == chunk); - AZ_TEST_ASSERT(m_curReplicaChunkIndexReceive == chunkIndex); - AZ_TEST_ASSERT(rpc); - AZ_TEST_ASSERT(from); - AZ_TEST_ASSERT(to); - AZ_TEST_ASSERT(data); - AZ_TEST_ASSERT(len > 0); - m_incomingRpcDataSize += len; - } - - void OnSend(PeerId to, const void* data, size_t len, bool isReliable) override - { - (void)to; // peerId might not be valid at this point, e.g. handshake (Cmd_Greetings) did not accomplish yet - (void)isReliable; - AZ_TEST_ASSERT(data); - AZ_TEST_ASSERT(len > 0); - m_totalOutgoingBytes += len; - } - - void OnReceive(PeerId from, const void* data, size_t len) override - { - (void)from; // peerId might not be valid at this point, e.g. handshake (Cmd_Greetings) did not accomplish yet - AZ_TEST_ASSERT(data); - AZ_TEST_ASSERT(len > 0); - m_totalIncomingBytes += len; - } - }; - - int GetNumSessions() override { return nSessions; } - - void PreConnect() override - { - m_driller.BusConnect(); - - ReplicaPtr replica = Replica::CreateReplica(nullptr); - CreateAndAttachReplicaChunk(replica); - m_replicaId = m_sessions[sHost].GetReplicaMgr().AddPrimary(replica); - } - - ~ReplicaDriller() override - { - m_driller.BusDisconnect(); - } - - ReplicaDrillerHook m_driller; - ReplicaId m_replicaId; -}; - -TEST_F(ReplicaDriller, DISABLED_ReplicaDriller) -{ - RunTickLoop([this](int tick)-> TestStatus - { - switch (tick) - { - case 10: - { - auto rep = m_sessions[s2].GetReplicaMgr().FindReplica(m_replicaId); - AZ_TEST_ASSERT(rep); - AZ_TEST_ASSERT(rep->IsProxy()); - rep->RequestChangeOwnership(); - break; - } - case 30: - { - auto rep = m_sessions[s2].GetReplicaMgr().FindReplica(m_replicaId); - AZ_TEST_ASSERT(rep); - AZ_TEST_ASSERT(rep->IsPrimary()); - rep->Destroy(); - break; - } - case 40: - // replicas - AZ_TEST_ASSERT(m_driller.m_createdReplicas > 0); - AZ_TEST_ASSERT(m_driller.m_destroyedReplicas > 0); - AZ_TEST_ASSERT(m_driller.m_activatedReplicas > 0); - AZ_TEST_ASSERT(m_driller.m_deactivatedReplicas > 0); - AZ_TEST_ASSERT(m_driller.m_numReplicaBytesSent > 0); - AZ_TEST_ASSERT(m_driller.m_numReplicaBytesReceived > 0); - AZ_TEST_ASSERT(m_driller.m_numRequestChangeOwnership == 1); - AZ_TEST_ASSERT(m_driller.m_numChangedOwnership == 2); // two because one call for host & one for peer - - // chunks - AZ_TEST_ASSERT(m_driller.m_createdChunks >= m_driller.m_createdReplicas); - AZ_TEST_ASSERT(m_driller.m_destroyedChunks >= m_driller.m_destroyedReplicas); - AZ_TEST_ASSERT(m_driller.m_activatedChunks >= m_driller.m_activatedReplicas); - AZ_TEST_ASSERT(m_driller.m_deactivatedChunks >= m_driller.m_deactivatedReplicas); - AZ_TEST_ASSERT(m_driller.m_attachedChunks > 0); - AZ_TEST_ASSERT(m_driller.m_detachedChunks > 0); - AZ_TEST_ASSERT(m_driller.m_numChunkBytesReceived > 0); - - AZ_TEST_ASSERT(m_driller.m_numChunkBytesSent > 0); - AZ_TEST_ASSERT(m_driller.m_numChunkBytesReceived > 0); - - // datasets - AZ_TEST_ASSERT(m_driller.m_numOutgoingDatasets > 0); - AZ_TEST_ASSERT(m_driller.m_numIncomingDatasets > 0); - - // rpcs - AZ_TEST_ASSERT(m_driller.m_numRpcRequests > 0); - AZ_TEST_ASSERT(m_driller.m_numRpcInvokes > 0); - AZ_TEST_ASSERT(m_driller.m_outgoingRpcDataSize > 0); - AZ_TEST_ASSERT(m_driller.m_incomingRpcDataSize > 0); - - // data - AZ_TEST_ASSERT(m_driller.m_totalOutgoingBytes > 0); - AZ_TEST_ASSERT(m_driller.m_totalIncomingBytes > 0); - return TestStatus::Completed; - default: break; - } - return TestStatus::Running; - }); -} - - class DataSetChangedTest : public SimpleTest { @@ -2403,114 +1948,6 @@ TEST_F(SourcePeerTest, DISABLED_SourcePeerTest) }); } - -class SendWithPriority - : public SimpleTest -{ -public: - enum - { - sHost, - s2, - nSessions - }; - - class PriorityChunk - : public ReplicaChunk - { - public: - GM_CLASS_ALLOCATOR(PriorityChunk); - typedef AZStd::intrusive_ptr Ptr; - static const char* GetChunkName() { return "PriorityChunk"; } - - PriorityChunk() - : m_value("Value") - { - } - - bool IsReplicaMigratable() override { return false; } - - DataSet m_value; - }; - - class ReplicaDrillerHook - : public Debug::ReplicaDrillerBus::Handler - { - public: - ReplicaDrillerHook() - : m_expectedSendValue(SendWithPriority::kNumReplicas) - , m_expectedRecvValue(SendWithPriority::kNumReplicas) - { - } - - void OnReceiveReplicaEnd(Replica* replica) override - { - auto chunk = replica->FindReplicaChunk(); - if (chunk && m_expectedRecvValue > 0) - { - AZ_TEST_ASSERT(chunk->m_value.Get() == m_expectedRecvValue); // checking reverse order - --m_expectedRecvValue; - } - } - - void OnSendReplicaEnd(Replica* replica, const void* data, size_t len) override - { - (void)data; - (void)len; - - auto chunk = replica->FindReplicaChunk(); - if (chunk && m_expectedSendValue > 0) - { - AZ_TEST_ASSERT(chunk->m_value.Get() == m_expectedSendValue); // checking reverse order - --m_expectedSendValue; - } - } - - int m_expectedSendValue; - int m_expectedRecvValue; - }; - - int GetNumSessions() override { return nSessions; } - - void PreConnect() override - { - ReplicaChunkDescriptorTable::Get().RegisterChunkType(); - - m_driller.BusConnect(); - - for (unsigned i = 0; i < kNumReplicas; ++i) - { - ReplicaPtr replica = Replica::CreateReplica(nullptr); - m_chunks[i] = CreateAndAttachReplicaChunk(replica); - m_chunks[i]->m_value.Set(i + 1); // setting dataset values to 1..kNumReplicas - m_chunks[i]->SetPriority(k_replicaPriorityNormal + static_cast(i)); // the later created - the higher priorities, so should be sent in reverse order - m_sessions[sHost].GetReplicaMgr().AddPrimary(replica); - } - } - - - static const size_t kNumReplicas = 5; - - ReplicaDrillerHook m_driller; - PriorityChunk::Ptr m_chunks[kNumReplicas]; -}; - -TEST_F(SendWithPriority, DISABLED_SendWithPriority) -{ - RunTickLoop([this](int tick)-> TestStatus - { - if (tick == 20) - { - AZ_TEST_ASSERT(m_driller.m_expectedSendValue == 0); // sent all the replicas in the right order - AZ_TEST_ASSERT(m_driller.m_expectedRecvValue == 0); // received all the replicas in the right order - return TestStatus::Completed; - } - - return TestStatus::Running; - }); -} - - class SuspendUpdatesTest : public SimpleTest { @@ -2787,75 +2224,6 @@ TEST_F(BasicHostChunkDescriptorTest, DISABLED_BasicHostChunkDescriptorTest) } } -/* - * Create and immedietly destroy primary replica - * Test that it does not result in any network sync -*/ -class CreateDestroyPrimary - : public SimpleTest - , public Debug::ReplicaDrillerBus::Handler -{ -public: - enum - { - sHost, - s2, - nSessions - }; - - int GetNumSessions() override { return nSessions; } - - - // ReplicaDrillerBus - void OnReceive(PeerId from, const void* data, size_t len) override - { - (void)from; - (void)data; - (void)len; - - AZ_TEST_ASSERT(false); // should not receive any replica data - } - - void ConnectDriller() - { - Debug::ReplicaDrillerBus::Handler::BusConnect(); - } - - void DisconnectDriller() - { - Debug::ReplicaDrillerBus::Handler::BusDisconnect(); - } -}; - -TEST_F(CreateDestroyPrimary, DISABLED_CreateDestroyPrimary) -{ - RunTickLoop([this](int tick)-> TestStatus - { - switch (tick) - { - - case 10: - { - ConnectDriller(); - auto replica = Replica::CreateReplica(nullptr); - CreateAndAttachReplicaChunk(replica); - m_sessions[sHost].GetReplicaMgr().AddPrimary(replica); - - // Destroying replica right away - replica->Destroy(); - break; - } - - case 20: - DisconnectDriller(); - return TestStatus::Completed; - default: break; - } - - return TestStatus::Running; - }); -} - /* * This test checks that when the carrier ACKs a message it feeds back to the ReplicaTarget. * The ReplicaTarget will prevent sending more updates. @@ -2884,8 +2252,6 @@ public: void PreConnect() override { - m_driller.BusConnect(); - ReplicaPtr replica = Replica::CreateReplica("ReplicaACKfeedbackTest"); LargeChunkWithDefaultsMedium* chunk = CreateAndAttachReplicaChunk(replica); AZ_TEST_ASSERT(chunk); @@ -2895,12 +2261,9 @@ public: ~ReplicaACKfeedbackTestFixture() override { - m_driller.BusDisconnect(); } - size_t m_replicaBytesSentPrev = 0; ReplicaId m_replicaId; - ReplicaDriller::ReplicaDrillerHook m_driller; }; TEST_F(ReplicaACKfeedbackTestFixture, ReplicaACKfeedbackTest) @@ -2912,7 +2275,6 @@ TEST_F(ReplicaACKfeedbackTestFixture, ReplicaACKfeedbackTest) return TestStatus::Completed; } - //AZ_Printf("GridMateTests", "%d %d\n", tick, m_driller.m_numReplicaBytesSent); // Tests the Revision stamp with Carrier ACK feedback // result is true on the immediate tick after changing, but false on the next and stays false until next change auto CheckHostReplicaChanged = [this](bool result) @@ -2963,12 +2325,10 @@ TEST_F(ReplicaACKfeedbackTestFixture, ReplicaACKfeedbackTest) updateDataSets(chunk, NonDefaultValue); - m_replicaBytesSentPrev = m_driller.m_numReplicaBytesSent; CheckHostReplicaChanged(false); //Changed now, but wont know until next prepareData() }break; case 16: { - AZ_TEST_ASSERT(m_driller.m_numReplicaBytesSent - m_replicaBytesSentPrev == k_updateBytes); CheckHostReplicaChanged(true); //Detected change. ACK feedback on next tick returns to false. }break; case 20: @@ -2978,12 +2338,10 @@ TEST_F(ReplicaACKfeedbackTestFixture, ReplicaACKfeedbackTest) updateDataSets(chunk, NonDefaultValue + 1); - m_replicaBytesSentPrev = m_driller.m_numReplicaBytesSent; CheckHostReplicaChanged(false); //Changed now, but wont know until next prepareData() }break; case 21: { - AZ_TEST_ASSERT(m_driller.m_numReplicaBytesSent - m_replicaBytesSentPrev == k_updateBytes); CheckHostReplicaChanged(true); //Detected change. ACK feedback on next tick returns to false. }break; case 25: diff --git a/Code/Framework/GridMate/Tests/ReplicaSmall.cpp b/Code/Framework/GridMate/Tests/ReplicaSmall.cpp index d71789ae90..7e058d5c6f 100644 --- a/Code/Framework/GridMate/Tests/ReplicaSmall.cpp +++ b/Code/Framework/GridMate/Tests/ReplicaSmall.cpp @@ -453,7 +453,6 @@ public: // replicaHeader += 16; //#endif // const int marshalDataSize = 48; //Data plus length - //Only for Driller ReplicaManager rm; ReplicaPeer peer(&rm); diff --git a/Code/Framework/GridMate/Tests/Tests.h b/Code/Framework/GridMate/Tests/Tests.h index 7e1638c5e5..f3583c22eb 100644 --- a/Code/Framework/GridMate/Tests/Tests.h +++ b/Code/Framework/GridMate/Tests/Tests.h @@ -18,18 +18,8 @@ #include #include -#include -#include - #include -#define GM_TEST_MEMORY_DRILLING 0 -////////////////////////////////////////////////////////////////////////// -// Drillers -#include - -#define AZ_ROOT_TEST_FOLDER "" - #include ////////////////////////////////////////////////////////////////////////// @@ -50,9 +40,6 @@ namespace UnitTest { protected: GridMate::IGridMate* m_gridMate; - AZ::Debug::DrillerSession* m_drillerSession; - AZ::Debug::DrillerOutputFileStream* m_drillerStream; - AZ::Debug::DrillerManager* m_drillerManager; private: using Platform = GridMateTestFixture_Platform; @@ -60,25 +47,15 @@ namespace UnitTest public: GridMateTestFixture([[maybe_unused]] unsigned int memorySize = 100 * 1024 * 1024) : m_gridMate(nullptr) - , m_drillerSession(nullptr) - , m_drillerStream(nullptr) - , m_drillerManager(nullptr) { GridMate::GridMateDesc desc; -#if GM_TEST_MEMORY_DRILLING - m_drillerManager = AZ::Debug::DrillerManager::Create(); - m_drillerManager->Register(aznew AZ::Debug::MemoryDriller); - - desc.m_allocatorDesc.m_allocationRecords = true; -#endif AZ::AllocatorInstance::Create(); //desc.m_autoInitPlatformNetModules = false; m_gridMate = GridMateCreate(desc); AZ_TEST_ASSERT(m_gridMate != NULL); - m_drillerSession = NULL; - + AZ::AllocatorManager::Instance().EnterProfilingMode(); AZ::Debug::AllocationRecords* records = AZ::AllocatorInstance::GetAllocator().GetRecords(); if (records) { @@ -99,12 +76,7 @@ namespace UnitTest } AZ::AllocatorInstance::Destroy(); - - if (m_drillerManager) - { - AZ::Debug::DrillerManager::Destroy(m_drillerManager); - m_drillerManager = nullptr; - } + AZ::AllocatorManager::Instance().ExitProfilingMode(); } void Update() diff --git a/Code/Legacy/CrySystem/DebugCallStack.cpp b/Code/Legacy/CrySystem/DebugCallStack.cpp index 19fe4ce8df..201582b949 100644 --- a/Code/Legacy/CrySystem/DebugCallStack.cpp +++ b/Code/Legacy/CrySystem/DebugCallStack.cpp @@ -17,7 +17,6 @@ #include "System.h" #include -#include #include #include @@ -158,8 +157,6 @@ AZStd::spin_mutex g_lockThreadDumpList; void MarkThisThreadForDebugging(const char* name) { - EBUS_EVENT(AZ::Debug::EventTraceDrillerSetupBus, SetThreadName, AZStd::this_thread::get_id(), name); - AZStd::scoped_lock lock(g_lockThreadDumpList); DWORD id = GetCurrentThreadId(); if (g_nDebugThreads == sizeof(g_idDebugThreads) / sizeof(g_idDebugThreads[0])) diff --git a/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp b/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp index 6027e9c474..dbe92ee6aa 100644 --- a/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp +++ b/Code/Legacy/CrySystem/LevelSystem/LevelSystem.cpp @@ -18,7 +18,6 @@ #include #include -#include #include #include #include @@ -540,7 +539,6 @@ bool CLevelSystem::LoadLevel(const char* _levelName) ILevel* CLevelSystem::LoadLevelInternal(const char* _levelName) { gEnv->pSystem->SetSystemGlobalState(ESYSTEM_GLOBAL_STATE_LEVEL_LOAD_START); - AZ_ASSET_NAMED_SCOPE("Level: %s", _levelName); CryLog ("Level system is loading \"%s\"", _levelName); INDENT_LOG_DURING_SCOPE(); diff --git a/Code/Legacy/CrySystem/LevelSystem/SpawnableLevelSystem.cpp b/Code/Legacy/CrySystem/LevelSystem/SpawnableLevelSystem.cpp index 69e0b0c2a6..095d296373 100644 --- a/Code/Legacy/CrySystem/LevelSystem/SpawnableLevelSystem.cpp +++ b/Code/Legacy/CrySystem/LevelSystem/SpawnableLevelSystem.cpp @@ -12,7 +12,6 @@ #include -#include #include #include #include @@ -258,7 +257,6 @@ namespace LegacyLevelSystem bool SpawnableLevelSystem::LoadLevelInternal(const char* levelName) { gEnv->pSystem->SetSystemGlobalState(ESYSTEM_GLOBAL_STATE_LEVEL_LOAD_START); - AZ_ASSET_NAMED_SCOPE("Level: %s", levelName); INDENT_LOG_DURING_SCOPE(); diff --git a/Code/Legacy/CrySystem/System.cpp b/Code/Legacy/CrySystem/System.cpp index c1ef60414f..7cf066f72e 100644 --- a/Code/Legacy/CrySystem/System.cpp +++ b/Code/Legacy/CrySystem/System.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -24,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -34,6 +34,7 @@ #include #include +AZ_DEFINE_BUDGET(CrySystem); #if defined(AZ_RESTRICTED_PLATFORM) #undef AZ_RESTRICTED_SECTION @@ -517,7 +518,7 @@ void CSystem::SleepIfNeeded() int sleepMS = (int)(1000.0f * sleepTime + 0.5f); if (sleepMS > 0) { - AZ_PROFILE_FUNCTION(System); + AZ_PROFILE_FUNCTION(CrySystem); Sleep(sleepMS); } @@ -556,7 +557,7 @@ bool CSystem::UpdatePreTickBus(int updateFlags, int nPauseMode) _mm_setcsr(_mm_getcsr() & ~0x280 | (g_cvars.sys_float_exceptions > 0 ? 0 : 0x280)); #endif //WIN32 - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(CrySystem); #ifndef EXCLUDE_UPDATE_ON_CONSOLE if (m_pUserCallback) diff --git a/Code/Legacy/CrySystem/SystemEventDispatcher.cpp b/Code/Legacy/CrySystem/SystemEventDispatcher.cpp index 8e4e36b453..b52585c5c4 100644 --- a/Code/Legacy/CrySystem/SystemEventDispatcher.cpp +++ b/Code/Legacy/CrySystem/SystemEventDispatcher.cpp @@ -9,7 +9,9 @@ #include "CrySystem_precompiled.h" #include "SystemEventDispatcher.h" -#include +#include + +AZ_DECLARE_BUDGET(CrySystem); CSystemEventDispatcher::CSystemEventDispatcher() : m_listeners(0) @@ -72,7 +74,7 @@ void CSystemEventDispatcher::OnSystemEvent(ESystemEvent event, UINT_PTR wparam, ////////////////////////////////////////////////////////////////////////// void CSystemEventDispatcher::Update() { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(CrySystem); assert(gEnv && gEnv->mMainThreadId == CryGetCurrentThreadId()); SEventParams params; diff --git a/Code/Tools/AssetProcessor/native/tests/AssetProcessorTest.cpp b/Code/Tools/AssetProcessor/native/tests/AssetProcessorTest.cpp index 2629f7b956..5be9436145 100644 --- a/Code/Tools/AssetProcessor/native/tests/AssetProcessorTest.cpp +++ b/Code/Tools/AssetProcessor/native/tests/AssetProcessorTest.cpp @@ -10,7 +10,6 @@ #include #include -#include #include #include "BaseAssetProcessorTest.h" @@ -55,13 +54,11 @@ namespace AssetProcessor }; class LegacyTestAdapter : public AssetProcessorTest, - public ::testing::WithParamInterface, - public AZ::IO::FileIOEventBus::Handler + public ::testing::WithParamInterface { void SetUp() override { AssetProcessorTest::SetUp(); - AZ::IO::FileIOEventBus::Handler::BusConnect(); static int numParams = 1; static char processName[] = {"AssetProcessorBatch"}; @@ -91,18 +88,9 @@ namespace AssetProcessor void TearDown() override { m_application.reset(); - AZ::IO::FileIOEventBus::Handler::BusDisconnect(); AssetProcessorTest::TearDown(); } - void OnError( - [[maybe_unused]] const AZ::IO::SystemFile* file, - [[maybe_unused]] const char* fileName, - [[maybe_unused]] int errorCode) override - { - AZ_Error("LegacyTestAdapter", false, "File error detected with %s with code %d", fileName, errorCode); - } - AZStd::unique_ptr m_application; }; diff --git a/Code/Tools/CMakeLists.txt b/Code/Tools/CMakeLists.txt index 8107089433..86f745fdef 100644 --- a/Code/Tools/CMakeLists.txt +++ b/Code/Tools/CMakeLists.txt @@ -17,7 +17,7 @@ add_subdirectory(DeltaCataloger) add_subdirectory(SerializeContextTools) add_subdirectory(AssetBundler) add_subdirectory(GridHub) -add_subdirectory(Standalone) +add_subdirectory(LuaIDE) add_subdirectory(TestImpactFramework) add_subdirectory(ProjectManager) add_subdirectory(BundleLauncher) diff --git a/Code/Tools/DeltaCataloger/Tests/tests_main.cpp b/Code/Tools/DeltaCataloger/Tests/tests_main.cpp index d5a344b686..a2731c498d 100644 --- a/Code/Tools/DeltaCataloger/Tests/tests_main.cpp +++ b/Code/Tools/DeltaCataloger/Tests/tests_main.cpp @@ -52,7 +52,6 @@ protected: AZ::ComponentApplication::Descriptor desc; desc.m_useExistingAllocator = true; - desc.m_enableDrilling = false; // we already created a memory driller for the test (AllocatorsFixture) app.Start(desc); // Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is diff --git a/Code/Tools/Standalone/CMakeLists.txt b/Code/Tools/LuaIDE/CMakeLists.txt similarity index 96% rename from Code/Tools/Standalone/CMakeLists.txt rename to Code/Tools/LuaIDE/CMakeLists.txt index 12bdb8f453..98c8d7f04b 100644 --- a/Code/Tools/Standalone/CMakeLists.txt +++ b/Code/Tools/LuaIDE/CMakeLists.txt @@ -17,7 +17,6 @@ ly_add_target( AUTOUIC AUTORCC FILES_CMAKE - standalone_tools_files.cmake lua_ide_files.cmake Platform/${PAL_PLATFORM_NAME}/lua_ide_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake INCLUDE_DIRECTORIES diff --git a/Code/Tools/Standalone/Platform/Common/Unimplemented/Source/StandaloneApplication_Unimplemented.cpp b/Code/Tools/LuaIDE/Platform/Common/Unimplemented/Source/StandaloneApplication_Unimplemented.cpp similarity index 100% rename from Code/Tools/Standalone/Platform/Common/Unimplemented/Source/StandaloneApplication_Unimplemented.cpp rename to Code/Tools/LuaIDE/Platform/Common/Unimplemented/Source/StandaloneApplication_Unimplemented.cpp diff --git a/Code/Tools/Standalone/Platform/Linux/lua_ide_linux_files.cmake b/Code/Tools/LuaIDE/Platform/Linux/lua_ide_linux_files.cmake similarity index 100% rename from Code/Tools/Standalone/Platform/Linux/lua_ide_linux_files.cmake rename to Code/Tools/LuaIDE/Platform/Linux/lua_ide_linux_files.cmake diff --git a/Code/Tools/Standalone/Platform/Mac/Source/StandaloneApplication_Mac.cpp b/Code/Tools/LuaIDE/Platform/Mac/Source/StandaloneApplication_Mac.cpp similarity index 100% rename from Code/Tools/Standalone/Platform/Mac/Source/StandaloneApplication_Mac.cpp rename to Code/Tools/LuaIDE/Platform/Mac/Source/StandaloneApplication_Mac.cpp diff --git a/Code/Tools/Standalone/Platform/Mac/lua_ide_mac_files.cmake b/Code/Tools/LuaIDE/Platform/Mac/lua_ide_mac_files.cmake similarity index 100% rename from Code/Tools/Standalone/Platform/Mac/lua_ide_mac_files.cmake rename to Code/Tools/LuaIDE/Platform/Mac/lua_ide_mac_files.cmake diff --git a/Code/Tools/Standalone/Platform/Windows/Source/StandaloneApplication_Windows.cpp b/Code/Tools/LuaIDE/Platform/Windows/Source/StandaloneApplication_Windows.cpp similarity index 100% rename from Code/Tools/Standalone/Platform/Windows/Source/StandaloneApplication_Windows.cpp rename to Code/Tools/LuaIDE/Platform/Windows/Source/StandaloneApplication_Windows.cpp diff --git a/Code/Tools/Standalone/Platform/Windows/lua_ide_windows_files.cmake b/Code/Tools/LuaIDE/Platform/Windows/lua_ide_windows_files.cmake similarity index 100% rename from Code/Tools/Standalone/Platform/Windows/lua_ide_windows_files.cmake rename to Code/Tools/LuaIDE/Platform/Windows/lua_ide_windows_files.cmake diff --git a/Code/Tools/Standalone/Source/AssetDatabaseLocationListener.cpp b/Code/Tools/LuaIDE/Source/AssetDatabaseLocationListener.cpp similarity index 100% rename from Code/Tools/Standalone/Source/AssetDatabaseLocationListener.cpp rename to Code/Tools/LuaIDE/Source/AssetDatabaseLocationListener.cpp diff --git a/Code/Tools/Standalone/Source/AssetDatabaseLocationListener.h b/Code/Tools/LuaIDE/Source/AssetDatabaseLocationListener.h similarity index 100% rename from Code/Tools/Standalone/Source/AssetDatabaseLocationListener.h rename to Code/Tools/LuaIDE/Source/AssetDatabaseLocationListener.h diff --git a/Code/Tools/Standalone/Source/Editor/Editor.rc b/Code/Tools/LuaIDE/Source/Editor/Editor.rc similarity index 100% rename from Code/Tools/Standalone/Source/Editor/Editor.rc rename to Code/Tools/LuaIDE/Source/Editor/Editor.rc diff --git a/Code/Tools/Standalone/Source/Editor/LuaEditor.cpp b/Code/Tools/LuaIDE/Source/Editor/LuaEditor.cpp similarity index 100% rename from Code/Tools/Standalone/Source/Editor/LuaEditor.cpp rename to Code/Tools/LuaIDE/Source/Editor/LuaEditor.cpp diff --git a/Code/Tools/Standalone/Source/Editor/LuaEditor.h b/Code/Tools/LuaIDE/Source/Editor/LuaEditor.h similarity index 100% rename from Code/Tools/Standalone/Source/Editor/LuaEditor.h rename to Code/Tools/LuaIDE/Source/Editor/LuaEditor.h diff --git a/Code/Tools/Standalone/Source/Editor/LuaEditor.rc b/Code/Tools/LuaIDE/Source/Editor/LuaEditor.rc similarity index 100% rename from Code/Tools/Standalone/Source/Editor/LuaEditor.rc rename to Code/Tools/LuaIDE/Source/Editor/LuaEditor.rc diff --git a/Code/Tools/Standalone/Source/Editor/Resource.h b/Code/Tools/LuaIDE/Source/Editor/Resource.h similarity index 100% rename from Code/Tools/Standalone/Source/Editor/Resource.h rename to Code/Tools/LuaIDE/Source/Editor/Resource.h diff --git a/Code/Tools/Standalone/Source/Editor/hex_lua.ico b/Code/Tools/LuaIDE/Source/Editor/hex_lua.ico similarity index 100% rename from Code/Tools/Standalone/Source/Editor/hex_lua.ico rename to Code/Tools/LuaIDE/Source/Editor/hex_lua.ico diff --git a/Code/Tools/Standalone/Source/Editor/targetver.h b/Code/Tools/LuaIDE/Source/Editor/targetver.h similarity index 100% rename from Code/Tools/Standalone/Source/Editor/targetver.h rename to Code/Tools/LuaIDE/Source/Editor/targetver.h diff --git a/Code/Tools/Standalone/Source/LUA/BasicScriptChecker.h b/Code/Tools/LuaIDE/Source/LUA/BasicScriptChecker.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/BasicScriptChecker.h rename to Code/Tools/LuaIDE/Source/LUA/BasicScriptChecker.h diff --git a/Code/Tools/Standalone/Source/LUA/BreakpointPanel.cpp b/Code/Tools/LuaIDE/Source/LUA/BreakpointPanel.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/BreakpointPanel.cpp rename to Code/Tools/LuaIDE/Source/LUA/BreakpointPanel.cpp diff --git a/Code/Tools/Standalone/Source/LUA/BreakpointPanel.hxx b/Code/Tools/LuaIDE/Source/LUA/BreakpointPanel.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/BreakpointPanel.hxx rename to Code/Tools/LuaIDE/Source/LUA/BreakpointPanel.hxx diff --git a/Code/Tools/Standalone/Source/LUA/ClassReferenceFilter.cpp b/Code/Tools/LuaIDE/Source/LUA/ClassReferenceFilter.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/ClassReferenceFilter.cpp rename to Code/Tools/LuaIDE/Source/LUA/ClassReferenceFilter.cpp diff --git a/Code/Tools/Standalone/Source/LUA/ClassReferenceFilter.hxx b/Code/Tools/LuaIDE/Source/LUA/ClassReferenceFilter.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/ClassReferenceFilter.hxx rename to Code/Tools/LuaIDE/Source/LUA/ClassReferenceFilter.hxx diff --git a/Code/Tools/Standalone/Source/LUA/ClassReferencePanel.cpp b/Code/Tools/LuaIDE/Source/LUA/ClassReferencePanel.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/ClassReferencePanel.cpp rename to Code/Tools/LuaIDE/Source/LUA/ClassReferencePanel.cpp diff --git a/Code/Tools/Standalone/Source/LUA/ClassReferencePanel.hxx b/Code/Tools/LuaIDE/Source/LUA/ClassReferencePanel.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/ClassReferencePanel.hxx rename to Code/Tools/LuaIDE/Source/LUA/ClassReferencePanel.hxx diff --git a/Code/Tools/Standalone/Source/LUA/CodeCompletion/LUACompleter.cpp b/Code/Tools/LuaIDE/Source/LUA/CodeCompletion/LUACompleter.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/CodeCompletion/LUACompleter.cpp rename to Code/Tools/LuaIDE/Source/LUA/CodeCompletion/LUACompleter.cpp diff --git a/Code/Tools/Standalone/Source/LUA/CodeCompletion/LUACompleter.hxx b/Code/Tools/LuaIDE/Source/LUA/CodeCompletion/LUACompleter.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/CodeCompletion/LUACompleter.hxx rename to Code/Tools/LuaIDE/Source/LUA/CodeCompletion/LUACompleter.hxx diff --git a/Code/Tools/Standalone/Source/LUA/CodeCompletion/LUACompletionModel.cpp b/Code/Tools/LuaIDE/Source/LUA/CodeCompletion/LUACompletionModel.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/CodeCompletion/LUACompletionModel.cpp rename to Code/Tools/LuaIDE/Source/LUA/CodeCompletion/LUACompletionModel.cpp diff --git a/Code/Tools/Standalone/Source/LUA/CodeCompletion/LUACompletionModel.hxx b/Code/Tools/LuaIDE/Source/LUA/CodeCompletion/LUACompletionModel.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/CodeCompletion/LUACompletionModel.hxx rename to Code/Tools/LuaIDE/Source/LUA/CodeCompletion/LUACompletionModel.hxx diff --git a/Code/Tools/Standalone/Source/LUA/DebugAttachmentButton.cpp b/Code/Tools/LuaIDE/Source/LUA/DebugAttachmentButton.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/DebugAttachmentButton.cpp rename to Code/Tools/LuaIDE/Source/LUA/DebugAttachmentButton.cpp diff --git a/Code/Tools/Standalone/Source/LUA/DebugAttachmentButton.hxx b/Code/Tools/LuaIDE/Source/LUA/DebugAttachmentButton.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/DebugAttachmentButton.hxx rename to Code/Tools/LuaIDE/Source/LUA/DebugAttachmentButton.hxx diff --git a/Code/Tools/Standalone/Source/LUA/LUABreakpointTrackerMessages.cpp b/Code/Tools/LuaIDE/Source/LUA/LUABreakpointTrackerMessages.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUABreakpointTrackerMessages.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUABreakpointTrackerMessages.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUABreakpointTrackerMessages.h b/Code/Tools/LuaIDE/Source/LUA/LUABreakpointTrackerMessages.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUABreakpointTrackerMessages.h rename to Code/Tools/LuaIDE/Source/LUA/LUABreakpointTrackerMessages.h diff --git a/Code/Tools/Standalone/Source/LUA/LUAContextControlMessages.h b/Code/Tools/LuaIDE/Source/LUA/LUAContextControlMessages.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAContextControlMessages.h rename to Code/Tools/LuaIDE/Source/LUA/LUAContextControlMessages.h diff --git a/Code/Tools/Standalone/Source/LUA/LUADebuggerComponent.cpp b/Code/Tools/LuaIDE/Source/LUA/LUADebuggerComponent.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUADebuggerComponent.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUADebuggerComponent.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUADebuggerComponent.h b/Code/Tools/LuaIDE/Source/LUA/LUADebuggerComponent.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUADebuggerComponent.h rename to Code/Tools/LuaIDE/Source/LUA/LUADebuggerComponent.h diff --git a/Code/Tools/Standalone/Source/LUA/LUADebuggerMessages.h b/Code/Tools/LuaIDE/Source/LUA/LUADebuggerMessages.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUADebuggerMessages.h rename to Code/Tools/LuaIDE/Source/LUA/LUADebuggerMessages.h diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorBlockState.h b/Code/Tools/LuaIDE/Source/LUA/LUAEditorBlockState.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorBlockState.h rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorBlockState.h diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorBreakpointWidget.cpp b/Code/Tools/LuaIDE/Source/LUA/LUAEditorBreakpointWidget.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorBreakpointWidget.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorBreakpointWidget.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorBreakpointWidget.hxx b/Code/Tools/LuaIDE/Source/LUA/LUAEditorBreakpointWidget.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorBreakpointWidget.hxx rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorBreakpointWidget.hxx diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorContext.cpp b/Code/Tools/LuaIDE/Source/LUA/LUAEditorContext.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorContext.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorContext.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorContext.h b/Code/Tools/LuaIDE/Source/LUA/LUAEditorContext.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorContext.h rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorContext.h diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorContextInterface.h b/Code/Tools/LuaIDE/Source/LUA/LUAEditorContextInterface.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorContextInterface.h rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorContextInterface.h diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorContextMessages.h b/Code/Tools/LuaIDE/Source/LUA/LUAEditorContextMessages.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorContextMessages.h rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorContextMessages.h diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorDebuggerMessages.h b/Code/Tools/LuaIDE/Source/LUA/LUAEditorDebuggerMessages.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorDebuggerMessages.h rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorDebuggerMessages.h diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorFindDialog.cpp b/Code/Tools/LuaIDE/Source/LUA/LUAEditorFindDialog.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorFindDialog.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorFindDialog.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorFindDialog.hxx b/Code/Tools/LuaIDE/Source/LUA/LUAEditorFindDialog.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorFindDialog.hxx rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorFindDialog.hxx diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorFindDialog.ui b/Code/Tools/LuaIDE/Source/LUA/LUAEditorFindDialog.ui similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorFindDialog.ui rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorFindDialog.ui diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorFindResults.cpp b/Code/Tools/LuaIDE/Source/LUA/LUAEditorFindResults.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorFindResults.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorFindResults.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorFindResults.hxx b/Code/Tools/LuaIDE/Source/LUA/LUAEditorFindResults.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorFindResults.hxx rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorFindResults.hxx diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorFindResults.ui b/Code/Tools/LuaIDE/Source/LUA/LUAEditorFindResults.ui similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorFindResults.ui rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorFindResults.ui diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorFoldingWidget.cpp b/Code/Tools/LuaIDE/Source/LUA/LUAEditorFoldingWidget.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorFoldingWidget.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorFoldingWidget.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorFoldingWidget.hxx b/Code/Tools/LuaIDE/Source/LUA/LUAEditorFoldingWidget.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorFoldingWidget.hxx rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorFoldingWidget.hxx diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorGoToLineDialog.cpp b/Code/Tools/LuaIDE/Source/LUA/LUAEditorGoToLineDialog.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorGoToLineDialog.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorGoToLineDialog.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorGoToLineDialog.hxx b/Code/Tools/LuaIDE/Source/LUA/LUAEditorGoToLineDialog.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorGoToLineDialog.hxx rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorGoToLineDialog.hxx diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorGoToLineDialog.ui b/Code/Tools/LuaIDE/Source/LUA/LUAEditorGoToLineDialog.ui similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorGoToLineDialog.ui rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorGoToLineDialog.ui diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorMainWindow.cpp b/Code/Tools/LuaIDE/Source/LUA/LUAEditorMainWindow.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorMainWindow.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorMainWindow.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorMainWindow.hxx b/Code/Tools/LuaIDE/Source/LUA/LUAEditorMainWindow.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorMainWindow.hxx rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorMainWindow.hxx diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorMainWindow.ui b/Code/Tools/LuaIDE/Source/LUA/LUAEditorMainWindow.ui similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorMainWindow.ui rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorMainWindow.ui diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorPlainTextEdit.cpp b/Code/Tools/LuaIDE/Source/LUA/LUAEditorPlainTextEdit.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorPlainTextEdit.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorPlainTextEdit.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorPlainTextEdit.hxx b/Code/Tools/LuaIDE/Source/LUA/LUAEditorPlainTextEdit.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorPlainTextEdit.hxx rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorPlainTextEdit.hxx diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorSettingsDialog.cpp b/Code/Tools/LuaIDE/Source/LUA/LUAEditorSettingsDialog.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorSettingsDialog.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorSettingsDialog.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorSettingsDialog.hxx b/Code/Tools/LuaIDE/Source/LUA/LUAEditorSettingsDialog.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorSettingsDialog.hxx rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorSettingsDialog.hxx diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorSettingsDialog.ui b/Code/Tools/LuaIDE/Source/LUA/LUAEditorSettingsDialog.ui similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorSettingsDialog.ui rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorSettingsDialog.ui diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorStyleMessages.cpp b/Code/Tools/LuaIDE/Source/LUA/LUAEditorStyleMessages.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorStyleMessages.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorStyleMessages.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorStyleMessages.h b/Code/Tools/LuaIDE/Source/LUA/LUAEditorStyleMessages.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorStyleMessages.h rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorStyleMessages.h diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorSyntaxHighlighter.cpp b/Code/Tools/LuaIDE/Source/LUA/LUAEditorSyntaxHighlighter.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorSyntaxHighlighter.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorSyntaxHighlighter.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorSyntaxHighlighter.hxx b/Code/Tools/LuaIDE/Source/LUA/LUAEditorSyntaxHighlighter.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorSyntaxHighlighter.hxx rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorSyntaxHighlighter.hxx diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorView.cpp b/Code/Tools/LuaIDE/Source/LUA/LUAEditorView.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorView.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorView.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorView.hxx b/Code/Tools/LuaIDE/Source/LUA/LUAEditorView.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorView.hxx rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorView.hxx diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorView.ui b/Code/Tools/LuaIDE/Source/LUA/LUAEditorView.ui similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorView.ui rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorView.ui diff --git a/Code/Tools/Standalone/Source/LUA/LUAEditorViewMessages.h b/Code/Tools/LuaIDE/Source/LUA/LUAEditorViewMessages.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAEditorViewMessages.h rename to Code/Tools/LuaIDE/Source/LUA/LUAEditorViewMessages.h diff --git a/Code/Tools/Standalone/Source/LUA/LUALocalsTrackerMessages.h b/Code/Tools/LuaIDE/Source/LUA/LUALocalsTrackerMessages.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUALocalsTrackerMessages.h rename to Code/Tools/LuaIDE/Source/LUA/LUALocalsTrackerMessages.h diff --git a/Code/Tools/Standalone/Source/LUA/LUAStackTrackerMessages.h b/Code/Tools/LuaIDE/Source/LUA/LUAStackTrackerMessages.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAStackTrackerMessages.h rename to Code/Tools/LuaIDE/Source/LUA/LUAStackTrackerMessages.h diff --git a/Code/Tools/Standalone/Source/LUA/LUATargetContextTrackerMessages.cpp b/Code/Tools/LuaIDE/Source/LUA/LUATargetContextTrackerMessages.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUATargetContextTrackerMessages.cpp rename to Code/Tools/LuaIDE/Source/LUA/LUATargetContextTrackerMessages.cpp diff --git a/Code/Tools/Standalone/Source/LUA/LUATargetContextTrackerMessages.h b/Code/Tools/LuaIDE/Source/LUA/LUATargetContextTrackerMessages.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUATargetContextTrackerMessages.h rename to Code/Tools/LuaIDE/Source/LUA/LUATargetContextTrackerMessages.h diff --git a/Code/Tools/Standalone/Source/LUA/LUAWatchesDebuggerMessages.h b/Code/Tools/LuaIDE/Source/LUA/LUAWatchesDebuggerMessages.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/LUAWatchesDebuggerMessages.h rename to Code/Tools/LuaIDE/Source/LUA/LUAWatchesDebuggerMessages.h diff --git a/Code/Tools/Standalone/Source/LUA/ScriptCheckerAPI.h b/Code/Tools/LuaIDE/Source/LUA/ScriptCheckerAPI.h similarity index 100% rename from Code/Tools/Standalone/Source/LUA/ScriptCheckerAPI.h rename to Code/Tools/LuaIDE/Source/LUA/ScriptCheckerAPI.h diff --git a/Code/Tools/Standalone/Source/LUA/StackPanel.cpp b/Code/Tools/LuaIDE/Source/LUA/StackPanel.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/StackPanel.cpp rename to Code/Tools/LuaIDE/Source/LUA/StackPanel.cpp diff --git a/Code/Tools/Standalone/Source/LUA/StackPanel.hxx b/Code/Tools/LuaIDE/Source/LUA/StackPanel.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/StackPanel.hxx rename to Code/Tools/LuaIDE/Source/LUA/StackPanel.hxx diff --git a/Code/Tools/Standalone/Source/LUA/TargetContextButton.cpp b/Code/Tools/LuaIDE/Source/LUA/TargetContextButton.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/TargetContextButton.cpp rename to Code/Tools/LuaIDE/Source/LUA/TargetContextButton.cpp diff --git a/Code/Tools/Standalone/Source/LUA/TargetContextButton.hxx b/Code/Tools/LuaIDE/Source/LUA/TargetContextButton.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/TargetContextButton.hxx rename to Code/Tools/LuaIDE/Source/LUA/TargetContextButton.hxx diff --git a/Code/Tools/Standalone/Source/LUA/WatchesPanel.cpp b/Code/Tools/LuaIDE/Source/LUA/WatchesPanel.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LUA/WatchesPanel.cpp rename to Code/Tools/LuaIDE/Source/LUA/WatchesPanel.cpp diff --git a/Code/Tools/Standalone/Source/LUA/WatchesPanel.hxx b/Code/Tools/LuaIDE/Source/LUA/WatchesPanel.hxx similarity index 100% rename from Code/Tools/Standalone/Source/LUA/WatchesPanel.hxx rename to Code/Tools/LuaIDE/Source/LUA/WatchesPanel.hxx diff --git a/Code/Tools/Standalone/Source/LuaIDEApplication.cpp b/Code/Tools/LuaIDE/Source/LuaIDEApplication.cpp similarity index 100% rename from Code/Tools/Standalone/Source/LuaIDEApplication.cpp rename to Code/Tools/LuaIDE/Source/LuaIDEApplication.cpp diff --git a/Code/Tools/Standalone/Source/LuaIDEApplication.h b/Code/Tools/LuaIDE/Source/LuaIDEApplication.h similarity index 100% rename from Code/Tools/Standalone/Source/LuaIDEApplication.h rename to Code/Tools/LuaIDE/Source/LuaIDEApplication.h diff --git a/Code/Tools/Standalone/Source/StandaloneToolsApplication.cpp b/Code/Tools/LuaIDE/Source/StandaloneToolsApplication.cpp similarity index 100% rename from Code/Tools/Standalone/Source/StandaloneToolsApplication.cpp rename to Code/Tools/LuaIDE/Source/StandaloneToolsApplication.cpp diff --git a/Code/Tools/Standalone/Source/StandaloneToolsApplication.h b/Code/Tools/LuaIDE/Source/StandaloneToolsApplication.h similarity index 100% rename from Code/Tools/Standalone/Source/StandaloneToolsApplication.h rename to Code/Tools/LuaIDE/Source/StandaloneToolsApplication.h diff --git a/Code/Tools/Standalone/Source/Telemetry/TelemetryBus.h b/Code/Tools/LuaIDE/Source/Telemetry/TelemetryBus.h similarity index 100% rename from Code/Tools/Standalone/Source/Telemetry/TelemetryBus.h rename to Code/Tools/LuaIDE/Source/Telemetry/TelemetryBus.h diff --git a/Code/Tools/Standalone/Source/Telemetry/TelemetryComponent.cpp b/Code/Tools/LuaIDE/Source/Telemetry/TelemetryComponent.cpp similarity index 100% rename from Code/Tools/Standalone/Source/Telemetry/TelemetryComponent.cpp rename to Code/Tools/LuaIDE/Source/Telemetry/TelemetryComponent.cpp diff --git a/Code/Tools/Standalone/Source/Telemetry/TelemetryComponent.h b/Code/Tools/LuaIDE/Source/Telemetry/TelemetryComponent.h similarity index 100% rename from Code/Tools/Standalone/Source/Telemetry/TelemetryComponent.h rename to Code/Tools/LuaIDE/Source/Telemetry/TelemetryComponent.h diff --git a/Code/Tools/Standalone/Source/Telemetry/TelemetryEvent.cpp b/Code/Tools/LuaIDE/Source/Telemetry/TelemetryEvent.cpp similarity index 100% rename from Code/Tools/Standalone/Source/Telemetry/TelemetryEvent.cpp rename to Code/Tools/LuaIDE/Source/Telemetry/TelemetryEvent.cpp diff --git a/Code/Tools/Standalone/Source/Telemetry/TelemetryEvent.h b/Code/Tools/LuaIDE/Source/Telemetry/TelemetryEvent.h similarity index 100% rename from Code/Tools/Standalone/Source/Telemetry/TelemetryEvent.h rename to Code/Tools/LuaIDE/Source/Telemetry/TelemetryEvent.h diff --git a/Code/Tools/Standalone/lua_ide_files.cmake b/Code/Tools/LuaIDE/lua_ide_files.cmake similarity index 89% rename from Code/Tools/Standalone/lua_ide_files.cmake rename to Code/Tools/LuaIDE/lua_ide_files.cmake index 0b7b5c627a..e5a7948d97 100644 --- a/Code/Tools/Standalone/lua_ide_files.cmake +++ b/Code/Tools/LuaIDE/lua_ide_files.cmake @@ -7,6 +7,16 @@ # set(FILES + targetver.h + Source/StandaloneToolsApplication.cpp + Source/StandaloneToolsApplication.h + Source/Editor/Resource.h + Source/Editor/targetver.h + Source/Telemetry/TelemetryBus.h + Source/Telemetry/TelemetryComponent.cpp + Source/Telemetry/TelemetryComponent.h + Source/Telemetry/TelemetryEvent.cpp + Source/Telemetry/TelemetryEvent.h Source/LuaIDEApplication.h Source/LuaIDEApplication.cpp Source/AssetDatabaseLocationListener.h diff --git a/Code/Tools/Standalone/targetver.h b/Code/Tools/LuaIDE/targetver.h similarity index 100% rename from Code/Tools/Standalone/targetver.h rename to Code/Tools/LuaIDE/targetver.h diff --git a/Code/Tools/SerializeContextTools/Converter.cpp b/Code/Tools/SerializeContextTools/Converter.cpp index 294bf941ac..086d444197 100644 --- a/Code/Tools/SerializeContextTools/Converter.cpp +++ b/Code/Tools/SerializeContextTools/Converter.cpp @@ -553,8 +553,6 @@ namespace AZ rapidjson::Value(descriptor.m_reservedOS), memoryDoc.GetAllocator()); memoryDoc.AddMember(rapidjson::StringRef("reservedDebug"), rapidjson::Value(descriptor.m_reservedDebug), memoryDoc.GetAllocator()); - memoryDoc.AddMember(rapidjson::StringRef("enableDrilling"), - rapidjson::Value(descriptor.m_enableDrilling), memoryDoc.GetAllocator()); documents.emplace_back(AZStd::move(memoryFilePath.Native()), AZStd::move(memoryDoc)); return true; diff --git a/Code/Tools/Standalone/Platform/Common/Unimplemented/Source/Driller/EvenTrace/EventTraceDataAggregator_Unimplemented.cpp b/Code/Tools/Standalone/Platform/Common/Unimplemented/Source/Driller/EvenTrace/EventTraceDataAggregator_Unimplemented.cpp deleted file mode 100644 index ed7b8f215d..0000000000 --- a/Code/Tools/Standalone/Platform/Common/Unimplemented/Source/Driller/EvenTrace/EventTraceDataAggregator_Unimplemented.cpp +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -class QString; - -namespace Driller -{ - namespace Platform - { - void LaunchExplorerSelect(const QString& filePath) - { - } - } -} diff --git a/Code/Tools/Standalone/Platform/Linux/profiler_linux_files.cmake b/Code/Tools/Standalone/Platform/Linux/profiler_linux_files.cmake deleted file mode 100644 index 35ab1449e2..0000000000 --- a/Code/Tools/Standalone/Platform/Linux/profiler_linux_files.cmake +++ /dev/null @@ -1,12 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(FILES - ../Common/Unimplemented/Source/StandaloneApplication_Unimplemented.cpp - ../Common/Unimplemented/Source/Driller/EvenTrace/EventTraceDataAggregator_Unimplemented.cpp -) diff --git a/Code/Tools/Standalone/Platform/Mac/Source/Driller/EvenTrace/EventTraceDataAggregator_Mac.cpp b/Code/Tools/Standalone/Platform/Mac/Source/Driller/EvenTrace/EventTraceDataAggregator_Mac.cpp deleted file mode 100644 index b553a34cf4..0000000000 --- a/Code/Tools/Standalone/Platform/Mac/Source/Driller/EvenTrace/EventTraceDataAggregator_Mac.cpp +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include -#include - -namespace Driller -{ - namespace Platform - { - void LaunchExplorerSelect(const QString& filePath) - { - QProcess::startDetached("/usr/bin/osascript", {"-e", - QStringLiteral("tell application \"Finder\" to reveal POSIX file \"%1\"").arg(QDir::toNativeSeparators(filePath))}); - QProcess::startDetached("/usr/bin/osascript", {"-e", - QStringLiteral("tell application \"Finder\" to activate")}); - } - } -} diff --git a/Code/Tools/Standalone/Platform/Mac/profiler_mac_files.cmake b/Code/Tools/Standalone/Platform/Mac/profiler_mac_files.cmake deleted file mode 100644 index 287c402800..0000000000 --- a/Code/Tools/Standalone/Platform/Mac/profiler_mac_files.cmake +++ /dev/null @@ -1,12 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(FILES - Source/StandaloneApplication_Mac.cpp - Source/Driller/EvenTrace/EventTraceDataAggregator_Mac.cpp -) diff --git a/Code/Tools/Standalone/Platform/Windows/Source/Driller/EvenTrace/EventTraceDataAggregator_Windows.cpp b/Code/Tools/Standalone/Platform/Windows/Source/Driller/EvenTrace/EventTraceDataAggregator_Windows.cpp deleted file mode 100644 index 2d13b89f6f..0000000000 --- a/Code/Tools/Standalone/Platform/Windows/Source/Driller/EvenTrace/EventTraceDataAggregator_Windows.cpp +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include - -namespace Driller -{ - namespace Platform - { - void LaunchExplorerSelect(const QString& filePath) - { - QString windowsPath = filePath; - windowsPath.replace('/', "\\"); - QProcess process; - process.start("explorer", { " /select," + windowsPath }); - process.waitForFinished(); - } - } -} diff --git a/Code/Tools/Standalone/Platform/Windows/profiler_windows_files.cmake b/Code/Tools/Standalone/Platform/Windows/profiler_windows_files.cmake deleted file mode 100644 index e1c9257a8e..0000000000 --- a/Code/Tools/Standalone/Platform/Windows/profiler_windows_files.cmake +++ /dev/null @@ -1,13 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(FILES - ../../Source/Editor/ProfilerEditor.rc - Source/StandaloneApplication_Windows.cpp - Source/Driller/EvenTrace/EventTraceDataAggregator_Windows.cpp -) diff --git a/Code/Tools/Standalone/Source/Editor/ProfilerEditor.cpp b/Code/Tools/Standalone/Source/Editor/ProfilerEditor.cpp deleted file mode 100644 index 6ad05a08b2..0000000000 --- a/Code/Tools/Standalone/Source/Editor/ProfilerEditor.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include "ProfilerEditor.h" -#include - -#if defined(AZ_COMPILER_MSVC) -#include "resource.h" -#endif - -#include -#include -#include - -// Editor.cpp : Defines the entry point for the application. - -int main(int argc, char* argv[]) -{ - // here we free the console (and close the console window) in release. - - int exitCode = 0; - - { - if (!AZ::AllocatorInstance::IsReady()) - { - AZ::AllocatorInstance::Create(); - } - - AZStd::unique_ptr fileIO = AZStd::unique_ptr(aznew AZ::IO::LocalFileIO()); - AZ::IO::FileIOBase::SetInstance(fileIO.get()); - - Driller::Application app(argc, argv); - - QString procName; - { - QCoreApplication qca(argc, argv); - procName = QFileInfo(qca.applicationFilePath()).fileName(); - } - - LegacyFramework::ApplicationDesc desc(procName.toUtf8().data(), argc, argv); - desc.m_applicationModule = NULL; - desc.m_enableProjectManager = false; - - exitCode = app.Run(desc); - // this call will block until someone tells the core app to shut down via a bus message. - // the bus message is usually sent (in gui mode) in response to pressing the quit button or something. - // in an app that does not require GUI to be manufactured or use GUI windows, you should still call RUN - // but make a component which does your processing, in response to RestoreState(). in the CoreMessages bus. - // RestoreState will always be called right before the main message pump activates. - // and will then block until someone calls: - /*EBUS_EVENT(UIFramework::FrameworkMessages::Bus, UserWantsToQuit); */ - // so ideally to make a file processor or something, simply call app.Initialize(.... but with false as the gui mode ... ) - // and make at least one component which starts processing in response to CoreMessages::RestoreState(), and then sends UserWantsToQuit() once it has done its processing. - // calling UserWantsToQuit will simply queue the quit, so its safe to call from any thread. - // your components can query EBUS_EVENT_RESULT(res, LegacyFramework::FrameworkApplicationMessages::IsRunningInGUIMode) to determine - // if its in GUI mode or not. - } - - return exitCode; -} diff --git a/Code/Tools/Standalone/Source/Editor/ProfilerEditor.h b/Code/Tools/Standalone/Source/Editor/ProfilerEditor.h deleted file mode 100644 index d2963c0bf0..0000000000 --- a/Code/Tools/Standalone/Source/Editor/ProfilerEditor.h +++ /dev/null @@ -1,9 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#pragma once diff --git a/Code/Tools/Standalone/Source/Editor/ProfilerEditor.rc b/Code/Tools/Standalone/Source/Editor/ProfilerEditor.rc deleted file mode 100644 index 558be5df81..0000000000 Binary files a/Code/Tools/Standalone/Source/Editor/ProfilerEditor.rc and /dev/null differ diff --git a/Code/Tools/Standalone/Source/Editor/profile_icon.ico b/Code/Tools/Standalone/Source/Editor/profile_icon.ico deleted file mode 100644 index 818eef381f..0000000000 --- a/Code/Tools/Standalone/Source/Editor/profile_icon.ico +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b4863291cd214b33baf55b42e4184e6e2d6de02bcc621d6b037f5d1aab7b978a -size 2238 diff --git a/Code/Tools/Standalone/standalone_tools_files.cmake b/Code/Tools/Standalone/standalone_tools_files.cmake deleted file mode 100644 index d463f932a7..0000000000 --- a/Code/Tools/Standalone/standalone_tools_files.cmake +++ /dev/null @@ -1,20 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(FILES - targetver.h - Source/StandaloneToolsApplication.cpp - Source/StandaloneToolsApplication.h - Source/Editor/Resource.h - Source/Editor/targetver.h - Source/Telemetry/TelemetryBus.h - Source/Telemetry/TelemetryComponent.cpp - Source/Telemetry/TelemetryComponent.h - Source/Telemetry/TelemetryEvent.cpp - Source/Telemetry/TelemetryEvent.h -) diff --git a/Gems/AWSCore/Code/Tests/Editor/Attribution/AWSCoreAttributionManagerTest.cpp b/Gems/AWSCore/Code/Tests/Editor/Attribution/AWSCoreAttributionManagerTest.cpp index 37a8c0f6d4..e996e0b9c0 100644 --- a/Gems/AWSCore/Code/Tests/Editor/Attribution/AWSCoreAttributionManagerTest.cpp +++ b/Gems/AWSCore/Code/Tests/Editor/Attribution/AWSCoreAttributionManagerTest.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include diff --git a/Gems/AssetMemoryAnalyzer/CMakeLists.txt b/Gems/AssetMemoryAnalyzer/CMakeLists.txt deleted file mode 100644 index 2bb380fae3..0000000000 --- a/Gems/AssetMemoryAnalyzer/CMakeLists.txt +++ /dev/null @@ -1,9 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -add_subdirectory(Code) diff --git a/Gems/AssetMemoryAnalyzer/Code/CMakeLists.txt b/Gems/AssetMemoryAnalyzer/Code/CMakeLists.txt deleted file mode 100644 index 32eada9614..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/CMakeLists.txt +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -ly_add_target( - NAME AssetMemoryAnalyzer.Static STATIC - NAMESPACE Gem - FILES_CMAKE - assetmemoryanalyzer_files.cmake - INCLUDE_DIRECTORIES - PRIVATE - Source - PUBLIC - Include - BUILD_DEPENDENCIES - PUBLIC - AZ::AzCore - Legacy::CryCommon - Gem::ImGui.Static -) - -ly_add_target( - NAME AssetMemoryAnalyzer ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE} - NAMESPACE Gem - FILES_CMAKE - assetmemoryanalyzer_shared_files.cmake - INCLUDE_DIRECTORIES - PRIVATE - Source - PUBLIC - Include - BUILD_DEPENDENCIES - PRIVATE - Gem::AssetMemoryAnalyzer.Static - RUNTIME_DEPENDENCIES - Gem::ImGui -) - -# AssetMemoryAnalyzer is available in clients and servers. -ly_create_alias(NAME AssetMemoryAnalyzer.Clients NAMESPACE Gem TARGETS Gem::AssetMemoryAnalyzer) -ly_create_alias(NAME AssetMemoryAnalyzer.Servers NAMESPACE Gem TARGETS Gem::AssetMemoryAnalyzer) - -################################################################################ -# Tests -################################################################################ -if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) - ly_add_target( - NAME AssetMemoryAnalyzer.Tests ${PAL_TRAIT_TEST_TARGET_TYPE} - NAMESPACE Gem - FILES_CMAKE - assetmemoryanalyzer_tests_files.cmake - INCLUDE_DIRECTORIES - PRIVATE - Source - Tests - BUILD_DEPENDENCIES - PRIVATE - AZ::AzTest - Gem::AssetMemoryAnalyzer.Static - ) - ly_add_googletest( - NAME Gem::AssetMemoryAnalyzer.Tests - ) -endif() - diff --git a/Gems/AssetMemoryAnalyzer/Code/Include/AssetMemoryAnalyzer/AssetMemoryAnalyzerBus.h b/Gems/AssetMemoryAnalyzer/Code/Include/AssetMemoryAnalyzer/AssetMemoryAnalyzerBus.h deleted file mode 100644 index 465fbd18a6..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Include/AssetMemoryAnalyzer/AssetMemoryAnalyzerBus.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include - -namespace AssetMemoryAnalyzer -{ - class FrameAnalysis; - - class AssetMemoryAnalyzerRequests - : public AZ::EBusTraits - { - public: - ////////////////////////////////////////////////////////////////////////// - // EBusTraits overrides - static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single; - static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single; - ////////////////////////////////////////////////////////////////////////// - - // Enables or disables the AssetMemoryAnalyzer. - virtual void SetEnabled(bool enabled = true) = 0; - - // Exports a CSV file that may be imported into a spreadsheet. Top-level assets only, due to the limitations of CSV. Path is optional, defaults to @log@/assetmem-.csv - virtual void ExportCSVFile(const char* path = nullptr) = 0; - - // Exports a JSON file that may be viewed by the web viewer. Path is optional, defaults to @log@/assetmem-.json - virtual void ExportJSONFile(const char* path = nullptr) = 0; - - // Retrieves a frame analysis. (Generally used for testing purposes; use of the gem's private headers are required to inspect this.) - virtual AZStd::shared_ptr GetAnalysis() = 0; - }; - using AssetMemoryAnalyzerRequestBus = AZ::EBus; -} // namespace AssetMemoryAnalyzer diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzer.cpp b/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzer.cpp deleted file mode 100644 index 798da14aa1..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzer.cpp +++ /dev/null @@ -1,330 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include "AssetMemoryAnalyzer.h" - -#include -#include -#include -#include -#include - -/////////////////////////////////////////////////////////////////////////////// -// CodePoint hash-table support -/////////////////////////////////////////////////////////////////////////////// - -template<> -struct AZStd::hash -{ - size_t operator()(const AssetMemoryAnalyzer::Data::CodePoint& codePoint) const - { - size_t seed = 0; - AZStd::hash_combine(seed, codePoint.m_file); - AZStd::hash_combine(seed, codePoint.m_line); - - return seed; - } -}; - -namespace AssetMemoryAnalyzer -{ - namespace Data - { - inline bool operator==(const CodePoint& lhs, const CodePoint& rhs) - { - return lhs.m_file == rhs.m_file && - lhs.m_line == rhs.m_line; - } - } -} - -/////////////////////////////////////////////////////////////////////////////// -// AnalyzerImpl class -/////////////////////////////////////////////////////////////////////////////// - -namespace AssetMemoryAnalyzer -{ - class AnalyzerImpl : - public AZ::Debug::MemoryDrillerBus::Handler - { - public: - AZ_TYPE_INFO(AnalyzerImpl, "{E460E4DE-2160-4171-A4B6-3C2DB6692C32}"); - AZ_CLASS_ALLOCATOR(AnalyzerImpl, AZ::Debug::AssetTrackingAllocator, 0); - - AnalyzerImpl(); - ~AnalyzerImpl(); - - // MemoryDrillerBus - void RegisterAllocator(AZ::IAllocator* allocator) override; - void UnregisterAllocator(AZ::IAllocator* allocator) override; - void DumpAllAllocations() override; - void RegisterAllocation(AZ::IAllocator* allocator, void* address, size_t byteSize, size_t alignment, const char* name, const char* fileName, int lineNum, unsigned int stackSuppressCount) override; - void UnregisterAllocation(AZ::IAllocator* allocator, void* address, size_t byteSize, size_t alignment, AZ::Debug::AllocationInfo* info) override; - void ReallocateAllocation(AZ::IAllocator* allocator, void* prevAddress, void* newAddress, size_t newByteSize, size_t newAlignment) override; - void ResizeAllocation(AZ::IAllocator* allocator, void* address, size_t newSize) override; - - AZStd::shared_ptr GetAnalysis(); - - private: - void RegisterAllocationCommon(void* address, size_t byteSize, const char* fileName, int lineNum, Data::AllocationData::CategoryInfo categoryInfo, Data::AllocationCategories category); - void UnregisterAllocationCommon(void* address); - - using AssetTree = AZ::Debug::AssetTree; - using AssetTreeNode = typename AssetTree::NodeType; - using AllocationTable = AZ::Debug::AllocationTable; - using CodePoints = AZStd::unordered_set, AZStd::equal_to, AZ::Debug::AZStdAssetTrackingAllocator>; - using mutex_type = AZStd::mutex; - using lock_type = AZStd::lock_guard; - - mutex_type m_mutex; - CodePoints m_codePoints; - AssetTree m_assetTree; - AllocationTable m_allocationTable; - AZ::Debug::AssetTracking m_assetTracking; - bool m_captureUncategorizedAllocations = false; - bool m_performingAnalysis = false; - }; - - - /////////////////////////////////////////////////////////////////////////////// - // AnalyzerImpl functions - /////////////////////////////////////////////////////////////////////////////// - - AnalyzerImpl::AnalyzerImpl() : - m_allocationTable(m_mutex), - m_assetTracking(&m_assetTree, &m_allocationTable) - { - AZ::Debug::MemoryDrillerBus::Handler::BusConnect(); - } - - AnalyzerImpl::~AnalyzerImpl() - { - AZ::Debug::MemoryDrillerBus::Handler::BusDisconnect(); - } - - void AnalyzerImpl::RegisterAllocator(AZ::IAllocator* allocator) - { - AZ_UNUSED(allocator); - } - - void AnalyzerImpl::UnregisterAllocator(AZ::IAllocator* allocator) - { - AZ_UNUSED(allocator); - } - - void AnalyzerImpl::DumpAllAllocations() - { - } - - void AnalyzerImpl::RegisterAllocation(AZ::IAllocator* allocator, void* address, size_t byteSize, size_t alignment, const char* name, const char* fileName, int lineNum, unsigned int stackSuppressCount) - { - AZ_UNUSED(name); - AZ_UNUSED(alignment); - AZ_UNUSED(stackSuppressCount); - - Data::AllocationData::CategoryInfo categoryInfo; - categoryInfo.m_heapInfo.m_allocator = allocator; - RegisterAllocationCommon(address, byteSize, fileName, lineNum, categoryInfo, Data::AllocationCategories::HEAP); - } - - void AnalyzerImpl::UnregisterAllocation(AZ::IAllocator* allocator, void* address, size_t byteSize, size_t alignment, AZ::Debug::AllocationInfo* info) - { - AZ_UNUSED(allocator); - AZ_UNUSED(byteSize); - AZ_UNUSED(alignment); - AZ_UNUSED(info); - - UnregisterAllocationCommon(address); - } - - void AnalyzerImpl::ReallocateAllocation(AZ::IAllocator* allocator, void* prevAddress, void* newAddress, size_t newByteSize, size_t newAlignment) - { - AZ_UNUSED(allocator); - AZ_UNUSED(newAlignment); - - if (m_performingAnalysis) - { - return; - } - - m_allocationTable.ReallocateAllocation(prevAddress, newAddress, newByteSize); - } - - void AnalyzerImpl::ResizeAllocation(AZ::IAllocator* allocator, void* address, size_t newSize) - { - AZ_UNUSED(allocator); - - if (m_performingAnalysis) - { - return; - } - - m_allocationTable.ResizeAllocation(address, newSize); - } - - void AnalyzerImpl::RegisterAllocationCommon(void* address, size_t byteSize, const char* fileName, int lineNum, Data::AllocationData::CategoryInfo categoryInfo, Data::AllocationCategories category) - { - if (m_performingAnalysis) - { - return; - } - - AZ::Debug::AssetTreeNodeBase* activeAsset = m_assetTracking.GetCurrentThreadAsset(); - - if (!activeAsset) - { - if (m_captureUncategorizedAllocations) - { - activeAsset = &m_assetTree.GetRoot(); - } - else - { - return; - } - } - - { - // Store a record for this allocation, at this code-point - lock_type lock(m_mutex); - auto insertResult = m_codePoints.emplace(Data::CodePoint{ fileName ? fileName : "", lineNum, category }); - Data::CodePoint* cp = &*insertResult.first; - m_allocationTable.Get().emplace(address, AllocationTable::RecordType{ activeAsset, (uint32_t)byteSize, Data::AllocationData{ cp, categoryInfo } }); - static_cast(activeAsset)->m_data.m_totalAllocations[(int)category]++; - } - } - - void AnalyzerImpl::UnregisterAllocationCommon(void* address) - { - if (m_performingAnalysis) - { - return; - } - - { - // Delete the record of this allocation if it exists - lock_type lock(m_mutex); - auto& table = m_allocationTable.Get(); - auto itr = table.find(address); - - if (itr != table.end()) - { - static_cast(itr->second.m_asset)->m_data.m_totalAllocations[(int)itr->second.m_data.m_codePoint->m_category]--; - table.erase(address); - } - } - } - - AZStd::shared_ptr AnalyzerImpl::GetAnalysis() - { - using namespace Data; - - lock_type lock(m_mutex); - m_performingAnalysis = true; // Prevent recursive allocations from disrupting our work - - auto result = AZStd::allocate_shared(AZ::Debug::AZStdAssetTrackingAllocator()); - FrameAnalysis* analysis = result.get(); - - // Walk through all allocations and record their individual contributions to the analysisData for their owning asset - for (auto& allocationInfo : m_allocationTable.Get()) - { - auto assetData = &static_cast(allocationInfo.second.m_asset)->m_data; - auto category = allocationInfo.second.m_data.m_codePoint->m_category; - - // Update total bytes for this asset - assetData->m_totalBytes[(int)category] += allocationInfo.second.m_size; - - // Locate or create a recording of this code point within the analysis for this asset - auto codePointItr = assetData->m_codePointsToAllocations.find(allocationInfo.second.m_data.m_codePoint); - - if (codePointItr == assetData->m_codePointsToAllocations.end()) - { - codePointItr = assetData->m_codePointsToAllocations.emplace(allocationInfo.second.m_data.m_codePoint, AssetData::CodePointInfo()).first; - codePointItr->second.m_category = category; - } - - // Update the code point within the analysis for this asset with information about this allocation - codePointItr->second.m_allocations.emplace_back(AllocationPoint::AllocationInfo{ allocationInfo.second.m_size }); - codePointItr->second.m_totalBytes += allocationInfo.second.m_size; - } - - // Declare function to recurse through the asset tree, converting the analysisData of every node into matching information in the public API (AssetMemory:: namespace) - AZStd::function recurse; - recurse = [&recurse](AssetInfo* outAsset, AssetTreeNode* inAsset, int depth) - { - outAsset->m_id = inAsset->m_primaryinfo ? inAsset->m_primaryinfo->m_id->m_id.c_str() : nullptr; - - // For every code point in this asset node, record its allocations - for (auto& codePointInfo : inAsset->m_data.m_codePointsToAllocations) - { - outAsset->m_allocationPoints.emplace_back(AllocationPoint()); - auto allocationPoint = &outAsset->m_allocationPoints.back(); - allocationPoint->m_codePoint = codePointInfo.first; - allocationPoint->m_allocations.swap(codePointInfo.second.m_allocations); - allocationPoint->m_totalAllocatedMemory = codePointInfo.second.m_totalBytes; - - // Add these allocations to our total count of allocations for this asset - int categoryIndex = (int)codePointInfo.first->m_category; - outAsset->m_localSummary[categoryIndex].m_allocationCount += (uint32_t)allocationPoint->m_allocations.size(); - - // Reserve memory for the next frame, as the number of allocations are unlikely to change much over time - codePointInfo.second.m_allocations.reserve(allocationPoint->m_allocations.size()); - codePointInfo.second.m_totalBytes = 0; // Reset for next frame - } - - // Initialize the local and total summary - for (int categoryIndex = 0; categoryIndex < ALLOCATION_CATEGORY_COUNT; categoryIndex++) - { - outAsset->m_localSummary[categoryIndex].m_allocatedMemory = inAsset->m_data.m_totalBytes[categoryIndex]; - outAsset->m_totalSummary[categoryIndex] = outAsset->m_localSummary[categoryIndex]; - } - - // Recurse over child assets - outAsset->m_childAssets.resize(inAsset->m_children.size()); - size_t childIdx = 0; - - for (auto& inChildItr : inAsset->m_children) - { - auto outChild = &outAsset->m_childAssets[childIdx++]; - recurse(outChild, &inChildItr.second, depth + 1); - - // Have child assets contribute to the total summary - for (int categoryIndex = 0; categoryIndex < ALLOCATION_CATEGORY_COUNT; categoryIndex++) - { - outAsset->m_totalSummary[categoryIndex].m_allocatedMemory += outChild->m_totalSummary[categoryIndex].m_allocatedMemory; - outAsset->m_totalSummary[categoryIndex].m_allocationCount += outChild->m_totalSummary[categoryIndex].m_allocationCount; - } - } - - // Clear analysis data out for the next frame - AZStd::for_each(inAsset->m_data.m_totalBytes, inAsset->m_data.m_totalBytes + ALLOCATION_CATEGORY_COUNT, [](uint32_t& x) { x = 0; }); - }; - - recurse(&analysis->m_rootAsset, static_cast(&m_assetTree.GetRoot()), 0); - - m_performingAnalysis = false; - - return result; - } - - /////////////////////////////////////////////////////////////////////////////// - // Analyzer functions - /////////////////////////////////////////////////////////////////////////////// - - Analyzer::Analyzer() : m_impl(aznew AnalyzerImpl) - { - } - - Analyzer::~Analyzer() - { - } - - AZStd::shared_ptr Analyzer::GetAnalysis() - { - return m_impl->GetAnalysis(); - } -} diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzer.h b/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzer.h deleted file mode 100644 index 408f2f7f7e..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzer.h +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include -#include -#include -#include -#include - -namespace AssetMemoryAnalyzer -{ - class AnalyzerImpl; - - namespace Data - { - enum class AllocationCategories - { - HEAP, - VRAM, - - COUNT - }; - - constexpr int ALLOCATION_CATEGORY_COUNT = (int)AllocationCategories::COUNT; - - // A location in code - struct CodePoint - { - const char* m_file; - int m_line; - AllocationCategories m_category; - }; - - // Meta-information to attach to an individual allocation - struct AllocationData - { - union CategoryInfo - { - struct - { - AZ::IAllocator* m_allocator; - } - m_heapInfo; - }; - - CodePoint* m_codePoint; - CategoryInfo m_categoryInfo; - }; - - // Information about a point in code where allocations occur - struct AllocationPoint - { - struct AllocationInfo - { - // Size in bytes - uint32_t m_size; - }; - - using AllocationInfos = AZStd::vector; - - // The point in code where allocations occur - const CodePoint* m_codePoint; - - // Total memory allocated through this code point (will be the sum of m_allocations) - uint32_t m_totalAllocatedMemory = 0; - - // Individual allocations that occurred through this code point - AllocationInfos m_allocations; - }; - - // Summary information about a group of allocations - struct Summary - { - // Total bytes allocated in the group - uint32_t m_allocatedMemory = 0; - - // Total number of separate allocations in the group - uint32_t m_allocationCount = 0; - }; - - // Information about an asset - struct AssetData - { - struct CodePointInfo - { - AllocationPoint::AllocationInfos m_allocations; - uint32_t m_totalBytes = 0; - AllocationCategories m_category; - }; - - uint32_t m_totalAllocations[ALLOCATION_CATEGORY_COUNT]; - uint32_t m_totalBytes[ALLOCATION_CATEGORY_COUNT]; - AZStd::unordered_map, AZStd::equal_to, AZ::Debug::AZStdAssetTrackingAllocator> m_codePointsToAllocations; - }; - - // Information about a specific asset. - struct AssetInfo - { - // Identifier for the asset. - const char* m_id = nullptr; - - // Total allocations/bytes for this asset, including allocations for any child assets. - Summary m_totalSummary[ALLOCATION_CATEGORY_COUNT]; - - // Total allocations/bytes for this asset alone, excluding allocations for child assets. - Summary m_localSummary[ALLOCATION_CATEGORY_COUNT]; - - // Child assets (i.e. assets that enter into scope while this asset is already in scope) - AZStd::vector m_childAssets; - - // Points in code at which this asset has made allocations - AZStd::vector m_allocationPoints; - }; - - typedef AZStd::vector AllocationPoints; - } - - // Analysis of all loaded assets at a moment in time - class FrameAnalysis - { - public: - AZ_TYPE_INFO(FrameAnalysis, "{6B7287A6-EE5E-4A9D-B219-586DAD865537}"); - AZ_CLASS_ALLOCATOR(FrameAnalysis, AZ::Debug::AssetTrackingAllocator, 0); - - const Data::AssetInfo& GetRootAsset() const - { - return m_rootAsset; - } - - const Data::AllocationPoints& GetAllocationPoints() const - { - return m_allocationPoints; - } - - private: - Data::AssetInfo m_rootAsset; - Data::AllocationPoints m_allocationPoints; - - friend AnalyzerImpl; - }; - - class Analyzer - { - public: - AZ_TYPE_INFO(Analyzer, "{00FB30E2-706C-41E6-9BDD-F52A40CF3366}"); - AZ_CLASS_ALLOCATOR(Analyzer, AZ::Debug::AssetTrackingAllocator, 0); - - Analyzer(); - ~Analyzer(); - - AZStd::shared_ptr GetAnalysis(); - - private: - AZStd::unique_ptr m_impl; - }; -} diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzerModule.cpp b/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzerModule.cpp deleted file mode 100644 index 668c8a5b33..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzerModule.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include - -#include - -#include "AssetMemoryAnalyzerSystemComponent.h" - -#include - -namespace AssetMemoryAnalyzer -{ - class AssetMemoryAnalyzerModule - : public CryHooksModule - { - public: - AZ_RTTI(AssetMemoryAnalyzerModule, "{899B0A20-E21D-49BF-ADAF-A2396C27CFCC}", CryHooksModule); - AZ_CLASS_ALLOCATOR(AssetMemoryAnalyzerModule, AZ::OSAllocator, 0); - - AssetMemoryAnalyzerModule() - : CryHooksModule() - { - // Push results of [MyComponent]::CreateDescriptor() into m_descriptors here. - m_descriptors.insert(m_descriptors.end(), { - AssetMemoryAnalyzerSystemComponent::CreateDescriptor(), - }); - } - - /** - * Add required SystemComponents to the SystemEntity. - */ - AZ::ComponentTypeList GetRequiredSystemComponents() const override - { - return AZ::ComponentTypeList{ - azrtti_typeid(), - }; - } - - void OnCrySystemInitialized([[maybe_unused]] ISystem& system, [[maybe_unused]] const SSystemInitParams& systemInitParams) override - { - REGISTER_CVAR2_CB_DEV_ONLY( - "assetmem_enabled", - &m_cvarEnabled, - 0, - VF_NULL, - "AssetMemoryAnalyzer: Enable or disable the Asset Memory Analyzer.", - [](ICVar* pArgs) - { - bool enabled = pArgs->GetIVal() ? true : false; - EBUS_EVENT(AssetMemoryAnalyzerRequestBus, SetEnabled, enabled); - } - ); - - REGISTER_COMMAND_DEV_ONLY( - "assetmem_export_json", - [](IConsoleCmdArgs*) { EBUS_EVENT(AssetMemoryAnalyzerRequestBus, ExportJSONFile, nullptr); }, - 0, - "AssetMemoryAnalyzer: Export JSON analysis to @log@ directory."); - - REGISTER_COMMAND_DEV_ONLY( - "assetmem_export_csv", - [](IConsoleCmdArgs*) { EBUS_EVENT(AssetMemoryAnalyzerRequestBus, ExportCSVFile, nullptr); }, - 0, - "AssetMemoryAnalyzer: Export CSV analysis to @log@ directory. (Top-level assets only.)"); - - EBUS_EVENT(AssetMemoryAnalyzerRequestBus, SetEnabled, m_cvarEnabled != 0); - } - - private: - int m_cvarEnabled = 0; - }; -} - -// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM -// The first parameter should be GemName_GemIdLower -// The second should be the fully qualified name of the class above -AZ_DECLARE_MODULE_CLASS(Gem_AssetMemoryAnalyzer, AssetMemoryAnalyzer::AssetMemoryAnalyzerModule) diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzerSystemComponent.cpp b/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzerSystemComponent.cpp deleted file mode 100644 index bf03342149..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzerSystemComponent.cpp +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include - -#include -#include // For AZ_MAX_PATH_LEN -#include -#include - -#include "AssetMemoryAnalyzerSystemComponent.h" - -#include "AssetMemoryAnalyzer.h" -#include "DebugImGUI.h" -#include "ExportCSV.h" -#include "ExportJSON.h" - -namespace AssetMemoryAnalyzer -{ - namespace - { - static const char* GetExportFile(const char* customFilename, const char* extension) - { - static char sharedBuffer[AZ_MAX_PATH_LEN]; - - if (customFilename) - { - azsnprintf(sharedBuffer, AZ_ARRAY_SIZE(sharedBuffer), "@log@/%s", customFilename); - } - else - { - time_t ltime; - time(<ime); - struct tm timeInfo; - AZ_TRAIT_CTIME_LOCALTIME(&timeInfo, <ime); - strftime(sharedBuffer, AZ_ARRAY_SIZE(sharedBuffer), "@log@/assetmem-%Y-%m-%d-%H-%M-%S.", &timeInfo); - azstrcat(sharedBuffer, AZ_ARRAY_SIZE(sharedBuffer), extension); - } - - return sharedBuffer; - } - } - - static const char* VRAM_CATEGORIES[] = - { - "Texture", - "Buffer", - "Misc" - }; - - static const char* VRAM_SUBCATEGORIES[] = - { - "Rendertarget", - "Texture", - "Dynamic", - "VB", - "IB", - "CB", - "Other", - "Misc" - }; - - class AssetMemoryAnalyzerSystemComponent::Impl - { - private: - AZStd::unique_ptr m_analyzer; - DebugImGUI m_debugImGUI; - ExportCSV m_exportCSV; - ExportJSON m_exportJSON; - - friend class AssetMemoryAnalyzerSystemComponent; - }; - - - AssetMemoryAnalyzerSystemComponent::AssetMemoryAnalyzerSystemComponent() : m_impl(new Impl) - { - AZ::AllocatorInstance::Create(); - } - - AssetMemoryAnalyzerSystemComponent::~AssetMemoryAnalyzerSystemComponent() - { - m_impl.reset(); // Must delete objects before destroying the allocator - AZ::AllocatorInstance::Destroy(); - } - - void AssetMemoryAnalyzerSystemComponent::Reflect(AZ::ReflectContext* context) - { - if (AZ::SerializeContext* serialize = azrtti_cast(context)) - { - serialize->Class() - ->Version(0); - - if (AZ::EditContext* ec = serialize->GetEditContext()) - { - ec->Class("AssetMemoryAnalyzer", "Provides access to asset memory debugging features") - ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("System", 0xc94d118b)) - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ; - } - } - } - - void AssetMemoryAnalyzerSystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) - { - provided.push_back(AZ_CRC("AssetMemoryAnalyzerService", 0x23c52412)); - } - - void AssetMemoryAnalyzerSystemComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible) - { - incompatible.push_back(AZ_CRC("AssetMemoryAnalyzerService", 0x23c52412)); - } - - void AssetMemoryAnalyzerSystemComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required) - { - (void)required; - } - - void AssetMemoryAnalyzerSystemComponent::GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent) - { - (void)dependent; - } - - const char** AssetMemoryAnalyzerSystemComponent::GetVRAMCategories() - { - return VRAM_CATEGORIES; - } - - const char** AssetMemoryAnalyzerSystemComponent::GetVRAMSubCategories() - { - return VRAM_SUBCATEGORIES; - } - - bool AssetMemoryAnalyzerSystemComponent::IsEnabled() const - { - return m_impl->m_analyzer.get() != nullptr; - } - - AZStd::shared_ptr AssetMemoryAnalyzerSystemComponent::GetAnalysis() - { - AZStd::shared_ptr result; - - if (m_impl->m_analyzer) - { - result = m_impl->m_analyzer->GetAnalysis(); - } - - return result; - } - - void AssetMemoryAnalyzerSystemComponent::SetEnabled(bool enabled) - { - if (enabled) - { - if (!m_impl->m_analyzer) - { - m_impl->m_analyzer.reset(aznew Analyzer); - } - } - else - { - m_impl->m_analyzer.reset(); - } - } - - void AssetMemoryAnalyzerSystemComponent::ExportCSVFile(const char* path) - { - const char* outputPath = GetExportFile(path, "csv"); - m_impl->m_exportCSV.OutputCSV(outputPath); - } - - void AssetMemoryAnalyzerSystemComponent::ExportJSONFile(const char* path) - { - const char* outputPath = GetExportFile(path, "json"); - m_impl->m_exportJSON.OutputJSON(outputPath); - } - - void AssetMemoryAnalyzerSystemComponent::Init() - { - m_impl->m_debugImGUI.Init(this); - m_impl->m_exportCSV.Init(this); - m_impl->m_exportJSON.Init(this); - } - - void AssetMemoryAnalyzerSystemComponent::Activate() - { - AssetMemoryAnalyzerRequestBus::Handler::BusConnect(); - } - - void AssetMemoryAnalyzerSystemComponent::Deactivate() - { - AssetMemoryAnalyzerRequestBus::Handler::BusDisconnect(); - } -} diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzerSystemComponent.h b/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzerSystemComponent.h deleted file mode 100644 index 4255205b27..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Source/AssetMemoryAnalyzerSystemComponent.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include - -#include -#include - -namespace AssetMemoryAnalyzer -{ - class FrameAnalysis; - - class AssetMemoryAnalyzerSystemComponent - : public AZ::Component - , protected AssetMemoryAnalyzerRequestBus::Handler - { - public: - AZ_COMPONENT(AssetMemoryAnalyzerSystemComponent, "{84428E10-24FF-48A7-B5EC-0A28D25C3C68}"); - - AssetMemoryAnalyzerSystemComponent(); - ~AssetMemoryAnalyzerSystemComponent(); - - static void Reflect(AZ::ReflectContext* context); - - static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided); - static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible); - static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required); - static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent); - - static const char** GetVRAMCategories(); - static const char** GetVRAMSubCategories(); - - bool IsEnabled() const; - - //////////////////////////////////////////////////////////////////////// - // AssetMemoryAnalyzerRequestBus interface implementation - void SetEnabled(bool enabled) override; - void ExportCSVFile(const char* path) override; - void ExportJSONFile(const char* path) override; - AZStd::shared_ptr GetAnalysis() override; - //////////////////////////////////////////////////////////////////////// - - protected: - //////////////////////////////////////////////////////////////////////// - // AZ::Component interface implementation - void Init() override; - void Activate() override; - void Deactivate() override; - //////////////////////////////////////////////////////////////////////// - - private: - class Impl; - - private: - AZStd::unique_ptr m_impl; - }; -} diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/DebugImGUI.cpp b/Gems/AssetMemoryAnalyzer/Code/Source/DebugImGUI.cpp deleted file mode 100644 index c9c123cf70..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Source/DebugImGUI.cpp +++ /dev/null @@ -1,272 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include "AssetMemoryAnalyzer.h" -#include "AssetMemoryAnalyzerSystemComponent.h" -#include "DebugImGUI.h" -#include "FormatUtils.h" - -#include -#include -#include -#include - -namespace AssetMemoryAnalyzer -{ - namespace - { - template - struct SortFunctions - { - static bool SortChildAssetsByAllocatedMemory(const Data::AssetInfo* lhs, const Data::AssetInfo* rhs) - { - return lhs->m_totalSummary[(int)Category].m_allocatedMemory > rhs->m_totalSummary[(int)Category].m_allocatedMemory; - } - - static bool SortAllocationPointsByAllocatedMemory(const Data::AllocationPoint* lhs, const Data::AllocationPoint* rhs) - { - return (lhs->m_codePoint->m_category == rhs->m_codePoint->m_category) ? (lhs->m_totalAllocatedMemory > rhs->m_totalAllocatedMemory) : (lhs->m_codePoint->m_category == Category); - } - - static bool SortChildAssetsByAllocationCount(const Data::AssetInfo* lhs, const Data::AssetInfo* rhs) - { - return lhs->m_totalSummary[(int)Category].m_allocationCount > rhs->m_totalSummary[(int)Category].m_allocationCount; - } - - static bool SortAllocationPointsByAllocationCount(const Data::AllocationPoint* lhs, const Data::AllocationPoint* rhs) - { - return (lhs->m_codePoint->m_category == rhs->m_codePoint->m_category) ? (lhs->m_allocations.size() > rhs->m_allocations.size()) : (lhs->m_codePoint->m_category == Category); - } - - }; - } - - static const ImVec4 COLUMN_HEADER_COLOR(0.7f, 0.4f, 0.2f, 1.0f); - static const float COLUMN_WIDTH = 128.0f; - - DebugImGUI::DebugImGUI() - { - ImGui::ImGuiUpdateListenerBus::Handler::BusConnect(); - } - - DebugImGUI::~DebugImGUI() - { - ImGui::ImGuiUpdateListenerBus::Handler::BusDisconnect(); - } - - void DebugImGUI::Init(AssetMemoryAnalyzerSystemComponent* owner) - { - m_owner = owner; - m_childAssetSortFn = &SortFunctions::SortChildAssetsByAllocatedMemory; - m_allocationPointSortFn = &SortFunctions::SortAllocationPointsByAllocatedMemory; - } - - void DebugImGUI::OnImGuiUpdate() - { - using namespace Data; - - // Append to main menu at top of screen. - if (ImGui::BeginMainMenuBar()) - { - // Add new menu items. - if (ImGui::BeginMenu("AssetMemoryAnalyzer")) - { - if (ImGui::Button(m_enabled == false ? "Open" : "Close")) - { - ImGui::CloseCurrentPopup(); - m_enabled = !m_enabled; - } - - if (ImGui::Button("Export JSON")) - { - EBUS_EVENT(AssetMemoryAnalyzerRequestBus, ExportJSONFile, nullptr); - ImGui::CloseCurrentPopup(); - } - - if (ImGui::Button("Export CSV (top-level only)")) - { - EBUS_EVENT(AssetMemoryAnalyzerRequestBus, ExportCSVFile, nullptr); - ImGui::CloseCurrentPopup(); - } - - ImGui::EndMenu(); - } - - ImGui::EndMainMenuBar(); - } - - if (m_enabled) - { - // Draw the asset memory analysis window and its contents - ImGui::Begin("Asset Memory Analysis", &m_enabled); - -#ifndef AZ_TRACK_ASSET_SCOPES - ImGui::TextColored(ImColor(255, 32, 32), "Asset scope tracking disabled in code. Recompile with AZ_TRACK_ASSET_SCOPES defined (see AssetTracking.h)."); -#endif - if (!m_owner->IsEnabled()) - { - ImGui::TextColored(ImColor(255, 32, 32), "Asset memory analysis must be enabled by setting the \"assetmem_enable\" CVar to 1."); - } - - AZStd::shared_ptr analysis = m_owner->GetAnalysis(); - - if (analysis) - { - if (ImGui::Button("Heap Allocation Size")) - { - m_childAssetSortFn = &SortFunctions::SortChildAssetsByAllocatedMemory; - m_allocationPointSortFn = &SortFunctions::SortAllocationPointsByAllocatedMemory; - } - ImGui::SameLine(); - - if (ImGui::Button("Heap Allocation Count")) - { - m_childAssetSortFn = &SortFunctions::SortChildAssetsByAllocationCount; - m_allocationPointSortFn = &SortFunctions::SortAllocationPointsByAllocationCount; - } - ImGui::SameLine(); - - if (ImGui::Button("VRAM Allocation Size")) - { - m_childAssetSortFn = &SortFunctions::SortChildAssetsByAllocatedMemory; - m_allocationPointSortFn = &SortFunctions::SortAllocationPointsByAllocatedMemory; - } - ImGui::SameLine(); - - if (ImGui::Button("VRAM Allocation Count")) - { - m_childAssetSortFn = &SortFunctions::SortChildAssetsByAllocationCount; - m_allocationPointSortFn = &SortFunctions::SortAllocationPointsByAllocationCount; - } - ImGui::SameLine(); - - if (ImGui::Button("A -> Z")) - { - m_childAssetSortFn = [](const AssetInfo* lhs, const AssetInfo* rhs) { return strcmp(lhs->m_id, rhs->m_id) < 0; }; - m_allocationPointSortFn = [](const AllocationPoint* lhs, const AllocationPoint* rhs) { - int cmp = strcmp(lhs->m_codePoint->m_file, rhs->m_codePoint->m_file); - return (cmp < 0) || (cmp == 0 && lhs->m_codePoint->m_line < rhs->m_codePoint->m_line); - }; - } - - ImGui::Text("Asset/Allocation"); - ImGui::SameLine(); - ImGui::SetCursorPosX(ImGui::GetWindowWidth() - COLUMN_WIDTH * 2); - ImGui::Text("Heap (#/kB)"); - ImGui::SameLine(); - ImGui::SetCursorPosX(ImGui::GetWindowWidth() - COLUMN_WIDTH); - ImGui::Text("VRAM (#/kB)"); - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(255, 255, 32, 1.0)); - OutputLine("Totals", analysis->GetRootAsset().m_totalSummary[(int)AllocationCategories::HEAP], analysis->GetRootAsset().m_totalSummary[(int)AllocationCategories::VRAM]); - ImGui::PopStyleColor(); - - AZStd::function recurse; - recurse = [this, &recurse](const AssetInfo* asset, int depth) - { - AZStd::vector childAssetSorter; - childAssetSorter.resize(asset->m_childAssets.size()); - AZStd::transform(asset->m_childAssets.begin(), asset->m_childAssets.end(), childAssetSorter.begin(), [](const AssetInfo& ai) { return &ai; }); - AZStd::sort(childAssetSorter.begin(), childAssetSorter.end(), m_childAssetSortFn); - - m_allocationPointSorter.resize(asset->m_allocationPoints.size()); - AZStd::transform(asset->m_allocationPoints.begin(), asset->m_allocationPoints.end(), m_allocationPointSorter.begin(), [](const AllocationPoint& ap) { return ≈ }); - AZStd::sort(m_allocationPointSorter.begin(), m_allocationPointSorter.end(), m_allocationPointSortFn); - - if (asset->m_id) - { - float prevX = ImGui::GetCursorPosX(); - OutputLine(nullptr, asset->m_totalSummary[(int)AllocationCategories::HEAP], asset->m_totalSummary[(int)AllocationCategories::VRAM]); - ImGui::SameLine(); - ImGui::SetCursorPosX(prevX); - if (ImGui::TreeNode(asset->m_id)) - { - prevX = ImGui::GetCursorPosX(); - OutputLine(nullptr, asset->m_localSummary[(int)AllocationCategories::HEAP], asset->m_localSummary[(int)AllocationCategories::VRAM]); - ImGui::SameLine(); - ImGui::SetCursorPosX(prevX); - - if (ImGui::TreeNode("Scope allocations:")) - { - for (auto ap : m_allocationPointSorter) - { - Summary heapSummary; - Summary vramSummary; - - switch (ap->m_codePoint->m_category) - { - case AllocationCategories::HEAP: - ImGui::Text("%s", FormatUtils::FormatCodePoint(*ap->m_codePoint)); - heapSummary.m_allocationCount = static_cast(ap->m_allocations.size()); - heapSummary.m_allocatedMemory = ap->m_totalAllocatedMemory; - break; - - case AllocationCategories::VRAM: - ImGui::Text("%s", ap->m_codePoint->m_file); - vramSummary.m_allocationCount = static_cast(ap->m_allocations.size()); - vramSummary.m_allocatedMemory = ap->m_totalAllocatedMemory; - break; - } - - ImGui::SameLine(); - OutputLine(nullptr, heapSummary, vramSummary); - } - - ImGui::TreePop(); - } - - for (auto child : childAssetSorter) - { - recurse(child, depth + 1); - } - - ImGui::TreePop(); - } - } - else - { - for (auto child : childAssetSorter) - { - recurse(child, depth + 1); - } - } - }; - - recurse(&analysis->GetRootAsset(), 0); - } - - ImGui::End(); - } - } - - void DebugImGUI::OutputLine(const char* text, const Data::Summary& heapSummary, const Data::Summary& vramSummary) - { - if (text) - { - ImGui::Text("%s", text); - ImGui::SameLine(); - } - - ImGui::SetCursorPosX(ImGui::GetWindowWidth() - COLUMN_WIDTH * 2); - OutputField(heapSummary); - ImGui::SameLine(); - ImGui::SetCursorPosX(ImGui::GetWindowWidth() - COLUMN_WIDTH); - OutputField(vramSummary); - } - - void DebugImGUI::OutputField(const Data::Summary& summary) - { - if (summary.m_allocationCount) - { - ImGui::Text("%u / %s", summary.m_allocationCount, FormatUtils::FormatKB(summary.m_allocatedMemory)); - } - else - { - ImGui::Text("-- / --"); - } - } -} diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/DebugImGUI.h b/Gems/AssetMemoryAnalyzer/Code/Source/DebugImGUI.h deleted file mode 100644 index 406e8e9a0f..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Source/DebugImGUI.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include -#include - -namespace AssetMemoryAnalyzer -{ - namespace Data - { - struct AllocationPoint; - struct AssetInfo; - struct Summary; - } - - class AssetMemoryAnalyzerSystemComponent; - - // This class provides debug UI for the gem using ImGUI. - class DebugImGUI - : public ImGui::ImGuiUpdateListenerBus::Handler - { - public: - AZ_TYPE_INFO(AssetMemoryAnalyzer::DebugImGUI, "{D121DA34-EF16-46C2-AFC4-A1EE69DA0851}"); - AZ_CLASS_ALLOCATOR(DebugImGUI, AZ::OSAllocator, 0); - - DebugImGUI(); - ~DebugImGUI(); - - void Init(AssetMemoryAnalyzerSystemComponent* owner); - - // ImGuiUpdateListenerBus - void OnImGuiUpdate() override; - - - private: - void OutputLine(const char* text, const Data::Summary& heapSummary, const Data::Summary& vramSummary); - void OutputField(const Data::Summary& summary); - - AssetMemoryAnalyzerSystemComponent* m_owner; - bool (*m_childAssetSortFn)(const Data::AssetInfo* lhs, const Data::AssetInfo* rhs) = nullptr; - AZStd::vector m_childAssetSorter; - bool (*m_allocationPointSortFn)(const Data::AllocationPoint* lhs, const Data::AllocationPoint* rhs) = nullptr; - AZStd::vector m_allocationPointSorter; - bool m_enabled = false; - }; -} diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/ExportCSV.cpp b/Gems/AssetMemoryAnalyzer/Code/Source/ExportCSV.cpp deleted file mode 100644 index d5728b9a21..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Source/ExportCSV.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include "ExportCSV.h" - -#include "AssetMemoryAnalyzer.h" -#include "AssetMemoryAnalyzerSystemComponent.h" -#include "FormatUtils.h" - -#include - -namespace AssetMemoryAnalyzer -{ - ExportCSV::ExportCSV() - { - } - - ExportCSV::~ExportCSV() - { - } - - void ExportCSV::Init(AssetMemoryAnalyzerSystemComponent* owner) - { - m_owner = owner; - } - - void ExportCSV::OutputCSV(const char* path) - { - using namespace Data; - - AZStd::shared_ptr analysis = m_owner->GetAnalysis(); - - if (!analysis) - { - return; - } - - auto fs = AZ::IO::FileIOBase::GetDirectInstance(); - AZ::IO::HandleType hdl; - - if (!fs->Open(path, AZ::IO::OpenMode::ModeWrite, hdl)) - { - AZ_Assert(false, "Unable to open file for writing: %s", path); - } - - const AZStd::string header("Label,Heap Count,Heap kb,VRAM Count,VRAM kb\n"); - fs->Write(hdl, header.c_str(), header.length()); - char lineBuffer[4096]; - const auto& rootAsset = analysis->GetRootAsset(); - - size_t length = snprintf(lineBuffer, sizeof(lineBuffer), ",%d,%0.2f,%d,%0.2f\n", - rootAsset.m_localSummary[(int)AllocationCategories::HEAP].m_allocationCount, - rootAsset.m_localSummary[(int)AllocationCategories::HEAP].m_allocatedMemory / 1024.0f, - rootAsset.m_localSummary[(int)AllocationCategories::VRAM].m_allocationCount, - rootAsset.m_localSummary[(int)AllocationCategories::VRAM].m_allocatedMemory / 1024.0f - ); - fs->Write(hdl, lineBuffer, length); - - for (const auto& child : analysis->GetRootAsset().m_childAssets) - { - length = snprintf(lineBuffer, sizeof(lineBuffer), "%s,%d,%0.2f,%d,%0.2f\n", - child.m_id, - child.m_totalSummary[(int)AllocationCategories::HEAP].m_allocationCount, - child.m_totalSummary[(int)AllocationCategories::HEAP].m_allocatedMemory / 1024.0f, - child.m_totalSummary[(int)AllocationCategories::VRAM].m_allocationCount, - child.m_totalSummary[(int)AllocationCategories::VRAM].m_allocatedMemory / 1024.0f - ); - - fs->Write(hdl, lineBuffer, length); - } - - fs->Close(hdl); - - AZ_Printf("Debug", "Exported asset allocation list to %s", path); - } -} diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/ExportCSV.h b/Gems/AssetMemoryAnalyzer/Code/Source/ExportCSV.h deleted file mode 100644 index d8d5c34ba0..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Source/ExportCSV.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include - - -namespace AssetMemoryAnalyzer -{ - class AssetMemoryAnalyzerSystemComponent; - - // This class provides the service of exporting a capture of asset memory to a JSON file that is viewable in the web viewer. - class ExportCSV - { - public: - AZ_TYPE_INFO(AssetMemoryAnalyzer::ExportCSV, "{FEA7D137-EA93-4366-85C2-DCBCE00B3376}"); - AZ_CLASS_ALLOCATOR(ExportCSV, AZ::OSAllocator, 0); - - ExportCSV(); - ~ExportCSV(); - - void Init(AssetMemoryAnalyzerSystemComponent* owner); - void OutputCSV(const char* path); - - private: - AssetMemoryAnalyzerSystemComponent* m_owner; - }; -} diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/ExportJSON.cpp b/Gems/AssetMemoryAnalyzer/Code/Source/ExportJSON.cpp deleted file mode 100644 index 9f75e62454..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Source/ExportJSON.cpp +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include "ExportJSON.h" - -#include "AssetMemoryAnalyzer.h" -#include "AssetMemoryAnalyzerSystemComponent.h" -#include "FormatUtils.h" - -#include -#include -#include -#include -#include -#include -#include -#include - -namespace AssetMemoryAnalyzer -{ - namespace - { - template - static void OutputAllocationInfo(WriterT& writer, size_t count, size_t bytes) - { - writer.StartObject(); - writer.Key("count"); - writer.Int((int)count); - writer.Key("kb"); - writer.String(FormatUtils::FormatKB(bytes)); - writer.EndObject(); - } - - template - static void OutputAllocationInfo(WriterT& writer, const Data::Summary& summary) - { - OutputAllocationInfo(writer, summary.m_allocationCount, summary.m_allocatedMemory); - } - } - - ExportJSON::ExportJSON() - { - } - - ExportJSON::~ExportJSON() - { - } - - void ExportJSON::Init(AssetMemoryAnalyzerSystemComponent* owner) - { - m_owner = owner; - } - - void ExportJSON::OutputJSON(const char* path) - { - using namespace Data; - using namespace rapidjson; - - AZStd::shared_ptr analysis = m_owner->GetAnalysis(); - - if (!analysis) - { - return; - } - - StringBuffer buff; - PrettyWriter writer(buff); - size_t idCounter = 0; - - AZStd::function recurse; - recurse = [&recurse, &writer, &idCounter](const AssetInfo& asset, int depth) - { - writer.StartObject(); - - writer.Key("id"); - writer.Int(static_cast(idCounter++)); - - writer.Key("label"); - writer.String(asset.m_id ? asset.m_id : "Root"); - - writer.Key("heap"); - OutputAllocationInfo(writer, asset.m_totalSummary[(int)AllocationCategories::HEAP]); - - writer.Key("vram"); - OutputAllocationInfo(writer, asset.m_totalSummary[(int)AllocationCategories::VRAM]); - - if (!asset.m_allocationPoints.empty() || !asset.m_childAssets.empty()) - { - writer.Key("_children"); - writer.StartArray(); - - if (!asset.m_allocationPoints.empty()) - { - writer.StartObject(); - writer.Key("id"); - writer.Int(static_cast(idCounter++)); - - writer.Key("label"); - writer.String(""); - - writer.Key("heap"); - OutputAllocationInfo(writer, asset.m_localSummary[(int)AllocationCategories::HEAP]); - - writer.Key("vram"); - OutputAllocationInfo(writer, asset.m_localSummary[(int)AllocationCategories::VRAM]); - - writer.Key("_children"); - writer.StartArray(); - - for (const auto& ap : asset.m_allocationPoints) - { - Summary heapSummary; - Summary vramSummary; - - writer.StartObject(); - writer.Key("id"); - writer.Int(static_cast(idCounter++)); - - writer.Key("label"); - - switch (ap.m_codePoint->m_category) - { - case AllocationCategories::HEAP: - writer.String(FormatUtils::FormatCodePoint(*ap.m_codePoint)); - heapSummary.m_allocationCount = static_cast(ap.m_allocations.size()); - heapSummary.m_allocatedMemory = ap.m_totalAllocatedMemory; - break; - - case AllocationCategories::VRAM: - writer.String(ap.m_codePoint->m_file); - vramSummary.m_allocationCount = static_cast(ap.m_allocations.size()); - vramSummary.m_allocatedMemory = ap.m_totalAllocatedMemory; - break; - } - - writer.Key("heap"); - OutputAllocationInfo(writer, heapSummary); - - writer.Key("vram"); - OutputAllocationInfo(writer, vramSummary); - - writer.EndObject(); - } - - writer.EndArray(); - writer.EndObject(); - } - - for (const auto& childInfo : asset.m_childAssets) - { - recurse(childInfo, depth + 1); - } - - writer.EndArray(); - } - - writer.EndObject(); - }; - - writer.StartArray(); - recurse(analysis->GetRootAsset(), 0); - writer.EndArray(); - - auto fs = AZ::IO::FileIOBase::GetDirectInstance(); - AZ::IO::HandleType hdl; - - if (!fs->Open(path, AZ::IO::OpenMode::ModeWrite, hdl)) - { - AZ_Assert(false, "Unable to open file for writing: %s", path); - } - - fs->Write(hdl, buff.GetString(), buff.GetSize()); - fs->Close(hdl); - - AZ_Printf("Debug", "Exported asset allocation map to %s", path); - } -} diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/ExportJSON.h b/Gems/AssetMemoryAnalyzer/Code/Source/ExportJSON.h deleted file mode 100644 index f8b74ec5ce..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Source/ExportJSON.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include - -namespace AssetMemoryAnalyzer -{ - class AssetMemoryAnalyzerSystemComponent; - - // This class provides the service of exporting a capture of asset memory to a JSON file that is viewable in the web viewer. - class ExportJSON - { - public: - AZ_TYPE_INFO(AssetMemoryAnalyzer::ExportJSON, "{AA85F7E0-8FAF-43BC-9C09-6411270AE3E7}"); - AZ_CLASS_ALLOCATOR(ExportJSON, AZ::OSAllocator, 0); - - ExportJSON(); - ~ExportJSON(); - - void Init(AssetMemoryAnalyzerSystemComponent* owner); - void OutputJSON(const char* path); - - private: - AssetMemoryAnalyzerSystemComponent* m_owner; - }; -} diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/FormatUtils.cpp b/Gems/AssetMemoryAnalyzer/Code/Source/FormatUtils.cpp deleted file mode 100644 index 190de6c0eb..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Source/FormatUtils.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include "FormatUtils.h" - -#include "AssetMemoryAnalyzer.h" - -#include - -namespace AssetMemoryAnalyzer -{ - namespace FormatUtils - { - const char* FormatCodePoint(const Data::CodePoint& cp) - { - static char buff[1024]; - azsnprintf(buff, sizeof(buff), "%s:%d", cp.m_file, cp.m_line); - - return buff; - } - - const char* FormatKB(size_t bytes) - { - static char buff[32]; - int len = azsnprintf(buff, sizeof(buff), "%0.2f", bytes / 1024.0f); - AzFramework::StringFunc::NumberFormatting::GroupDigits(buff, sizeof(buff), len - 3); - - return buff; - } - } -} diff --git a/Gems/AssetMemoryAnalyzer/Code/Source/FormatUtils.h b/Gems/AssetMemoryAnalyzer/Code/Source/FormatUtils.h deleted file mode 100644 index f207794e41..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Source/FormatUtils.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once - -#include - -namespace AssetMemoryAnalyzer -{ - namespace Data - { - struct CodePoint; - } - - namespace FormatUtils - { - // Formats a location in code to a single line of human-readable text. Returns a pointer to the resulting string. - // WARNING: Returns pointer to an internal static buffer for performance. Single-threaded access only! - extern const char* FormatCodePoint(const Data::CodePoint& cp); - - // Formats a byte value to be easily read in kilobytes. Returns a pointer to the resulting string. - // WARNING: Returns pointer to an internal static buffer for performance. Single-threaded access only! - extern const char* FormatKB(size_t bytes); - } -} diff --git a/Gems/AssetMemoryAnalyzer/Code/Tests/AssetMemoryAnalyzerTest.cpp b/Gems/AssetMemoryAnalyzer/Code/Tests/AssetMemoryAnalyzerTest.cpp deleted file mode 100644 index 2a3ac1e4fe..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/Tests/AssetMemoryAnalyzerTest.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -#include -#include -#include -#include -#include <../Source/AssetMemoryAnalyzer.h> -#include <../Source/AssetMemoryAnalyzerSystemComponent.h> - -using namespace AssetMemoryAnalyzer; - -static AZ::IAllocator* testalloc = nullptr; - -class AssetMemoryAnalyzerTest - : public UnitTest::AllocatorsTestFixture -{ -protected: - void SetUp() override - { - AllocatorsTestFixture::SetUp(); - testalloc = &AZ::AllocatorInstance::GetAllocator(); - AZ::ComponentApplication::Descriptor desc; - desc.m_useExistingAllocator = true; - desc.m_enableDrilling = false; - m_app = new (&m_appStorage) AZ::ComponentApplication; - m_systemEntity = m_app->Create(desc); - m_app->RegisterComponentDescriptor(AssetMemoryAnalyzerSystemComponent::CreateDescriptor()); - m_gemSystemComponent = m_systemEntity->CreateComponent(); - m_systemEntity->Init(); - m_systemEntity->Activate(); - } - - void TearDown() override - { - m_app->Destroy(); - m_app->~ComponentApplication(); - - AllocatorsTestFixture::TearDown(); - } - - AZStd::aligned_storage_for_t m_appStorage; - AZ::ComponentApplication* m_app = nullptr; - AZ::Entity* m_systemEntity = nullptr; - AZ::Component* m_gemSystemComponent = nullptr; -}; - -TEST_F(AssetMemoryAnalyzerTest, BasicTest) -{ - AZStd::shared_ptr analysis; - AssetMemoryAnalyzerRequestBus::BroadcastResult(analysis, &AssetMemoryAnalyzerRequests::GetAnalysis); - - EXPECT_FALSE(analysis.get()); - - AssetMemoryAnalyzerRequestBus::Broadcast(&AssetMemoryAnalyzerRequests::SetEnabled, true); - AssetMemoryAnalyzerRequestBus::BroadcastResult(analysis, &AssetMemoryAnalyzerRequests::GetAnalysis); - - ASSERT_TRUE(analysis.get()); -#ifndef AZ_TRACK_ASSET_SCOPES - // No recordings should exist if analysis is disabled - ASSERT_TRUE(analysis->GetAllocationPoints().empty()); -#endif -} - -AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV); - - diff --git a/Gems/AssetMemoryAnalyzer/Code/assetmemoryanalyzer_files.cmake b/Gems/AssetMemoryAnalyzer/Code/assetmemoryanalyzer_files.cmake deleted file mode 100644 index 5b422502e1..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/assetmemoryanalyzer_files.cmake +++ /dev/null @@ -1,23 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(FILES - Include/AssetMemoryAnalyzer/AssetMemoryAnalyzerBus.h - Source/AssetMemoryAnalyzer.cpp - Source/AssetMemoryAnalyzer.h - Source/AssetMemoryAnalyzerSystemComponent.cpp - Source/AssetMemoryAnalyzerSystemComponent.h - Source/DebugImGUI.cpp - Source/DebugImGUI.h - Source/ExportCSV.cpp - Source/ExportCSV.h - Source/ExportJSON.cpp - Source/ExportJSON.h - Source/FormatUtils.cpp - Source/FormatUtils.h -) diff --git a/Gems/AssetMemoryAnalyzer/Code/assetmemoryanalyzer_shared_files.cmake b/Gems/AssetMemoryAnalyzer/Code/assetmemoryanalyzer_shared_files.cmake deleted file mode 100644 index 63323a14d1..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/assetmemoryanalyzer_shared_files.cmake +++ /dev/null @@ -1,11 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(FILES - Source/AssetMemoryAnalyzerModule.cpp -) diff --git a/Gems/AssetMemoryAnalyzer/Code/assetmemoryanalyzer_tests_files.cmake b/Gems/AssetMemoryAnalyzer/Code/assetmemoryanalyzer_tests_files.cmake deleted file mode 100644 index a7b08b967e..0000000000 --- a/Gems/AssetMemoryAnalyzer/Code/assetmemoryanalyzer_tests_files.cmake +++ /dev/null @@ -1,11 +0,0 @@ -# -# Copyright (c) Contributors to the Open 3D Engine Project. -# For complete copyright and license terms please see the LICENSE at the root of this distribution. -# -# SPDX-License-Identifier: Apache-2.0 OR MIT -# -# - -set(FILES - Tests/AssetMemoryAnalyzerTest.cpp -) diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/.github/ISSUE_TEMPLATE/bug_report.md b/Gems/AssetMemoryAnalyzer/External/tabulator-master/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index d041460807..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - - -**Tabulator Info** -- Which version of Tabulator are you using? -- Post a copy of your construct object if possible so we can see how your table is setup - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] - -**Additional context** -Add any other context about the problem here. diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/.github/ISSUE_TEMPLATE/feature_request.md b/Gems/AssetMemoryAnalyzer/External/tabulator-master/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 066b2d920a..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/.github/ISSUE_TEMPLATE/question.md b/Gems/AssetMemoryAnalyzer/External/tabulator-master/.github/ISSUE_TEMPLATE/question.md deleted file mode 100644 index a9a1e61214..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/.github/ISSUE_TEMPLATE/question.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -name: Question -about: Please ask questions on Stack Overflow, NOT on GitHub :) - ---- - -Please ask questions on www.stackoverflow.com the issues list is now reserved for feature requests and bug reports. - -Cheers - -Oli :) diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/.gitignore b/Gems/AssetMemoryAnalyzer/External/tabulator-master/.gitignore deleted file mode 100644 index 013f31d724..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -*.sublime-project -*.sublime-workspace - -node_modules/ -examples/ -npm-debug.log \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/CODE_OF_CONDUCT.md b/Gems/AssetMemoryAnalyzer/External/tabulator-master/CODE_OF_CONDUCT.md deleted file mode 100644 index 2599d16381..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Contributor Covenant Code of Conduct - -## Our Pledge - -In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. - -## Our Standards - -Examples of behavior that contributes to creating a positive environment include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a professional setting - -## Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. - -Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. - -## Scope - -This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. - -## Enforcement - -The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/LICENSE b/Gems/AssetMemoryAnalyzer/External/tabulator-master/LICENSE deleted file mode 100644 index b1a1477df5..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-2018 Oli Folkerd - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/README.md b/Gems/AssetMemoryAnalyzer/External/tabulator-master/README.md deleted file mode 100644 index 894e9f8d65..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/README.md +++ /dev/null @@ -1,84 +0,0 @@ -![Tabulator Table](http://olifolkerd.github.io/tabulator/images/tabulator.png) - -### Version 4.1 Out Now! - -An easy to use interactive table generation JavaScript library - -Full documentation & demos can be found at: [http://tabulator.info](http://tabulator.info) -*** -![Tabulator Table](http://tabulator.info/images/tabulator_table.jpg) -*** - -NPM Package Changed -================================ -jQuery was removed as a dependency in the 4.0 release, so Tabulator has moved in NPM from the old [jquery.tabulator](https://www.npmjs.com/package/jquery.tabulator) package to the new [tabulator-tables](https://www.npmjs.com/package/tabulator-tables) package. - - -Features -================================ -Tabulator allows you to create interactive tables in seconds from any HTML Table, Javascript Array or JSON formatted data. - -Simply include the library and the css in your project and you're away! - -Tabulator is packed with useful features including: - -![Tabulator Features](http://olifolkerd.github.io/tabulator/images/featurelist_share.png) - - -Frontend Framework Support -================================ -Tabulator is built to work with all the major front end JavaScript frameworks including React, Angular and Vue. - - -Setup -================================ -Setting up tabulator could not be simpler. - -Include the library and the css -```html - - -``` - -Create an element to hold the table -```html -
-``` - -Turn the element into a tabulator with some simple javascript -```js -var table = new Tabulator("#example-table", {}); -``` - - -### Bower Installation -To get Tabulator via the Bower package manager, open a terminal in your project directory and run the following commmand: -``` -bower install tabulator --save -``` - -### NPM Installation -To get Tabulator via the NPM package manager, open a terminal in your project directory and run the following commmand: -``` -npm install tabulator-tables --save -``` - -### CDN - UNPKG -To access Tabulator directly from the UNPKG CDN servers, include the following two lines at the start of your project, instead of the localy hosted versions: -```html - - -``` - -Coming Soon -================================ -Tabulator is actively under development and I plan to have even more useful features implemented soon, including: - -- Data Reactivity -- Custom Row Templates -- Additional Editors and Formatters -- Print Styling -- Multi Cell Editing -- Cell Selection - -Get in touch if there are any features you feel Tabulator needs. diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/bower.json b/Gems/AssetMemoryAnalyzer/External/tabulator-master/bower.json deleted file mode 100644 index 7004cd19c4..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/bower.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "tabulator", - "main": "dist/js/tabulator.js", - "version": "4.1.2", - "description": "Interactive table generation JavaScript library", - "keywords": [ - "table", - "grid", - "datagrid", - "tabulator", - "editable", - "cookie", - "jquery", - "jqueryui", - "sort", - "format", - "resizable", - "list", - "scrollable", - "ajax", - "json", - "widget", - "jquery", - "react", - "angular", - "vue" - ], - "authors": [ - "Oli Folkerd" - ], - "license": "MIT", - "homepage": "https://github.com/olifolkerd/tabulator", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ] -} diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap.css deleted file mode 100644 index 23513e7329..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap.css +++ /dev/null @@ -1,804 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator { - position: relative; - background-color: #fff; - overflow: hidden; - font-size: 14px; - text-align: left; - width: 100%; - max-width: 100%; - margin-bottom: 20px; - -ms-transform: translatez(0); - transform: translatez(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table { - min-width: 100%; -} - -.tabulator.tabulator-block-select { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 2px solid #ddd; - background-color: #fff; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-block; - position: relative; - box-sizing: border-box; - background-color: #fff; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #ddd; - background: #e6e6e6; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 8px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - display: inline-block; - position: absolute; - top: 14px; - right: 8px; - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: -ms-flexbox; - display: flex; - border-top: 1px solid #ddd; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child { - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator .tabulator-header .tabulator-col.ui-sortable-helper { - position: absolute; - background-color: #e6e6e6 !important; - border: 1px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover { - cursor: pointer; - background-color: #e6e6e6; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow { - border-top: 6px solid #666; - border-bottom: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - -webkit-writing-mode: vertical-rl; - -ms-writing-mode: tb-rl; - writing-mode: vertical-rl; - text-orientation: mixed; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow { - right: calc(50% - 6px); -} - -.tabulator .tabulator-header .tabulator-frozen { - display: inline-block; - position: absolute; - z-index: 10; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - width: 100%; - background: white !important; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - min-width: 400%; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableHolder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableHolder:focus { - outline: none; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder { - box-sizing: border-box; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - width: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] { - position: absolute; - top: 0; - left: 0; - height: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder span { - display: inline-block; - margin: 0 auto; - padding: 10px; - color: #000; - font-weight: bold; - font-size: 20px; -} - -.tabulator .tabulator-tableHolder .tabulator-table { - position: relative; - display: inline-block; - background-color: #fff; - white-space: nowrap; - overflow: visible; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #ececec !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #ddd; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #ddd; -} - -.tabulator .tabulator-col-resize-handle { - position: absolute; - right: 0; - top: 0; - bottom: 0; - width: 5px; -} - -.tabulator .tabulator-col-resize-handle.prev { - left: 0; - right: auto; -} - -.tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; -} - -.tabulator .tabulator-footer { - padding: 5px 10px; - border-top: 2px solid #ddd; - text-align: right; - font-weight: bold; - white-space: nowrap; - -ms-user-select: none; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: calc(100% + 20px); - margin: -5px -10px 5px -10px; - text-align: left; - background: white !important; - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - border: 1px solid #ddd; - border-radius: 3px; - padding: 2px 5px; - background: rgba(255, 255, 255, 0.2); - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #d00; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; -} - -.tabulator .tabulator-loader { - position: absolute; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-loader .tabulator-loader-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator.table-striped .tabulator-row:nth-child(even) { - background-color: #f9f9f9; -} - -.tabulator.table-bordered { - border: 1px solid #ddd; -} - -.tabulator.table-bordered .tabulator-header .tabulator-col { - border-right: 1px solid #ddd; -} - -.tabulator.table-bordered .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell { - border-right: 1px solid #ddd; -} - -.tabulator.table-condensed .tabulator-header .tabulator-col .tabulator-col-content { - padding: 5px; -} - -.tabulator.table-condensed .tabulator-tableHolder .tabulator-table .tabulator-row { - min-height: 24px; -} - -.tabulator.table-condensed .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell { - padding: 5px; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.active { - background: #f5f5f5 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.success { - background: #dff0d8 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.info { - background: #d9edf7 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.warning { - background: #fcf8e3 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.danger { - background: #f2dede !important; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 30px; - background-color: #fff; - border-bottom: 1px solid #ddd; -} - -.tabulator-row.tabulator-selectable:hover { - background-color: #f5f5f5 !important; - cursor: pointer; -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -.tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - pointer-events: none !important; - z-index: 15; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -.tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; -} - -.tabulator-row .tabulator-frozen { - display: inline-block; - position: absolute; - background-color: inherit; - z-index: 10; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #ddd; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 14px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 8px; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.tabulator-row .tabulator-cell:last-of-type { - border-right: none; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #ddd; - border-bottom: 2px solid #ddd; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-pack: center; - justify-content: center; - -ms-flex-align: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #fff; - font-weight: bold; - font-size: 1.1em; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #ddd; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #fafafa; - font-weight: bold; - min-width: 100%; -} - -.tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow { - margin-left: 20px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow { - margin-left: 40px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow { - margin-left: 60px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow { - margin-left: 80px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow { - margin-left: 100px; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #666; -} - -.tabulator-edit-select-list { - position: absolute; - display: inline-block; - box-sizing: border-box; - max-height: 200px; - background: #fff; - border: 1px solid #ddd; - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item { - padding: 4px; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - cursor: pointer; - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-group { - border-bottom: 1px solid #ddd; - padding: 4px; - padding-top: 6px; - font-weight: bold; -} diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap.min.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap.min.css deleted file mode 100644 index 47a2815c69..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator{position:relative;background-color:#fff;overflow:hidden;font-size:14px;text-align:left;width:100%;max-width:100%;margin-bottom:20px;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator.tabulator-block-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{width:100%;border-bottom:2px solid #ddd;font-weight:700;white-space:nowrap;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header,.tabulator .tabulator-header .tabulator-col{position:relative;box-sizing:border-box;background-color:#fff;overflow:hidden}.tabulator .tabulator-header .tabulator-col{display:inline-block;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #ddd;background:#e6e6e6;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:14px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #ddd;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child{margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col.ui-sortable-helper{position:absolute;background-color:#e6e6e6!important;border:1px solid #ddd}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#e6e6e6}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #666;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-webkit-writing-mode:vertical-rl;-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:1}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;width:100%;background:#fff!important;border-top:1px solid #ddd;border-bottom:1px solid #ddd;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:400%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{position:absolute;top:0;left:0;height:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#000;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#ececec!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #ddd}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #ddd}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-footer{padding:5px 10px;border-top:2px solid #ddd;text-align:right;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-5px -10px 5px;text-align:left;background:#fff!important;border-bottom:1px solid #ddd;border-top:1px solid #ddd;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;border:1px solid #ddd;border-radius:3px;padding:2px 5px;background:hsla(0,0%,100%,.2);font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:3;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator.table-striped .tabulator-row:nth-child(2n){background-color:#f9f9f9}.tabulator.table-bordered{border:1px solid #ddd}.tabulator.table-bordered .tabulator-header .tabulator-col,.tabulator.table-bordered .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell{border-right:1px solid #ddd}.tabulator.table-condensed .tabulator-header .tabulator-col .tabulator-col-content{padding:5px}.tabulator.table-condensed .tabulator-tableHolder .tabulator-table .tabulator-row{min-height:24px}.tabulator.table-condensed .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell{padding:5px}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.active{background:#f5f5f5!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.success{background:#dff0d8!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.info{background:#d9edf7!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.warning{background:#fcf8e3!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.danger{background:#f2dede!important}.tabulator-row{position:relative;box-sizing:border-box;min-height:30px;background-color:#fff;border-bottom:1px solid #ddd}.tabulator-row.tabulator-selectable:hover{background-color:#f5f5f5!important;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #ddd;border-bottom:1px solid #ddd;pointer-events:none!important;z-index:2}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:1}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:8px;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #ddd;border-bottom:2px solid #ddd}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #ddd;border-top:1px solid #999;padding:5px;padding-left:10px;background:#fafafa;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow{margin-left:20px}.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow{margin-left:40px}.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow{margin-left:60px}.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow{margin-left:80px}.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow{margin-left:100px}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#666}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #ddd;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:4}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #ddd;padding:4px;padding-top:6px;font-weight:700} -/*# sourceMappingURL=tabulator_bootstrap.min.css.map */ diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap.min.css.map b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap.min.css.map deleted file mode 100644 index 9980be3347..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_bootstrap.min.css"],"names":[],"mappings":"AACA,WACE,kBAAmB,AACnB,sBAAuB,AACvB,gBAAiB,AACjB,eAAgB,AAChB,gBAAiB,AACjB,WAAY,AACZ,eAAgB,AAChB,mBAAoB,AAEpB,uBAAyB,CAC1B,AAED,iFACE,cAAgB,CACjB,AAED,kCACE,yBAA0B,AACvB,sBAAuB,AACtB,qBAAsB,AAClB,gBAAkB,CAC3B,AAED,6BAGE,WAAY,AACZ,6BAA8B,AAE9B,gBAAkB,AAClB,mBAAoB,AAEpB,sBAAuB,AACvB,wBAAyB,AACzB,yBAA0B,AAC1B,mBAAqB,CACtB,AAED,yEAdE,kBAAmB,AACnB,sBAAuB,AAGvB,sBAAuB,AAGvB,eAAiB,CAOnB,AAQC,4CAPC,qBAAsB,AAItB,gBAAiB,AACjB,qBAAuB,CAExB,AAED,6DACE,kBAAmB,AACnB,sBAAuB,AACvB,mBAAoB,AACpB,mBAAqB,CACtB,AAED,mEACE,sBAAuB,AACvB,kBAAmB,AACnB,WAAa,CACd,AAED,wFACE,sBAAuB,AACvB,WAAY,AACZ,mBAAoB,AACpB,gBAAiB,AACjB,uBAAwB,AACxB,qBAAuB,CACxB,AAED,gHACE,sBAAuB,AACvB,WAAY,AACZ,sBAAuB,AACvB,YAAa,AACb,eAAiB,CAClB,AAED,oFACE,qBAAsB,AACtB,kBAAmB,AACnB,SAAU,AACV,UAAW,AACX,QAAS,AACT,SAAU,AACV,kCAAmC,AACnC,mCAAoC,AACpC,4BAA8B,CAC/B,AAED,0FACE,kBAAmB,AACnB,oBAAqB,AACrB,aAAc,AACd,0BAA2B,AAC3B,eAAiB,CAClB,AAED,oHACE,iBAAmB,CACpB,AAED,0FACE,YAAc,CACf,AAED,+DACE,kBAAmB,AACnB,mCAAqC,AACrC,qBAAuB,CACxB,AAED,qEACE,kBAAmB,AACnB,sBAAuB,AACvB,eAAgB,AAChB,WAAY,AACZ,iBAAmB,CACpB,AAED,8EACE,qBAAwB,CACzB,AAED,yEACE,cAAgB,CACjB,AAED,sFACE,QAAS,AACT,QAAU,CACX,AAED,oFACE,kBAAoB,CACrB,AAED,qEACE,eAAgB,AAChB,wBAA0B,CAC3B,AAED,uHACE,gBAAiB,AACjB,4BAA8B,CAC/B,AAED,sHACE,gBAAiB,AACjB,4BAA8B,CAC/B,AAED,uHACE,0BAA2B,AAC3B,kBAAoB,CACrB,AAED,+GACE,iCAAkC,AAC9B,uBAAwB,AACpB,yBAA0B,AAClC,uBAAwB,AACxB,oBAAqB,AACrB,aAAc,AACd,sBAAuB,AACnB,mBAAoB,AACxB,qBAAsB,AAClB,sBAAwB,CAC7B,AAED,oHAEM,wBAA0B,CAC/B,AAED,2GACE,gBAAiB,AACjB,gBAAkB,CACnB,AAED,uIACE,gBAAiB,AACjB,mBAAqB,CACtB,AAED,uGACE,qBAAuB,CACxB,AAED,+CACE,qBAAsB,AACtB,kBAAmB,AACnB,SAAY,CACb,AAED,qEACE,2BAA6B,CAC9B,AAED,sEACE,0BAA4B,CAC7B,AAED,qDACE,sBAAuB,AACvB,WAAY,AACZ,0BAA6B,AAC7B,0BAA2B,AAC3B,6BAA8B,AAC9B,eAAiB,CAClB,AAED,oEACE,yBAA6B,CAC9B,AAED,iGACE,YAAc,CACf,AAED,2DACE,cAAgB,CACjB,AAED,iEACE,YAAc,CACf,AAED,kCACE,kBAAmB,AACnB,WAAY,AACZ,mBAAoB,AACpB,cAAe,AACf,gCAAkC,CACnC,AAED,wCACE,YAAc,CACf,AAED,yDACE,sBAAuB,AACvB,oBAAqB,AACrB,aAAc,AACd,sBAAuB,AACnB,mBAAoB,AACxB,UAAY,CACb,AAED,wFACE,kBAAmB,AACnB,MAAO,AACP,OAAQ,AACR,WAAa,CACd,AAED,8DACE,qBAAsB,AACtB,cAAe,AACf,aAAc,AACd,WAAY,AACZ,gBAAkB,AAClB,cAAgB,CACjB,AAED,mDACE,kBAAmB,AACnB,qBAAsB,AACtB,sBAAuB,AACvB,mBAAoB,AACpB,gBAAkB,CACnB,AAED,kFACE,gBAAkB,AAClB,4BAA+B,CAChC,AAED,sGACE,4BAA8B,CAC/B,AAED,yGACE,yBAA2B,CAC5B,AAED,wCACE,kBAAmB,AACnB,QAAS,AACT,MAAO,AACP,SAAU,AACV,SAAW,CACZ,AAED,6CACE,OAAQ,AACR,UAAY,CACb,AAED,8CACE,gBAAkB,CACnB,AAED,6BACE,iBAAkB,AAClB,0BAA2B,AAC3B,iBAAkB,AAClB,gBAAkB,AAClB,mBAAoB,AACpB,qBAAsB,AAClB,iBAAkB,AACtB,sBAAuB,AACvB,wBAAyB,AACzB,yBAA0B,AAC1B,mBAAqB,CACtB,AAED,qDACE,sBAAuB,AACvB,wBAAyB,AACzB,sBAA6B,AAC7B,gBAAiB,AACjB,0BAA6B,AAC7B,6BAA8B,AAC9B,0BAA2B,AAC3B,eAAiB,CAClB,AAED,oEACE,yBAA6B,CAC9B,AAED,iGACE,YAAc,CACf,AAED,gEACE,mBAAoB,AACpB,kBAAoB,CACrB,AAED,8CACE,YAAc,CACf,AAED,6CACE,qBAAsB,AACtB,aAAc,AACd,sBAAuB,AACvB,kBAAmB,AACnB,gBAAiB,AACjB,8BAAqC,AACrC,oBAAqB,AACrB,oBAAqB,AACrB,iBAAmB,CACpB,AAED,oDACE,UAAY,CACb,AAED,sDACE,UAAY,CACb,AAED,kEACE,eAAgB,AAChB,0BAA+B,AAC/B,UAAY,CACb,AAED,6BACE,kBAAmB,AACnB,oBAAqB,AACrB,aAAc,AACd,sBAAuB,AACnB,mBAAoB,AACxB,MAAO,AACP,OAAQ,AACR,UAAa,AACb,YAAa,AACb,WAAY,AACZ,0BAA+B,AAC/B,iBAAmB,CACpB,AAED,mDACE,qBAAsB,AACtB,cAAe,AACf,kBAAmB,AACnB,mBAAoB,AACpB,gBAAiB,AACjB,gBAAkB,AAClB,cAAgB,CACjB,AAED,qEACE,sBAAuB,AACvB,UAAY,CACb,AAED,mEACE,sBAAuB,AACvB,aAAe,CAChB,AAED,sDACE,wBAA0B,CAC3B,AAED,0BACE,qBAAuB,CACxB,AAMD,4JACE,2BAA6B,CAC9B,AAED,mFACE,WAAa,CACd,AAED,kFACE,eAAiB,CAClB,AAED,kGACE,WAAa,CACd,AAED,yEACE,4BAA+B,CAChC,AAED,0EACE,4BAA+B,CAChC,AAED,uEACE,4BAA+B,CAChC,AAED,0EACE,4BAA+B,CAChC,AAED,yEACE,4BAA+B,CAChC,AAED,eACE,kBAAmB,AACnB,sBAAuB,AACvB,gBAAiB,AACjB,sBAAuB,AACvB,4BAA8B,CAC/B,AAED,0CACE,mCAAqC,AACrC,cAAgB,CACjB,AAED,kCACE,wBAA0B,CAC3B,AAED,wCACE,yBAA0B,AAC1B,cAAgB,CACjB,AAED,gCACE,kBAAmB,AACnB,0BAA2B,AAC3B,6BAA8B,AAC9B,8BAAgC,AAChC,SAAY,CACb,AAED,4CACE,kBAAmB,AACnB,QAAS,AACT,SAAU,AACV,OAAQ,AACR,UAAY,CACb,AAED,iDACE,MAAO,AACP,WAAa,CACd,AAED,kDACE,gBAAkB,CACnB,AAED,iCACE,qBAAsB,AACtB,kBAAmB,AACnB,yBAA0B,AAC1B,SAAY,CACb,AAED,uDACE,2BAA6B,CAC9B,AAED,wDACE,0BAA4B,CAC7B,AAED,8CACE,sBAAuB,AACvB,YAAa,AACb,0BAA2B,AAC3B,4BAA8B,CAC/B,AAED,oDACE,YAAc,CACf,AAED,oDACE,cAAgB,CACjB,AAED,0DACE,iBAAmB,CACpB,AAED,wEACE,kBAAoB,CACrB,AAED,+BACE,qBAAsB,AACtB,kBAAmB,AACnB,sBAAuB,AACvB,YAAa,AACb,sBAAuB,AACvB,mBAAoB,AACpB,gBAAiB,AACjB,sBAAwB,CACzB,AAED,4CACE,iBAAmB,CACpB,AAED,iDACE,yBAA0B,AAC1B,SAAW,CACZ,AAED,+GACE,WAAY,AACZ,sBAAwB,CACzB,AAED,yDACE,qBAA0B,CAC3B,AAED,+HACE,WAAY,AACZ,uBAAwB,AACxB,UAAe,CAChB,AAED,6EACE,YAAc,CACf,AAED,oDACE,2BAA4B,AAC5B,oBAAqB,AACrB,sBAAuB,AACnB,mBAAoB,AACxB,sBAAuB,AACvB,wBAAyB,AACzB,yBAA0B,AAC1B,mBAAqB,CACtB,AAED,8EACE,SAAW,CACZ,AAED,wGACE,WAAY,AACZ,WAAY,AACZ,eAAgB,AAChB,eAAiB,CAClB,AAED,2DACE,qBAAsB,AACtB,sBAAuB,AACvB,WAAY,AACZ,UAAW,AACX,gBAAiB,AACjB,iBAAkB,AAClB,8BAA+B,AAC/B,2BAA4B,AAC5B,4BAA8B,CAC/B,AAED,4DACE,2BAA4B,AAC5B,oBAAqB,AACrB,qBAAsB,AAClB,uBAAwB,AAC5B,sBAAuB,AACnB,mBAAoB,AACxB,sBAAuB,AACvB,YAAa,AACb,WAAY,AACZ,iBAAkB,AAClB,sBAAuB,AACvB,kBAAmB,AACnB,0BAA+B,AAC/B,eAAiB,CAClB,AAED,kEACE,eAAgB,AAChB,yBAA+B,CAChC,AAED,kGACE,qBAAsB,AACtB,kBAAmB,AACnB,WAAY,AACZ,UAAW,AACX,sBAAwB,CACzB,AAED,wGACE,kBAAmB,AACnB,WAAY,AACZ,UAAW,AACX,QAAS,AACT,WAAY,AACZ,UAAW,AACX,eAAiB,CAClB,AAED,gGACE,qBAAsB,AACtB,kBAAmB,AACnB,WAAY,AACZ,UAAW,AACX,eAAiB,CAClB,AAED,sGACE,kBAAmB,AACnB,WAAY,AACZ,UAAW,AACX,QAAS,AACT,WAAY,AACZ,UAAW,AACX,eAAiB,CAClB,AAED,qEACE,2BAA4B,AAC5B,oBAAqB,AACrB,sBAAuB,AACnB,mBAAoB,AACxB,qBAAsB,AAClB,uBAAwB,AAC5B,sBAAuB,AACvB,wBAAyB,AACzB,yBAA0B,AAC1B,oBAAqB,AACrB,YAAa,AACb,WAAY,AACZ,mBAAoB,AACpB,gBAAiB,AACjB,WAAY,AACZ,gBAAkB,AAClB,eAAiB,CAClB,AAED,2EACE,UAAY,CACb,AAED,sHACE,eAAiB,CAClB,AAMD,sOACE,YAAc,CACf,AAED,+BACE,sBAAuB,AACvB,6BAA8B,AAC9B,4BAA6B,AAC7B,0BAA2B,AAC3B,YAAa,AACb,kBAAmB,AACnB,mBAAoB,AACpB,gBAAkB,AAClB,cAAgB,CACjB,AAED,qCACE,eAAgB,AAChB,+BAAqC,CACtC,AAED,wEACE,kBAAmB,AACnB,kCAAmC,AACnC,mCAAoC,AACpC,0BAA2B,AAC3B,eAAiB,CAClB,AAED,wEACE,gBAAkB,CACnB,AAED,wEACE,gBAAkB,CACnB,AAED,wEACE,gBAAkB,CACnB,AAED,wEACE,gBAAkB,CACnB,AAED,wEACE,iBAAmB,CACpB,AAED,gDACE,qBAAsB,AACtB,QAAS,AACT,SAAU,AACV,kBAAmB,AACnB,iCAAkC,AAClC,oCAAqC,AACrC,eAAgB,AAChB,2BAA4B,AAC5B,qBAAuB,CACxB,AAED,oCACE,iBAAkB,AAClB,UAAY,CACb,AAED,4BACE,kBAAmB,AACnB,qBAAsB,AACtB,sBAAuB,AACvB,iBAAkB,AAClB,gBAAiB,AACjB,sBAAuB,AACvB,eAAgB,AAChB,gBAAiB,AACjB,iCAAkC,AAClC,SAAe,CAChB,AAED,6DACE,WAAa,CACd,AAED,oEACE,WAAY,AACZ,kBAAoB,CACrB,AAED,mEACE,eAAgB,AAChB,WAAY,AACZ,kBAAoB,CACrB,AAED,8DACE,6BAA8B,AAC9B,YAAa,AACb,gBAAiB,AACjB,eAAkB,CACnB","file":"tabulator_bootstrap.min.css","sourcesContent":["/* Tabulator v4.1.2 (c) Oliver Folkerd */\n.tabulator {\n position: relative;\n background-color: #fff;\n overflow: hidden;\n font-size: 14px;\n text-align: left;\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n -ms-transform: translatez(0);\n transform: translatez(0);\n}\n\n.tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableHolder .tabulator-table {\n min-width: 100%;\n}\n\n.tabulator.tabulator-block-select {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 2px solid #ddd;\n background-color: #fff;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n}\n\n.tabulator .tabulator-header .tabulator-col {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n background-color: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #ddd;\n background: #e6e6e6;\n pointer-events: none;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 8px;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n display: inline-block;\n position: absolute;\n top: 14px;\n right: 8px;\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n border-top: 1px solid #ddd;\n overflow: hidden;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child {\n margin-right: -1px;\n}\n\n.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {\n display: none;\n}\n\n.tabulator .tabulator-header .tabulator-col.ui-sortable-helper {\n position: absolute;\n background-color: #e6e6e6 !important;\n border: 1px solid #ddd;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {\n cursor: pointer;\n background-color: #e6e6e6;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"asc\"] .tabulator-col-content .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"desc\"] .tabulator-col-content .tabulator-arrow {\n border-top: 6px solid #666;\n border-bottom: none;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n -webkit-writing-mode: vertical-rl;\n -ms-writing-mode: tb-rl;\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n -ms-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow {\n right: calc(50% - 6px);\n}\n\n.tabulator .tabulator-header .tabulator-frozen {\n display: inline-block;\n position: absolute;\n z-index: 10;\n}\n\n.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd;\n}\n\n.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd;\n}\n\n.tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n background: white !important;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n overflow: hidden;\n}\n\n.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important;\n}\n\n.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none;\n}\n\n.tabulator .tabulator-header .tabulator-frozen-rows-holder {\n min-width: 400%;\n}\n\n.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none;\n}\n\n.tabulator .tabulator-tableHolder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.tabulator .tabulator-tableHolder:focus {\n outline: none;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-placeholder {\n box-sizing: border-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n width: 100%;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-placeholder span {\n display: inline-block;\n margin: 0 auto;\n padding: 10px;\n color: #000;\n font-weight: bold;\n font-size: 20px;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: #fff;\n white-space: nowrap;\n overflow: visible;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #ececec !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #ddd;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #ddd;\n}\n\n.tabulator .tabulator-col-resize-handle {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n width: 5px;\n}\n\n.tabulator .tabulator-col-resize-handle.prev {\n left: 0;\n right: auto;\n}\n\n.tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize;\n}\n\n.tabulator .tabulator-footer {\n padding: 5px 10px;\n border-top: 2px solid #ddd;\n text-align: right;\n font-weight: bold;\n white-space: nowrap;\n -ms-user-select: none;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n}\n\n.tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: calc(100% + 20px);\n margin: -5px -10px 5px -10px;\n text-align: left;\n background: white !important;\n border-bottom: 1px solid #ddd;\n border-top: 1px solid #ddd;\n overflow: hidden;\n}\n\n.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n background: white !important;\n}\n\n.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none;\n}\n\n.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none;\n}\n\n.tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px;\n}\n\n.tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 2px 5px;\n background: rgba(255, 255, 255, 0.2);\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit;\n}\n\n.tabulator .tabulator-footer .tabulator-page.active {\n color: #d00;\n}\n\n.tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5;\n}\n\n.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff;\n}\n\n.tabulator .tabulator-loader {\n position: absolute;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center;\n}\n\n.tabulator .tabulator-loader .tabulator-loader-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px;\n}\n\n.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading {\n border: 4px solid #333;\n color: #000;\n}\n\n.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error {\n border: 4px solid #D00;\n color: #590000;\n}\n\n.tabulator.table-striped .tabulator-row:nth-child(even) {\n background-color: #f9f9f9;\n}\n\n.tabulator.table-bordered {\n border: 1px solid #ddd;\n}\n\n.tabulator.table-bordered .tabulator-header .tabulator-col {\n border-right: 1px solid #ddd;\n}\n\n.tabulator.table-bordered .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: 1px solid #ddd;\n}\n\n.tabulator.table-condensed .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 5px;\n}\n\n.tabulator.table-condensed .tabulator-tableHolder .tabulator-table .tabulator-row {\n min-height: 24px;\n}\n\n.tabulator.table-condensed .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 5px;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.active {\n background: #f5f5f5 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.success {\n background: #dff0d8 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.info {\n background: #d9edf7 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.warning {\n background: #fcf8e3 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.danger {\n background: #f2dede !important;\n}\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 30px;\n background-color: #fff;\n border-bottom: 1px solid #ddd;\n}\n\n.tabulator-row.tabulator-selectable:hover {\n background-color: #f5f5f5 !important;\n cursor: pointer;\n}\n\n.tabulator-row.tabulator-selected {\n background-color: #9ABCEA;\n}\n\n.tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer;\n}\n\n.tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n pointer-events: none !important;\n z-index: 15;\n}\n\n.tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px;\n}\n\n.tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto;\n}\n\n.tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize;\n}\n\n.tabulator-row .tabulator-frozen {\n display: inline-block;\n position: absolute;\n background-color: inherit;\n z-index: 10;\n}\n\n.tabulator-row .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd;\n}\n\n.tabulator-row .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd;\n}\n\n.tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n}\n\n.tabulator-row .tabulator-responsive-collapse:empty {\n display: none;\n}\n\n.tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px;\n}\n\n.tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative;\n}\n\n.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px;\n}\n\n.tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 8px;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tabulator-row .tabulator-cell:last-of-type {\n border-right: none;\n}\n\n.tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n padding: 0;\n}\n\n.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n}\n\n.tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000;\n}\n\n.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000;\n}\n\n.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {\n display: none;\n}\n\n.tabulator-row .tabulator-cell.tabulator-row-handle {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-align: center;\n align-items: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n}\n\n.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%;\n}\n\n.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-pack: center;\n justify-content: center;\n -ms-flex-align: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none;\n}\n\n.tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #fafafa;\n font-weight: bold;\n min-width: 100%;\n}\n\n.tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow {\n margin-left: 20px;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow {\n margin-left: 40px;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow {\n margin-left: 60px;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow {\n margin-left: 80px;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow {\n margin-left: 100px;\n}\n\n.tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle;\n}\n\n.tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #666;\n}\n\n.tabulator-edit-select-list {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n max-height: 200px;\n background: #fff;\n border: 1px solid #ddd;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000;\n}\n\n.tabulator-edit-select-list .tabulator-edit-select-list-item {\n padding: 4px;\n}\n\n.tabulator-edit-select-list .tabulator-edit-select-list-item.active {\n color: #fff;\n background: #1D68CD;\n}\n\n.tabulator-edit-select-list .tabulator-edit-select-list-item:hover {\n cursor: pointer;\n color: #fff;\n background: #1D68CD;\n}\n\n.tabulator-edit-select-list .tabulator-edit-select-list-group {\n border-bottom: 1px solid #ddd;\n padding: 4px;\n padding-top: 6px;\n font-weight: bold;\n}\n"]} \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap4.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap4.css deleted file mode 100644 index 2b437802b3..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap4.css +++ /dev/null @@ -1,1008 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator { - position: relative; - background-color: transparent; - overflow: hidden; - font-size: 1rem; - text-align: left; - width: 100%; - max-width: 100%; - -ms-transform: translatez(0); - transform: translatez(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table { - min-width: 100%; -} - -.tabulator.tabulator-block-select { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-top: 1px solid #dee2e6; - border-bottom: 2px solid #dee2e6; - background-color: #fff; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-block; - position: relative; - box-sizing: border-box; - background-color: #fff; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #dee2e6; - background: #e6e6e6; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 0.75rem; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - display: inline-block; - position: absolute; - top: 14px; - right: 8px; - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: -ms-flexbox; - display: flex; - border-top: 1px solid #dee2e6; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child { - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator .tabulator-header .tabulator-col.ui-sortable-helper { - position: absolute; - background-color: #e6e6e6 !important; - border: 1px solid #dee2e6; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover { - cursor: pointer; - background-color: #e6e6e6; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow { - border-top: 6px solid #666; - border-bottom: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - -webkit-writing-mode: vertical-rl; - -ms-writing-mode: tb-rl; - writing-mode: vertical-rl; - text-orientation: mixed; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow { - right: calc(50% - 6px); -} - -.tabulator .tabulator-header .tabulator-frozen { - display: inline-block; - position: absolute; - z-index: 10; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #dee2e6; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #dee2e6; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - width: 100%; - background: white !important; - border-top: 1px solid #dee2e6; - border-bottom: 1px solid #dee2e6; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - min-width: 400%; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableHolder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableHolder:focus { - outline: none; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder { - box-sizing: border-box; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - width: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] { - position: absolute; - top: 0; - left: 0; - height: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder span { - display: inline-block; - margin: 0 auto; - padding: 10px; - color: #000; - font-weight: bold; - font-size: 20px; -} - -.tabulator .tabulator-tableHolder .tabulator-table { - position: relative; - display: inline-block; - background-color: transparent; - white-space: nowrap; - overflow: visible; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: rgba(0, 0, 0, 0.05) !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #dee2e6; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #dee2e6; -} - -.tabulator .tabulator-col-resize-handle { - position: absolute; - right: 0; - top: 0; - bottom: 0; - width: 5px; -} - -.tabulator .tabulator-col-resize-handle.prev { - left: 0; - right: auto; -} - -.tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; -} - -.tabulator .tabulator-footer { - padding: 5px 10px; - border-top: 2px solid #dee2e6; - text-align: right; - font-weight: bold; - white-space: nowrap; - -ms-user-select: none; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: calc(100% + 20px); - margin: -5px -10px 5px -10px; - text-align: left; - background: rgba(13, 13, 13, 0) !important; - border-bottom: 1px solid #dee2e6; - border-top: 1px solid #dee2e6; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: rgba(13, 13, 13, 0) !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0; - margin-top: 5px; - padding: 8px 12px; - border: 1px solid #dee2e6; - border-right: none; - background: rgba(255, 255, 255, 0.2); - color: #007bff; - font-family: inherit; - font-weight: normal; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page[data-page="first"] { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} - -.tabulator .tabulator-footer .tabulator-page[data-page="last"] { - border: 1px solid #dee2e6; - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.tabulator .tabulator-footer .tabulator-page.active { - border-color: #007bff; - background-color: #007bff; - color: #fff; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - border-color: #dee2e6; - background: #fff; - color: #6c757d; -} - -.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - cursor: pointer; - border-color: #dee2e6; - background: #e9ecef; - color: #0056b3; -} - -.tabulator .tabulator-loader { - position: absolute; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-loader .tabulator-loader-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator.thead-dark .tabulator-header { - border-color: #32383e; - background-color: #212529; - color: #fff; -} - -.tabulator.thead-dark .tabulator-header .tabulator-col { - border-color: #32383e; - background-color: #212529; - color: #fff; -} - -.tabulator.table-dark { - background-color: #212529; -} - -.tabulator.table-dark:not(.thead-light) .tabulator-header { - border-color: #32383e; - background-color: #212529; - color: #fff; -} - -.tabulator.table-dark:not(.thead-light) .tabulator-header .tabulator-col { - border-color: #32383e; - background-color: #212529; - color: #fff; -} - -.tabulator.table-dark .tabulator-tableHolder { - color: #fff; -} - -.tabulator.table-dark .tabulator-row { - border-color: #32383e; -} - -.tabulator.table-dark .tabulator-row:hover { - background-color: rgba(255, 255, 255, 0.075) !important; -} - -.tabulator.table-striped .tabulator-row:nth-child(even) { - background-color: rgba(0, 0, 0, 0.05); -} - -.tabulator.table-striped .tabulator-row:nth-child(even).tabulator-selected { - background-color: #9ABCEA; -} - -.tabulator.table-striped .tabulator-row:nth-child(even).tabulator-selectable:hover { - background-color: rgba(0, 0, 0, 0.075); - cursor: pointer; -} - -.tabulator.table-striped .tabulator-row:nth-child(even).tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; -} - -.tabulator.table-striped.table-dark .tabulator-row:nth-child(even) { - background-color: rgba(255, 255, 255, 0.05); -} - -.tabulator.table-bordered { - border: 1px solid #dee2e6; -} - -.tabulator.table-bordered .tabulator-header .tabulator-col { - border-right: 1px solid #dee2e6; -} - -.tabulator.table-bordered .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell { - border-right: 1px solid #dee2e6; -} - -.tabulator.table-borderless .tabulator-header { - border: none; -} - -.tabulator.table-borderless .tabulator-row { - border: none; -} - -.tabulator.table-sm .tabulator-header .tabulator-col .tabulator-col-content { - padding: 0.3rem !important; -} - -.tabulator.table-sm .tabulator-tableHolder .tabulator-table .tabulator-row { - min-height: 1.6rem; -} - -.tabulator.table-sm .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell { - padding: 0.3rem !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-primary { - background: #b8daff !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-secondary { - background: #d6d8db !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-success { - background: #c3e6cb !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-info { - background: #bee5eb !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-warning { - background: #ffeeba !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-danger { - background: #f5c6cb !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-light { - background: #fdfdfe !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-dark { - background: #c6c8ca !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-active { - background: rgba(0, 0, 0, 0.075) !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-primary { - background: #007bff !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-secondary { - background: #6c757d !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-success { - background: #28a745 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-info { - background: #17a2b8 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-warning { - background: #ffc107 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-danger { - background: #dc3545 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-light { - background: #f8f9fa !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-dark { - background: #343a40 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-active { - background: rgba(0, 0, 0, 0.075) !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-primary { - background: #b8daff !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-secondary { - background: #d6d8db !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-success { - background: #c3e6cb !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-info { - background: #bee5eb !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-warning { - background: #ffeeba !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-danger { - background: #f5c6cb !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-light { - background: #fdfdfe !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-dark { - background: #c6c8ca !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-active { - background: rgba(0, 0, 0, 0.075) !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-primary { - background: #007bff !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-secondary { - background: #6c757d !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-success { - background: #28a745 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-info { - background: #17a2b8 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-warning { - background: #ffc107 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-danger { - background: #dc3545 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-light { - background: #f8f9fa !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-dark { - background: #343a40 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-active { - background: rgba(0, 0, 0, 0.075) !important; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 2.5rem; - background-color: transparent; - border-bottom: 1px solid #dee2e6; -} - -.tabulator-row.tabulator-selectable:hover { - background-color: rgba(0, 0, 0, 0.075); - cursor: pointer; -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -.tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #dee2e6; - border-bottom: 1px solid #dee2e6; - pointer-events: none !important; - z-index: 15; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -.tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; -} - -.tabulator-row .tabulator-frozen { - display: inline-block; - position: absolute; - background-color: inherit; - z-index: 10; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #dee2e6; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #dee2e6; -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #dee2e6; - border-bottom: 1px solid #dee2e6; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 1rem; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 0.75rem; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.tabulator-row .tabulator-cell:last-of-type { - border-right: none; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #dee2e6; - border-bottom: 2px solid #dee2e6; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-pack: center; - justify-content: center; - -ms-flex-align: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #ccc; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #ccc; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #ccc; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #ccc; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: transparent; - font-weight: bold; - font-size: 1.1em; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #dee2e6; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #fafafa; - font-weight: bold; - min-width: 100%; -} - -.tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow { - margin-left: 20px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow { - margin-left: 40px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow { - margin-left: 60px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow { - margin-left: 80px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow { - margin-left: 100px; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #666; -} - -.tabulator-edit-select-list { - position: absolute; - display: inline-block; - box-sizing: border-box; - max-height: 200px; - background: transparent; - border: 1px solid #dee2e6; - font-size: 1rem; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item { - padding: 4px; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: transparent; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - cursor: pointer; - color: transparent; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-group { - border-bottom: 1px solid #dee2e6; - padding: 4px; - padding-top: 6px; - font-weight: bold; -} diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap4.min.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap4.min.css deleted file mode 100644 index 9385497885..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap4.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator{position:relative;background-color:transparent;overflow:hidden;font-size:1rem;text-align:left;width:100%;max-width:100%;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator.tabulator-block-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{width:100%;border-top:1px solid #dee2e6;border-bottom:2px solid #dee2e6;font-weight:700;white-space:nowrap;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header,.tabulator .tabulator-header .tabulator-col{position:relative;box-sizing:border-box;background-color:#fff;overflow:hidden}.tabulator .tabulator-header .tabulator-col{display:inline-block;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #dee2e6;background:#e6e6e6;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:.75rem}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:14px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #dee2e6;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child{margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col.ui-sortable-helper{position:absolute;background-color:#e6e6e6!important;border:1px solid #dee2e6}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#e6e6e6}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #666;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-webkit-writing-mode:vertical-rl;-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:1}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #dee2e6}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #dee2e6}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;width:100%;background:#fff!important;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:400%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{position:absolute;top:0;left:0;height:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#000;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:transparent;white-space:nowrap;overflow:visible}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:rgba(0,0,0,.05)!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #dee2e6}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #dee2e6}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-footer{padding:5px 10px;border-top:2px solid #dee2e6;text-align:right;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-5px -10px 5px;text-align:left;background:hsla(0,0%,5%,0)!important;border-bottom:1px solid #dee2e6;border-top:1px solid #dee2e6;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:hsla(0,0%,5%,0)!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0;margin-top:5px;padding:8px 12px;border:1px solid #dee2e6;border-right:none;background:hsla(0,0%,100%,.2);color:#007bff;font-family:inherit;font-weight:400;font-size:inherit}.tabulator .tabulator-footer .tabulator-page[data-page=first]{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabulator .tabulator-footer .tabulator-page[data-page=last]{border:1px solid #dee2e6;border-top-right-radius:4px;border-bottom-right-radius:4px}.tabulator .tabulator-footer .tabulator-page.active{border-color:#007bff;background-color:#007bff;color:#fff}.tabulator .tabulator-footer .tabulator-page:disabled{border-color:#dee2e6;background:#fff;color:#6c757d}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;border-color:#dee2e6;background:#e9ecef;color:#0056b3}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:3;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator.thead-dark .tabulator-header,.tabulator.thead-dark .tabulator-header .tabulator-col{border-color:#32383e;background-color:#212529;color:#fff}.tabulator.table-dark{background-color:#212529}.tabulator.table-dark:not(.thead-light) .tabulator-header,.tabulator.table-dark:not(.thead-light) .tabulator-header .tabulator-col{border-color:#32383e;background-color:#212529;color:#fff}.tabulator.table-dark .tabulator-tableHolder{color:#fff}.tabulator.table-dark .tabulator-row{border-color:#32383e}.tabulator.table-dark .tabulator-row:hover{background-color:hsla(0,0%,100%,.075)!important}.tabulator.table-striped .tabulator-row:nth-child(2n){background-color:rgba(0,0,0,.05)}.tabulator.table-striped .tabulator-row:nth-child(2n).tabulator-selected{background-color:#9abcea}.tabulator.table-striped .tabulator-row:nth-child(2n).tabulator-selectable:hover{background-color:rgba(0,0,0,.075);cursor:pointer}.tabulator.table-striped .tabulator-row:nth-child(2n).tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator.table-striped.table-dark .tabulator-row:nth-child(2n){background-color:hsla(0,0%,100%,.05)}.tabulator.table-bordered{border:1px solid #dee2e6}.tabulator.table-bordered .tabulator-header .tabulator-col,.tabulator.table-bordered .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell{border-right:1px solid #dee2e6}.tabulator.table-borderless .tabulator-header,.tabulator.table-borderless .tabulator-row{border:none}.tabulator.table-sm .tabulator-header .tabulator-col .tabulator-col-content{padding:.3rem!important}.tabulator.table-sm .tabulator-tableHolder .tabulator-table .tabulator-row{min-height:1.6rem}.tabulator.table-sm .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell{padding:.3rem!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-primary{background:#b8daff!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-secondary{background:#d6d8db!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-success{background:#c3e6cb!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-info{background:#bee5eb!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-warning{background:#ffeeba!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-danger{background:#f5c6cb!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-light{background:#fdfdfe!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-dark{background:#c6c8ca!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-active{background:rgba(0,0,0,.075)!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-primary{background:#007bff!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-secondary{background:#6c757d!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-success{background:#28a745!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-info{background:#17a2b8!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-warning{background:#ffc107!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-danger{background:#dc3545!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-light{background:#f8f9fa!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-dark{background:#343a40!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-active{background:rgba(0,0,0,.075)!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-primary{background:#b8daff!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-secondary{background:#d6d8db!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-success{background:#c3e6cb!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-info{background:#bee5eb!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-warning{background:#ffeeba!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-danger{background:#f5c6cb!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-light{background:#fdfdfe!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-dark{background:#c6c8ca!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-active{background:rgba(0,0,0,.075)!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-primary{background:#007bff!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-secondary{background:#6c757d!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-success{background:#28a745!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-info{background:#17a2b8!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-warning{background:#ffc107!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-danger{background:#dc3545!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-light{background:#f8f9fa!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-dark{background:#343a40!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-active{background:rgba(0,0,0,.075)!important}.tabulator-row{position:relative;box-sizing:border-box;min-height:2.5rem;background-color:transparent;border-bottom:1px solid #dee2e6}.tabulator-row.tabulator-selectable:hover{background-color:rgba(0,0,0,.075);cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6;pointer-events:none!important;z-index:2}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:1}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #dee2e6}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #dee2e6}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:1rem}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:.75rem;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #dee2e6;border-bottom:2px solid #dee2e6}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #ccc;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#ccc}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#ccc}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#ccc}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:transparent;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #dee2e6;border-top:1px solid #999;padding:5px;padding-left:10px;background:#fafafa;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow{margin-left:20px}.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow{margin-left:40px}.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow{margin-left:60px}.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow{margin-left:80px}.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow{margin-left:100px}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#666}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:transparent;border:1px solid #dee2e6;font-size:1rem;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:4}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:transparent;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:transparent;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #dee2e6;padding:4px;padding-top:6px;font-weight:700} -/*# sourceMappingURL=tabulator_bootstrap4.min.css.map */ diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap4.min.css.map b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap4.min.css.map deleted file mode 100644 index ce13175937..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/bootstrap/tabulator_bootstrap4.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_bootstrap4.min.css"],"names":[],"mappings":"AACA,WACE,kBAAmB,AACnB,6BAA8B,AAC9B,gBAAiB,AACjB,eAAgB,AAChB,gBAAiB,AACjB,WAAY,AACZ,eAAgB,AAEhB,uBAAyB,CAC1B,AAED,iFACE,cAAgB,CACjB,AAED,kCACE,yBAA0B,AACvB,sBAAuB,AACtB,qBAAsB,AAClB,gBAAkB,CAC3B,AAED,6BAGE,WAAY,AACZ,6BAA8B,AAC9B,gCAAiC,AAEjC,gBAAkB,AAClB,mBAAoB,AAEpB,sBAAuB,AACvB,wBAAyB,AACzB,yBAA0B,AAC1B,mBAAqB,CACtB,AAED,yEAfE,kBAAmB,AACnB,sBAAuB,AAIvB,sBAAuB,AAGvB,eAAiB,CAOnB,AAQC,4CAPC,qBAAsB,AAItB,gBAAiB,AACjB,qBAAuB,CAExB,AAED,6DACE,kBAAmB,AACnB,yBAA0B,AAC1B,mBAAoB,AACpB,mBAAqB,CACtB,AAED,mEACE,sBAAuB,AACvB,kBAAmB,AACnB,cAAiB,CAClB,AAED,wFACE,sBAAuB,AACvB,WAAY,AACZ,mBAAoB,AACpB,gBAAiB,AACjB,uBAAwB,AACxB,qBAAuB,CACxB,AAED,gHACE,sBAAuB,AACvB,WAAY,AACZ,sBAAuB,AACvB,YAAa,AACb,eAAiB,CAClB,AAED,oFACE,qBAAsB,AACtB,kBAAmB,AACnB,SAAU,AACV,UAAW,AACX,QAAS,AACT,SAAU,AACV,kCAAmC,AACnC,mCAAoC,AACpC,4BAA8B,CAC/B,AAED,0FACE,kBAAmB,AACnB,oBAAqB,AACrB,aAAc,AACd,6BAA8B,AAC9B,eAAiB,CAClB,AAED,oHACE,iBAAmB,CACpB,AAED,0FACE,YAAc,CACf,AAED,+DACE,kBAAmB,AACnB,mCAAqC,AACrC,wBAA0B,CAC3B,AAED,qEACE,kBAAmB,AACnB,sBAAuB,AACvB,eAAgB,AAChB,WAAY,AACZ,iBAAmB,CACpB,AAED,8EACE,qBAAwB,CACzB,AAED,yEACE,cAAgB,CACjB,AAED,sFACE,QAAS,AACT,QAAU,CACX,AAED,oFACE,kBAAoB,CACrB,AAED,qEACE,eAAgB,AAChB,wBAA0B,CAC3B,AAED,uHACE,gBAAiB,AACjB,4BAA8B,CAC/B,AAED,sHACE,gBAAiB,AACjB,4BAA8B,CAC/B,AAED,uHACE,0BAA2B,AAC3B,kBAAoB,CACrB,AAED,+GACE,iCAAkC,AAC9B,uBAAwB,AACpB,yBAA0B,AAClC,uBAAwB,AACxB,oBAAqB,AACrB,aAAc,AACd,sBAAuB,AACnB,mBAAoB,AACxB,qBAAsB,AAClB,sBAAwB,CAC7B,AAED,oHAEM,wBAA0B,CAC/B,AAED,2GACE,gBAAiB,AACjB,gBAAkB,CACnB,AAED,uIACE,gBAAiB,AACjB,mBAAqB,CACtB,AAED,uGACE,qBAAuB,CACxB,AAED,+CACE,qBAAsB,AACtB,kBAAmB,AACnB,SAAY,CACb,AAED,qEACE,8BAAgC,CACjC,AAED,sEACE,6BAA+B,CAChC,AAED,qDACE,sBAAuB,AACvB,WAAY,AACZ,0BAA6B,AAC7B,6BAA8B,AAC9B,gCAAiC,AACjC,eAAiB,CAClB,AAED,oEACE,yBAA6B,CAC9B,AAED,iGACE,YAAc,CACf,AAED,2DACE,cAAgB,CACjB,AAED,iEACE,YAAc,CACf,AAED,kCACE,kBAAmB,AACnB,WAAY,AACZ,mBAAoB,AACpB,cAAe,AACf,gCAAkC,CACnC,AAED,wCACE,YAAc,CACf,AAED,yDACE,sBAAuB,AACvB,oBAAqB,AACrB,aAAc,AACd,sBAAuB,AACnB,mBAAoB,AACxB,UAAY,CACb,AAED,wFACE,kBAAmB,AACnB,MAAO,AACP,OAAQ,AACR,WAAa,CACd,AAED,8DACE,qBAAsB,AACtB,cAAe,AACf,aAAc,AACd,WAAY,AACZ,gBAAkB,AAClB,cAAgB,CACjB,AAED,mDACE,kBAAmB,AACnB,qBAAsB,AACtB,6BAA8B,AAC9B,mBAAoB,AACpB,gBAAkB,CACnB,AAED,kFACE,gBAAkB,AAClB,oCAA2C,CAC5C,AAED,sGACE,+BAAiC,CAClC,AAED,yGACE,4BAA8B,CAC/B,AAED,wCACE,kBAAmB,AACnB,QAAS,AACT,MAAO,AACP,SAAU,AACV,SAAW,CACZ,AAED,6CACE,OAAQ,AACR,UAAY,CACb,AAED,8CACE,gBAAkB,CACnB,AAED,6BACE,iBAAkB,AAClB,6BAA8B,AAC9B,iBAAkB,AAClB,gBAAkB,AAClB,mBAAoB,AACpB,qBAAsB,AAClB,iBAAkB,AACtB,sBAAuB,AACvB,wBAAyB,AACzB,yBAA0B,AAC1B,mBAAqB,CACtB,AAED,qDACE,sBAAuB,AACvB,wBAAyB,AACzB,sBAA6B,AAC7B,gBAAiB,AACjB,qCAA2C,AAC3C,gCAAiC,AACjC,6BAA8B,AAC9B,eAAiB,CAClB,AAED,oEACE,oCAA2C,CAC5C,AAED,iGACE,YAAc,CACf,AAED,gEACE,mBAAoB,AACpB,kBAAoB,CACrB,AAED,6CACE,qBAAsB,AACtB,SAAU,AACV,eAAgB,AAChB,iBAAkB,AAClB,yBAA0B,AAC1B,kBAAmB,AACnB,8BAAqC,AACrC,cAAe,AACf,oBAAqB,AACrB,gBAAoB,AACpB,iBAAmB,CACpB,AAED,8DACE,2BAA4B,AAC5B,6BAA+B,CAChC,AAED,6DACE,yBAA0B,AAC1B,4BAA6B,AAC7B,8BAAgC,CACjC,AAED,oDACE,qBAAsB,AACtB,yBAA0B,AAC1B,UAAY,CACb,AAED,sDACE,qBAAsB,AACtB,gBAAiB,AACjB,aAAe,CAChB,AAED,kEACE,eAAgB,AAChB,qBAAsB,AACtB,mBAAoB,AACpB,aAAe,CAChB,AAED,6BACE,kBAAmB,AACnB,oBAAqB,AACrB,aAAc,AACd,sBAAuB,AACnB,mBAAoB,AACxB,MAAO,AACP,OAAQ,AACR,UAAa,AACb,YAAa,AACb,WAAY,AACZ,0BAA+B,AAC/B,iBAAmB,CACpB,AAED,mDACE,qBAAsB,AACtB,cAAe,AACf,kBAAmB,AACnB,mBAAoB,AACpB,gBAAiB,AACjB,gBAAkB,AAClB,cAAgB,CACjB,AAED,qEACE,sBAAuB,AACvB,UAAY,CACb,AAED,mEACE,sBAAuB,AACvB,aAAe,CAChB,AAQD,+FACE,qBAAsB,AACtB,yBAA0B,AAC1B,UAAY,CACb,AAED,sBACE,wBAA0B,CAC3B,AAQD,mIALE,qBAAsB,AACtB,yBAA0B,AAC1B,UAAY,CAOb,AAED,6CACE,UAAY,CACb,AAED,qCACE,oBAAsB,CACvB,AAED,2CACE,+CAAwD,CACzD,AAED,sDACE,gCAAsC,CACvC,AAED,yEACE,wBAA0B,CAC3B,AAED,iFACE,kCAAuC,AACvC,cAAgB,CACjB,AAED,+EACE,yBAA0B,AAC1B,cAAgB,CACjB,AAED,iEACE,oCAA4C,CAC7C,AAED,0BACE,wBAA0B,CAC3B,AAMD,4JACE,8BAAgC,CACjC,AAMD,yFACE,WAAa,CACd,AAED,4EACE,uBAA2B,CAC5B,AAED,2EACE,iBAAmB,CACpB,AAED,2FACE,uBAA2B,CAC5B,AAED,gFACE,4BAA+B,CAChC,AAED,kFACE,4BAA+B,CAChC,AAED,gFACE,4BAA+B,CAChC,AAED,6EACE,4BAA+B,CAChC,AAED,gFACE,4BAA+B,CAChC,AAED,+EACE,4BAA+B,CAChC,AAED,8EACE,4BAA+B,CAChC,AAED,6EACE,4BAA+B,CAChC,AAED,+EACE,qCAA4C,CAC7C,AAED,6EACE,4BAA+B,CAChC,AAED,+EACE,4BAA+B,CAChC,AAED,6EACE,4BAA+B,CAChC,AAED,0EACE,4BAA+B,CAChC,AAED,6EACE,4BAA+B,CAChC,AAED,4EACE,4BAA+B,CAChC,AAED,2EACE,4BAA+B,CAChC,AAED,0EACE,4BAA+B,CAChC,AAED,4EACE,qCAA4C,CAC7C,AAED,gGACE,4BAA+B,CAChC,AAED,kGACE,4BAA+B,CAChC,AAED,gGACE,4BAA+B,CAChC,AAED,6FACE,4BAA+B,CAChC,AAED,gGACE,4BAA+B,CAChC,AAED,+FACE,4BAA+B,CAChC,AAED,8FACE,4BAA+B,CAChC,AAED,6FACE,4BAA+B,CAChC,AAED,+FACE,qCAA4C,CAC7C,AAED,6FACE,4BAA+B,CAChC,AAED,+FACE,4BAA+B,CAChC,AAED,6FACE,4BAA+B,CAChC,AAED,0FACE,4BAA+B,CAChC,AAED,6FACE,4BAA+B,CAChC,AAED,4FACE,4BAA+B,CAChC,AAED,2FACE,4BAA+B,CAChC,AAED,0FACE,4BAA+B,CAChC,AAED,4FACE,qCAA4C,CAC7C,AAED,eACE,kBAAmB,AACnB,sBAAuB,AACvB,kBAAmB,AACnB,6BAA8B,AAC9B,+BAAiC,CAClC,AAED,0CACE,kCAAuC,AACvC,cAAgB,CACjB,AAED,kCACE,wBAA0B,CAC3B,AAED,wCACE,yBAA0B,AAC1B,cAAgB,CACjB,AAED,gCACE,kBAAmB,AACnB,6BAA8B,AAC9B,gCAAiC,AACjC,8BAAgC,AAChC,SAAY,CACb,AAED,4CACE,kBAAmB,AACnB,QAAS,AACT,SAAU,AACV,OAAQ,AACR,UAAY,CACb,AAED,iDACE,MAAO,AACP,WAAa,CACd,AAED,kDACE,gBAAkB,CACnB,AAED,iCACE,qBAAsB,AACtB,kBAAmB,AACnB,yBAA0B,AAC1B,SAAY,CACb,AAED,uDACE,8BAAgC,CACjC,AAED,wDACE,6BAA+B,CAChC,AAED,8CACE,sBAAuB,AACvB,YAAa,AACb,6BAA8B,AAC9B,+BAAiC,CAClC,AAED,oDACE,YAAc,CACf,AAED,oDACE,cAAgB,CACjB,AAED,0DACE,iBAAmB,CACpB,AAED,wEACE,kBAAoB,CACrB,AAED,+BACE,qBAAsB,AACtB,kBAAmB,AACnB,sBAAuB,AACvB,eAAiB,AACjB,sBAAuB,AACvB,mBAAoB,AACpB,gBAAiB,AACjB,sBAAwB,CACzB,AAED,4CACE,iBAAmB,CACpB,AAED,iDACE,yBAA0B,AAC1B,SAAW,CACZ,AAED,+GACE,WAAY,AACZ,sBAAwB,CACzB,AAED,yDACE,qBAA0B,CAC3B,AAED,+HACE,WAAY,AACZ,uBAAwB,AACxB,UAAe,CAChB,AAED,6EACE,YAAc,CACf,AAED,oDACE,2BAA4B,AAC5B,oBAAqB,AACrB,sBAAuB,AACnB,mBAAoB,AACxB,sBAAuB,AACvB,wBAAyB,AACzB,yBAA0B,AAC1B,mBAAqB,CACtB,AAED,8EACE,SAAW,CACZ,AAED,wGACE,WAAY,AACZ,WAAY,AACZ,eAAgB,AAChB,eAAiB,CAClB,AAED,2DACE,qBAAsB,AACtB,sBAAuB,AACvB,WAAY,AACZ,UAAW,AACX,gBAAiB,AACjB,iBAAkB,AAClB,8BAA+B,AAC/B,8BAA+B,AAC/B,+BAAiC,CAClC,AAED,4DACE,2BAA4B,AAC5B,oBAAqB,AACrB,qBAAsB,AAClB,uBAAwB,AAC5B,sBAAuB,AACnB,mBAAoB,AACxB,sBAAuB,AACvB,YAAa,AACb,WAAY,AACZ,iBAAkB,AAClB,sBAAuB,AACvB,kBAAmB,AACnB,0BAA+B,AAC/B,eAAiB,CAClB,AAED,kEACE,eAAgB,AAChB,yBAA+B,CAChC,AAED,kGACE,qBAAsB,AACtB,kBAAmB,AACnB,WAAY,AACZ,UAAW,AACX,sBAAwB,CACzB,AAED,wGACE,kBAAmB,AACnB,WAAY,AACZ,UAAW,AACX,QAAS,AACT,WAAY,AACZ,UAAW,AACX,eAAiB,CAClB,AAED,gGACE,qBAAsB,AACtB,kBAAmB,AACnB,WAAY,AACZ,UAAW,AACX,eAAiB,CAClB,AAED,sGACE,kBAAmB,AACnB,WAAY,AACZ,UAAW,AACX,QAAS,AACT,WAAY,AACZ,UAAW,AACX,eAAiB,CAClB,AAED,qEACE,2BAA4B,AAC5B,oBAAqB,AACrB,sBAAuB,AACnB,mBAAoB,AACxB,qBAAsB,AAClB,uBAAwB,AAC5B,sBAAuB,AACvB,wBAAyB,AACzB,yBAA0B,AAC1B,oBAAqB,AACrB,YAAa,AACb,WAAY,AACZ,mBAAoB,AACpB,gBAAiB,AACjB,kBAAmB,AACnB,gBAAkB,AAClB,eAAiB,CAClB,AAED,2EACE,UAAY,CACb,AAED,sHACE,eAAiB,CAClB,AAMD,sOACE,YAAc,CACf,AAED,+BACE,sBAAuB,AACvB,6BAA8B,AAC9B,+BAAgC,AAChC,0BAA2B,AAC3B,YAAa,AACb,kBAAmB,AACnB,mBAAoB,AACpB,gBAAkB,AAClB,cAAgB,CACjB,AAED,qCACE,eAAgB,AAChB,+BAAqC,CACtC,AAED,wEACE,kBAAmB,AACnB,kCAAmC,AACnC,mCAAoC,AACpC,0BAA2B,AAC3B,eAAiB,CAClB,AAED,wEACE,gBAAkB,CACnB,AAED,wEACE,gBAAkB,CACnB,AAED,wEACE,gBAAkB,CACnB,AAED,wEACE,gBAAkB,CACnB,AAED,wEACE,iBAAmB,CACpB,AAED,gDACE,qBAAsB,AACtB,QAAS,AACT,SAAU,AACV,kBAAmB,AACnB,iCAAkC,AAClC,oCAAqC,AACrC,eAAgB,AAChB,2BAA4B,AAC5B,qBAAuB,CACxB,AAED,oCACE,iBAAkB,AAClB,UAAY,CACb,AAED,4BACE,kBAAmB,AACnB,qBAAsB,AACtB,sBAAuB,AACvB,iBAAkB,AAClB,uBAAwB,AACxB,yBAA0B,AAC1B,eAAgB,AAChB,gBAAiB,AACjB,iCAAkC,AAClC,SAAe,CAChB,AAED,6DACE,WAAa,CACd,AAED,oEACE,kBAAmB,AACnB,kBAAoB,CACrB,AAED,mEACE,eAAgB,AAChB,kBAAmB,AACnB,kBAAoB,CACrB,AAED,8DACE,gCAAiC,AACjC,YAAa,AACb,gBAAiB,AACjB,eAAkB,CACnB","file":"tabulator_bootstrap4.min.css","sourcesContent":["/* Tabulator v4.1.2 (c) Oliver Folkerd */\n.tabulator {\n position: relative;\n background-color: transparent;\n overflow: hidden;\n font-size: 1rem;\n text-align: left;\n width: 100%;\n max-width: 100%;\n -ms-transform: translatez(0);\n transform: translatez(0);\n}\n\n.tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableHolder .tabulator-table {\n min-width: 100%;\n}\n\n.tabulator.tabulator-block-select {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-top: 1px solid #dee2e6;\n border-bottom: 2px solid #dee2e6;\n background-color: #fff;\n font-weight: bold;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n}\n\n.tabulator .tabulator-header .tabulator-col {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n background-color: #fff;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #dee2e6;\n background: #e6e6e6;\n pointer-events: none;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 0.75rem;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n display: inline-block;\n position: absolute;\n top: 14px;\n right: 8px;\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n border-top: 1px solid #dee2e6;\n overflow: hidden;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child {\n margin-right: -1px;\n}\n\n.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {\n display: none;\n}\n\n.tabulator .tabulator-header .tabulator-col.ui-sortable-helper {\n position: absolute;\n background-color: #e6e6e6 !important;\n border: 1px solid #dee2e6;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {\n cursor: pointer;\n background-color: #e6e6e6;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"asc\"] .tabulator-col-content .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"desc\"] .tabulator-col-content .tabulator-arrow {\n border-top: 6px solid #666;\n border-bottom: none;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n -webkit-writing-mode: vertical-rl;\n -ms-writing-mode: tb-rl;\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n -ms-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow {\n right: calc(50% - 6px);\n}\n\n.tabulator .tabulator-header .tabulator-frozen {\n display: inline-block;\n position: absolute;\n z-index: 10;\n}\n\n.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #dee2e6;\n}\n\n.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #dee2e6;\n}\n\n.tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n width: 100%;\n background: white !important;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #dee2e6;\n overflow: hidden;\n}\n\n.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important;\n}\n\n.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none;\n}\n\n.tabulator .tabulator-header .tabulator-frozen-rows-holder {\n min-width: 400%;\n}\n\n.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none;\n}\n\n.tabulator .tabulator-tableHolder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.tabulator .tabulator-tableHolder:focus {\n outline: none;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-placeholder {\n box-sizing: border-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n width: 100%;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-placeholder span {\n display: inline-block;\n margin: 0 auto;\n padding: 10px;\n color: #000;\n font-weight: bold;\n font-size: 20px;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table {\n position: relative;\n display: inline-block;\n background-color: transparent;\n white-space: nowrap;\n overflow: visible;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: rgba(0, 0, 0, 0.05) !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #dee2e6;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #dee2e6;\n}\n\n.tabulator .tabulator-col-resize-handle {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n width: 5px;\n}\n\n.tabulator .tabulator-col-resize-handle.prev {\n left: 0;\n right: auto;\n}\n\n.tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize;\n}\n\n.tabulator .tabulator-footer {\n padding: 5px 10px;\n border-top: 2px solid #dee2e6;\n text-align: right;\n font-weight: bold;\n white-space: nowrap;\n -ms-user-select: none;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n}\n\n.tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: calc(100% + 20px);\n margin: -5px -10px 5px -10px;\n text-align: left;\n background: rgba(13, 13, 13, 0) !important;\n border-bottom: 1px solid #dee2e6;\n border-top: 1px solid #dee2e6;\n overflow: hidden;\n}\n\n.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n background: rgba(13, 13, 13, 0) !important;\n}\n\n.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none;\n}\n\n.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -5px;\n border-bottom: none;\n}\n\n.tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0;\n margin-top: 5px;\n padding: 8px 12px;\n border: 1px solid #dee2e6;\n border-right: none;\n background: rgba(255, 255, 255, 0.2);\n color: #007bff;\n font-family: inherit;\n font-weight: normal;\n font-size: inherit;\n}\n\n.tabulator .tabulator-footer .tabulator-page[data-page=\"first\"] {\n border-top-left-radius: 4px;\n border-bottom-left-radius: 4px;\n}\n\n.tabulator .tabulator-footer .tabulator-page[data-page=\"last\"] {\n border: 1px solid #dee2e6;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n\n.tabulator .tabulator-footer .tabulator-page.active {\n border-color: #007bff;\n background-color: #007bff;\n color: #fff;\n}\n\n.tabulator .tabulator-footer .tabulator-page:disabled {\n border-color: #dee2e6;\n background: #fff;\n color: #6c757d;\n}\n\n.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {\n cursor: pointer;\n border-color: #dee2e6;\n background: #e9ecef;\n color: #0056b3;\n}\n\n.tabulator .tabulator-loader {\n position: absolute;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center;\n}\n\n.tabulator .tabulator-loader .tabulator-loader-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px;\n}\n\n.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading {\n border: 4px solid #333;\n color: #000;\n}\n\n.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error {\n border: 4px solid #D00;\n color: #590000;\n}\n\n.tabulator.thead-dark .tabulator-header {\n border-color: #32383e;\n background-color: #212529;\n color: #fff;\n}\n\n.tabulator.thead-dark .tabulator-header .tabulator-col {\n border-color: #32383e;\n background-color: #212529;\n color: #fff;\n}\n\n.tabulator.table-dark {\n background-color: #212529;\n}\n\n.tabulator.table-dark:not(.thead-light) .tabulator-header {\n border-color: #32383e;\n background-color: #212529;\n color: #fff;\n}\n\n.tabulator.table-dark:not(.thead-light) .tabulator-header .tabulator-col {\n border-color: #32383e;\n background-color: #212529;\n color: #fff;\n}\n\n.tabulator.table-dark .tabulator-tableHolder {\n color: #fff;\n}\n\n.tabulator.table-dark .tabulator-row {\n border-color: #32383e;\n}\n\n.tabulator.table-dark .tabulator-row:hover {\n background-color: rgba(255, 255, 255, 0.075) !important;\n}\n\n.tabulator.table-striped .tabulator-row:nth-child(even) {\n background-color: rgba(0, 0, 0, 0.05);\n}\n\n.tabulator.table-striped .tabulator-row:nth-child(even).tabulator-selected {\n background-color: #9ABCEA;\n}\n\n.tabulator.table-striped .tabulator-row:nth-child(even).tabulator-selectable:hover {\n background-color: rgba(0, 0, 0, 0.075);\n cursor: pointer;\n}\n\n.tabulator.table-striped .tabulator-row:nth-child(even).tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer;\n}\n\n.tabulator.table-striped.table-dark .tabulator-row:nth-child(even) {\n background-color: rgba(255, 255, 255, 0.05);\n}\n\n.tabulator.table-bordered {\n border: 1px solid #dee2e6;\n}\n\n.tabulator.table-bordered .tabulator-header .tabulator-col {\n border-right: 1px solid #dee2e6;\n}\n\n.tabulator.table-bordered .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: 1px solid #dee2e6;\n}\n\n.tabulator.table-borderless .tabulator-header {\n border: none;\n}\n\n.tabulator.table-borderless .tabulator-row {\n border: none;\n}\n\n.tabulator.table-sm .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 0.3rem !important;\n}\n\n.tabulator.table-sm .tabulator-tableHolder .tabulator-table .tabulator-row {\n min-height: 1.6rem;\n}\n\n.tabulator.table-sm .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 0.3rem !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-primary {\n background: #b8daff !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-secondary {\n background: #d6d8db !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-success {\n background: #c3e6cb !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-info {\n background: #bee5eb !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-warning {\n background: #ffeeba !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-danger {\n background: #f5c6cb !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-light {\n background: #fdfdfe !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-dark {\n background: #c6c8ca !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.table-active {\n background: rgba(0, 0, 0, 0.075) !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-primary {\n background: #007bff !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-secondary {\n background: #6c757d !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-success {\n background: #28a745 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-info {\n background: #17a2b8 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-warning {\n background: #ffc107 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-danger {\n background: #dc3545 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-light {\n background: #f8f9fa !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-dark {\n background: #343a40 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.bg-active {\n background: rgba(0, 0, 0, 0.075) !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-primary {\n background: #b8daff !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-secondary {\n background: #d6d8db !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-success {\n background: #c3e6cb !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-info {\n background: #bee5eb !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-warning {\n background: #ffeeba !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-danger {\n background: #f5c6cb !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-light {\n background: #fdfdfe !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-dark {\n background: #c6c8ca !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.table-active {\n background: rgba(0, 0, 0, 0.075) !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-primary {\n background: #007bff !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-secondary {\n background: #6c757d !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-success {\n background: #28a745 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-info {\n background: #17a2b8 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-warning {\n background: #ffc107 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-danger {\n background: #dc3545 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-light {\n background: #f8f9fa !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-dark {\n background: #343a40 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.bg-active {\n background: rgba(0, 0, 0, 0.075) !important;\n}\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 2.5rem;\n background-color: transparent;\n border-bottom: 1px solid #dee2e6;\n}\n\n.tabulator-row.tabulator-selectable:hover {\n background-color: rgba(0, 0, 0, 0.075);\n cursor: pointer;\n}\n\n.tabulator-row.tabulator-selected {\n background-color: #9ABCEA;\n}\n\n.tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer;\n}\n\n.tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #dee2e6;\n pointer-events: none !important;\n z-index: 15;\n}\n\n.tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px;\n}\n\n.tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto;\n}\n\n.tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize;\n}\n\n.tabulator-row .tabulator-frozen {\n display: inline-block;\n position: absolute;\n background-color: inherit;\n z-index: 10;\n}\n\n.tabulator-row .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #dee2e6;\n}\n\n.tabulator-row .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #dee2e6;\n}\n\n.tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #dee2e6;\n border-bottom: 1px solid #dee2e6;\n}\n\n.tabulator-row .tabulator-responsive-collapse:empty {\n display: none;\n}\n\n.tabulator-row .tabulator-responsive-collapse table {\n font-size: 1rem;\n}\n\n.tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative;\n}\n\n.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px;\n}\n\n.tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 0.75rem;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tabulator-row .tabulator-cell:last-of-type {\n border-right: none;\n}\n\n.tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n padding: 0;\n}\n\n.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n}\n\n.tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #dd0000;\n}\n\n.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #dd0000;\n}\n\n.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {\n display: none;\n}\n\n.tabulator-row .tabulator-cell.tabulator-row-handle {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-align: center;\n align-items: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n}\n\n.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%;\n}\n\n.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #dee2e6;\n border-bottom: 2px solid #dee2e6;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-pack: center;\n justify-content: center;\n -ms-flex-align: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #ccc;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #ccc;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #ccc;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #ccc;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: transparent;\n font-weight: bold;\n font-size: 1.1em;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none;\n}\n\n.tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #dee2e6;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #fafafa;\n font-weight: bold;\n min-width: 100%;\n}\n\n.tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow {\n margin-left: 20px;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow {\n margin-left: 40px;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow {\n margin-left: 60px;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow {\n margin-left: 80px;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow {\n margin-left: 100px;\n}\n\n.tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle;\n}\n\n.tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #666;\n}\n\n.tabulator-edit-select-list {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n max-height: 200px;\n background: transparent;\n border: 1px solid #dee2e6;\n font-size: 1rem;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000;\n}\n\n.tabulator-edit-select-list .tabulator-edit-select-list-item {\n padding: 4px;\n}\n\n.tabulator-edit-select-list .tabulator-edit-select-list-item.active {\n color: transparent;\n background: #1D68CD;\n}\n\n.tabulator-edit-select-list .tabulator-edit-select-list-item:hover {\n cursor: pointer;\n color: transparent;\n background: #1D68CD;\n}\n\n.tabulator-edit-select-list .tabulator-edit-select-list-group {\n border-bottom: 1px solid #dee2e6;\n padding: 4px;\n padding-top: 6px;\n font-weight: bold;\n}\n"]} \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/semantic-ui/tabulator_semantic-ui.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/semantic-ui/tabulator_semantic-ui.css deleted file mode 100644 index d825e07830..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/semantic-ui/tabulator_semantic-ui.css +++ /dev/null @@ -1,1284 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -/******************************* - Site Settings -*******************************/ -/*------------------- - Fonts ---------------------*/ -/*------------------- - Base Sizes ---------------------*/ -/* This is the single variable that controls them all */ -/* The size of page text */ -/*------------------- - Exact Pixel Values ---------------------*/ -/* - These are used to specify exact pixel values in em - for things like borders that remain constantly - sized as emSize adjusts - - Since there are many more sizes than names for sizes, - these are named by their original pixel values. - -*/ -/*------------------- - Border Radius ---------------------*/ -/* See Power-user section below - for explanation of $px variables -*/ -/*------------------- - Site Colors ---------------------*/ -/*--- Colors ---*/ -/*--- Light Colors ---*/ -/*--- Neutrals ---*/ -/*--- Colored Backgrounds ---*/ -/*--- Colored Text ---*/ -/*--- Colored Headers ---*/ -/*--- Colored Border ---*/ -/*------------------- - Alpha Colors ---------------------*/ -/*------------------- - Brand Colors ---------------------*/ -/*-------------- - Page Heading ----------------*/ -/*------------------- - Page ---------------------*/ -/*-------------- - Form Input ----------------*/ -/* This adjusts the default form input across all elements */ -/* Input Text Color */ -/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ -/*------------------- - Focused Input ---------------------*/ -/* Used on inputs, textarea etc */ -/* Used on dropdowns, other larger blocks */ -/*------------------- - Sizes ---------------------*/ -/* - Sizes are all expressed in terms of 14px/em (default em) - This ensures these "ratios" remain constant despite changes in EM -*/ -/*------------------- - Paragraph ---------------------*/ -/*------------------- - Links ---------------------*/ -/*------------------- - Highlighted Text ---------------------*/ -/*------------------- - Em Sizes ---------------------*/ -/* - This rounds $size values to the closest pixel then expresses that value in (r)em. - This ensures all size values round to exact pixels -*/ -/* em */ -/* rem */ -/*------------------- - Loader ---------------------*/ -/*------------------- - Grid ---------------------*/ -/*------------------- - Transitions ---------------------*/ -/*------------------- - Breakpoints ---------------------*/ -/* Columns */ -/******************************* - Power-User -*******************************/ -/*------------------- - Emotive Colors ---------------------*/ -/* Positive */ -/* Negative */ -/* Info */ -/* Warning */ -/*------------------- - Paths ---------------------*/ -/* For source only. Modified in gulp for dist */ -/*------------------- - Icons ---------------------*/ -/* Maximum Glyph Width of Icon */ -/*------------------- - Neutral Text ---------------------*/ -/*------------------- - Brand Colors ---------------------*/ -/*------------------- - Borders ---------------------*/ -/*------------------- - Accents ---------------------*/ -/* Differentiating Neutrals */ -/* Differentiating Layers */ -/*------------------- - Derived Values ---------------------*/ -/* Loaders Position Offset */ -/* Rendered Scrollbar Width */ -/* Maximum Single Character Glyph Width, aka Capital "W" */ -/* Used to match floats with text */ -/* Header Spacing */ -/* Minimum Mobile Width */ -/* Positive / Negative Dupes */ -/* Responsive */ -/******************************* - States -*******************************/ -/*------------------- - Disabled ---------------------*/ -/*------------------- - Hover ---------------------*/ -/*--- Shadows ---*/ -/*--- Colors ---*/ -/*--- Emotive ---*/ -/*--- Brand ---*/ -/*--- Dark Tones ---*/ -/*--- Light Tones ---*/ -/*------------------- - Focus ---------------------*/ -/*--- Colors ---*/ -/*--- Emotive ---*/ -/*--- Brand ---*/ -/*--- Dark Tones ---*/ -/*--- Light Tones ---*/ -/*------------------- - Down (:active) ---------------------*/ -/*--- Colors ---*/ -/*--- Emotive ---*/ -/*--- Brand ---*/ -/*--- Dark Tones ---*/ -/*--- Light Tones ---*/ -/*------------------- - Active ---------------------*/ -/*--- Colors ---*/ -/*--- Emotive ---*/ -/*--- Brand ---*/ -/*--- Dark Tones ---*/ -/*--- Light Tones ---*/ -/******************************* - Table -*******************************/ -/*------------------- - Element ---------------------*/ -/*-------------- - Parts ----------------*/ -/* Table Row */ -/* Table Cell */ -/* Table Header */ -/* Table Footer */ -/* Responsive Size */ -/*------------------- - Types ---------------------*/ -/* Definition */ -/*-------------- - Couplings ----------------*/ -/*-------------- - States ----------------*/ -/* Positive */ -/* Negative */ -/* Error */ -/* Warning */ -/* Active */ -/*-------------- - Types ----------------*/ -/* Attached */ -/* Striped */ -/* Selectable */ -/* Sortable */ -/* Colors */ -/* Inverted */ -/* Basic */ -/* Padded */ -/* Compact */ -/* Sizes */ -.tabulator { - position: relative; - background-color: #FFFFFF; - overflow: hidden; - font-size: 14px; - text-align: left; - width: 100%; - margin: 1em 0em; - border: 1px solid rgba(34, 36, 38, 0.15); - box-shadow: none; - border-radius: 0.28571/pxrem; - color: rgba(0, 0, 0, 0.87); - -ms-transform: translatez(0); - transform: translatez(0); - /* Red */ - /* Orange */ - /* Yellow */ - /* Olive */ - /* Green */ - /* Teal */ - /* Blue */ - /* Violet */ - /* Purple */ - /* Pink */ - /* Brown */ - /* Grey */ - /* Black */ -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table { - min-width: 100%; -} - -.tabulator.tabulator-block-select { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid rgba(34, 36, 38, 0.1); - background-color: #F9FAFB; - box-shadow: none; - color: rgba(0, 0, 0, 0.87); - font-style: none; - font-weight: bold; - text-transform: none; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-block; - position: relative; - box-sizing: border-box; - background-color: #F9FAFB; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #999; - background: #dae1e7; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 0.92857em 0.78571em; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - display: inline-block; - position: absolute; - top: 18px; - right: 8px; - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: -ms-flexbox; - display: flex; - border-top: 1px solid #ddd; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child { - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator .tabulator-header .tabulator-col.ui-sortable-helper { - position: absolute; - background-color: #dae1e7 !important; - border: 1px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover { - cursor: pointer; - background-color: #dae1e7; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow { - border-top: 6px solid #666; - border-bottom: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - -webkit-writing-mode: vertical-rl; - -ms-writing-mode: tb-rl; - writing-mode: vertical-rl; - text-orientation: mixed; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow { - right: calc(50% - 6px); -} - -.tabulator .tabulator-header .tabulator-frozen { - display: inline-block; - position: absolute; - z-index: 10; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - min-width: 400%; - background: white !important; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - min-width: 400%; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableHolder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableHolder:focus { - outline: none; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder { - box-sizing: border-box; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - width: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] { - position: absolute; - top: 0; - left: 0; - height: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder span { - display: inline-block; - margin: 0 auto; - padding: 10px; - color: #000; - font-weight: bold; - font-size: 20px; -} - -.tabulator .tabulator-tableHolder .tabulator-table { - position: relative; - display: inline-block; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #f2f2f2 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #ddd; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #ddd; -} - -.tabulator .tabulator-col-resize-handle { - position: absolute; - right: 0; - top: 0; - bottom: 0; - width: 5px; -} - -.tabulator .tabulator-col-resize-handle.prev { - left: 0; - right: auto; -} - -.tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; -} - -.tabulator .tabulator-footer { - padding: 0.78571em 0.78571em; - border-top: 1px solid rgba(34, 36, 38, 0.15); - box-shadow: none; - background: #F9FAFB; - text-align: right; - color: rgba(0, 0, 0, 0.87); - font-style: normal; - font-weight: normal; - text-transform: none; - white-space: nowrap; - -ms-user-select: none; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: calc(100% + 20px); - margin: -0.78571em -0.78571em 0.78571em -0.78571em; - text-align: left; - background: white !important; - border-bottom: 1px solid #ddd; - border-top: 1px solid #ddd; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - font-weight: bold; - background: white !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -0.78571em; - border-bottom: none; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - border: 1px solid #aaa; - border-radius: 3px; - padding: 2px 5px; - background: rgba(255, 255, 255, 0.2); - color: #555; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #d00; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; -} - -.tabulator .tabulator-loader { - position: absolute; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-loader .tabulator-loader-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.positive, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.positive { - box-shadow: 0px 0px 0px #A3C293 inset; - background: #FCFFF5 !important; - color: #21BA45 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.positive:hover, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.positive:hover { - background: #f7ffe6 !important; - color: #13ae38 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.negative, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.negative { - box-shadow: 0px 0px 0px #E0B4B4 inset; - background: #FFF6F6 !important; - color: #DB2828 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.negative:hover, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.negative:hover { - background: #ffe7e7 !important; - color: #d41616 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.error, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.error { - box-shadow: 0px 0px 0px #E0B4B4 inset; - background: #FFF6F6 !important; - color: #DB2828 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.error:hover, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.error:hover { - background: #ffe7e7 !important; - color: #d12323 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.warning, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.warning { - box-shadow: 0px 0px 0px #C9BA9B inset; - background: #FFFAF3 !important; - color: #F2C037 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.warning:hover, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.warning:hover { - background: #fff4e4 !important; - color: #f1bb29 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.active, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.active { - box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset; - background: #E0E0E0 !important; - color: rgba(0, 0, 0, 0.87) !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.active:hover, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.active:hover { - background: #f7ffe6 !important; - color: #13ae38 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.active, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.disabled:hover, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.active { - pointer-events: none; - color: rgba(0, 0, 0, 0.2); -} - -.tabulator.inverted { - background: #333333; - color: rgba(255, 255, 255, 0.9); - border: none; -} - -.tabulator.inverted .tabulator-header { - background-color: rgba(0, 0, 0, 0.15); - border-color: rgba(255, 255, 255, 0.1) !important; - color: rgba(255, 255, 255, 0.9); -} - -.tabulator.inverted .tabulator-header .tabulator-col { - border-color: rgba(255, 255, 255, 0.1) !important; -} - -.tabulator.inverted .tabulator-tableHolder .tabulator-table .tabulator-row { - color: rgba(255, 255, 255, 0.9); - border: none; -} - -.tabulator.inverted .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell { - border-color: rgba(255, 255, 255, 0.1) !important; -} - -.tabulator.inverted .tabulator-footer { - background: #FFFFFF; -} - -.tabulator.striped .tabulator-tableHolder .tabulator-table .tabulator-row:nth-child(even) { - background-color: rgba(0, 0, 0, 0.05) !important; -} - -.tabulator.celled { - border: 1px solid rgba(34, 36, 38, 0.15); -} - -.tabulator.celled .tabulator-header .tabulator-col { - border-right: 1px solid rgba(34, 36, 38, 0.1); -} - -.tabulator.celled .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell { - border-right: 1px solid rgba(34, 36, 38, 0.1); -} - -.tabulator[class*="single line"] .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell { - border-right: none; -} - -.tabulator.red { - border-top: 0.2em solid #DB2828; -} - -.tabulator.inverted.red { - background-color: #DB2828 !important; - color: #FFFFFF !important; -} - -.tabulator.orange { - border-top: 0.2em solid #F2711C; -} - -.tabulator.inverted.orange { - background-color: #F2711C !important; - color: #FFFFFF !important; -} - -.tabulator.yellow { - border-top: 0.2em solid #FBBD08; -} - -.tabulator.inverted.yellow { - background-color: #FBBD08 !important; - color: #FFFFFF !important; -} - -.tabulator.olive { - border-top: 0.2em solid #B5CC18; -} - -.tabulator.inverted.olive { - background-color: #B5CC18 !important; - color: #FFFFFF !important; -} - -.tabulator.green { - border-top: 0.2em solid #21BA45; -} - -.tabulator.inverted.green { - background-color: #21BA45 !important; - color: #FFFFFF !important; -} - -.tabulator.teal { - border-top: 0.2em solid #00B5AD; -} - -.tabulator.inverted.teal { - background-color: #00B5AD !important; - color: #FFFFFF !important; -} - -.tabulator.blue { - border-top: 0.2em solid #2185D0; -} - -.tabulator.inverted.blue { - background-color: #2185D0 !important; - color: #FFFFFF !important; -} - -.tabulator.violet { - border-top: 0.2em solid #6435C9; -} - -.tabulator.inverted.violet { - background-color: #6435C9 !important; - color: #FFFFFF !important; -} - -.tabulator.purple { - border-top: 0.2em solid #A333C8; -} - -.tabulator.inverted.purple { - background-color: #A333C8 !important; - color: #FFFFFF !important; -} - -.tabulator.pink { - border-top: 0.2em solid #E03997; -} - -.tabulator.inverted.pink { - background-color: #E03997 !important; - color: #FFFFFF !important; -} - -.tabulator.brown { - border-top: 0.2em solid #A5673F; -} - -.tabulator.inverted.brown { - background-color: #A5673F !important; - color: #FFFFFF !important; -} - -.tabulator.grey { - border-top: 0.2em solid #767676; -} - -.tabulator.inverted.grey { - background-color: #767676 !important; - color: #FFFFFF !important; -} - -.tabulator.black { - border-top: 0.2em solid #1B1C1D; -} - -.tabulator.inverted.black { - background-color: #1B1C1D !important; - color: #FFFFFF !important; -} - -.tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content { - padding: 1em 1em; -} - -.tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - top: 20px; -} - -.tabulator.padded .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell { - padding: 1em 1em; -} - -.tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content { - padding: 1.5em 1.5em; -} - -.tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - top: 26px; -} - -.tabulator.padded.very .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell { - padding: 1.5em 1.5em; -} - -.tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content { - padding: 0.5em 0.7em; -} - -.tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - top: 12px; -} - -.tabulator.compact .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell { - padding: 0.5em 0.7em; -} - -.tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content { - padding: 0.4em 0.6em; -} - -.tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - top: 10px; -} - -.tabulator.compact.very .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell { - padding: 0.4em 0.6em; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 22px; - border-bottom: 1px solid rgba(34, 36, 38, 0.1); -} - -.tabulator-row.tabulator-selectable:hover { - box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset; - background: #E0E0E0 !important; - color: rgba(0, 0, 0, 0.87) !important; - cursor: pointer; -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -.tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - pointer-events: none !important; - z-index: 15; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -.tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; -} - -.tabulator-row .tabulator-frozen { - display: inline-block; - position: absolute; - background-color: inherit; - z-index: 10; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #ddd; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 14px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 0.78571em 0.78571em; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.tabulator-row .tabulator-cell:last-of-type { - border-right: none; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #DB2828; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #DB2828; -} - -.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #ddd; - border-bottom: 2px solid #ddd; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-pack: center; - justify-content: center; - -ms-flex-align: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #fff; - font-weight: bold; - font-size: 1.1em; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #ddd; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #fafafa; - font-weight: bold; - min-width: 100%; -} - -.tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow { - margin-left: 20px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow { - margin-left: 40px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow { - margin-left: 60px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow { - margin-left: 80px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow { - margin-left: 100px; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #666; -} - -.tabulator-edit-select-list { - position: absolute; - display: inline-block; - box-sizing: border-box; - max-height: 200px; - background: #FFFFFF; - border: 1px solid #ddd; - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item { - padding: 4px; - color: #333; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: #FFFFFF; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - cursor: pointer; - color: #FFFFFF; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-group { - border-bottom: 1px solid #ddd; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/semantic-ui/tabulator_semantic-ui.min.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/semantic-ui/tabulator_semantic-ui.min.css deleted file mode 100644 index 13e8572ba7..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/semantic-ui/tabulator_semantic-ui.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator{position:relative;background-color:#fff;overflow:hidden;font-size:14px;text-align:left;width:100%;margin:1em 0;border:1px solid rgba(34,36,38,.15);box-shadow:none;border-radius:.28571/pxrem;color:rgba(0,0,0,.87);transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator.tabulator-block-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{width:100%;border-bottom:1px solid rgba(34,36,38,.1);box-shadow:none;color:rgba(0,0,0,.87);font-style:none;font-weight:700;text-transform:none;white-space:nowrap;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header,.tabulator .tabulator-header .tabulator-col{position:relative;box-sizing:border-box;background-color:#f9fafb;overflow:hidden}.tabulator .tabulator-header .tabulator-col{display:inline-block;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #999;background:#dae1e7;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:.92857em .78571em}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:18px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #ddd;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child{margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col.ui-sortable-helper{position:absolute;background-color:#dae1e7!important;border:1px solid #ddd}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#dae1e7}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #666;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-webkit-writing-mode:vertical-rl;-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:1}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:400%;background:#fff!important;border-top:1px solid #ddd;border-bottom:1px solid #ddd;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:400%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{position:absolute;top:0;left:0;height:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#000;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#f2f2f2!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #ddd}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #ddd}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-footer{padding:.78571em;border-top:1px solid rgba(34,36,38,.15);box-shadow:none;background:#f9fafb;text-align:right;color:rgba(0,0,0,.87);font-style:normal;font-weight:400;text-transform:none;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-.78571em -.78571em .78571em;text-align:left;background:#fff!important;border-bottom:1px solid #ddd;border-top:1px solid #ddd;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{font-weight:700;background:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-.78571em;border-bottom:none}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;border:1px solid #aaa;border-radius:3px;padding:2px 5px;background:hsla(0,0%,100%,.2);color:#555;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:3;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.positive,.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.positive{box-shadow:inset 0 0 0 #a3c293;background:#fcfff5!important;color:#21ba45!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.positive:hover,.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.positive:hover{background:#f7ffe6!important;color:#13ae38!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.negative,.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.negative{box-shadow:inset 0 0 0 #e0b4b4;background:#fff6f6!important;color:#db2828!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.negative:hover,.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.negative:hover{background:#ffe7e7!important;color:#d41616!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.error,.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.error{box-shadow:inset 0 0 0 #e0b4b4;background:#fff6f6!important;color:#db2828!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.error:hover,.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.error:hover{background:#ffe7e7!important;color:#d12323!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.warning,.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.warning{box-shadow:inset 0 0 0 #c9ba9b;background:#fffaf3!important;color:#f2c037!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.warning:hover,.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.warning:hover{background:#fff4e4!important;color:#f1bb29!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.active,.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.active{box-shadow:inset 0 0 0 rgba(0,0,0,.87);background:#e0e0e0!important;color:rgba(0,0,0,.87)!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.active:hover,.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.active:hover{background:#f7ffe6!important;color:#13ae38!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.active,.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.disabled:hover,.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.active{pointer-events:none;color:rgba(0,0,0,.2)}.tabulator.inverted{background:#333;color:hsla(0,0%,100%,.9);border:none}.tabulator.inverted .tabulator-header{background-color:rgba(0,0,0,.15);color:hsla(0,0%,100%,.9)}.tabulator.inverted .tabulator-header,.tabulator.inverted .tabulator-header .tabulator-col{border-color:hsla(0,0%,100%,.1)!important}.tabulator.inverted .tabulator-tableHolder .tabulator-table .tabulator-row{color:hsla(0,0%,100%,.9);border:none}.tabulator.inverted .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell{border-color:hsla(0,0%,100%,.1)!important}.tabulator.inverted .tabulator-footer{background:#fff}.tabulator.striped .tabulator-tableHolder .tabulator-table .tabulator-row:nth-child(2n){background-color:rgba(0,0,0,.05)!important}.tabulator.celled{border:1px solid rgba(34,36,38,.15)}.tabulator.celled .tabulator-header .tabulator-col,.tabulator.celled .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell{border-right:1px solid rgba(34,36,38,.1)}.tabulator[class*="single line"] .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell{border-right:none}.tabulator.red{border-top:.2em solid #db2828}.tabulator.inverted.red{background-color:#db2828!important;color:#fff!important}.tabulator.orange{border-top:.2em solid #f2711c}.tabulator.inverted.orange{background-color:#f2711c!important;color:#fff!important}.tabulator.yellow{border-top:.2em solid #fbbd08}.tabulator.inverted.yellow{background-color:#fbbd08!important;color:#fff!important}.tabulator.olive{border-top:.2em solid #b5cc18}.tabulator.inverted.olive{background-color:#b5cc18!important;color:#fff!important}.tabulator.green{border-top:.2em solid #21ba45}.tabulator.inverted.green{background-color:#21ba45!important;color:#fff!important}.tabulator.teal{border-top:.2em solid #00b5ad}.tabulator.inverted.teal{background-color:#00b5ad!important;color:#fff!important}.tabulator.blue{border-top:.2em solid #2185d0}.tabulator.inverted.blue{background-color:#2185d0!important;color:#fff!important}.tabulator.violet{border-top:.2em solid #6435c9}.tabulator.inverted.violet{background-color:#6435c9!important;color:#fff!important}.tabulator.purple{border-top:.2em solid #a333c8}.tabulator.inverted.purple{background-color:#a333c8!important;color:#fff!important}.tabulator.pink{border-top:.2em solid #e03997}.tabulator.inverted.pink{background-color:#e03997!important;color:#fff!important}.tabulator.brown{border-top:.2em solid #a5673f}.tabulator.inverted.brown{background-color:#a5673f!important;color:#fff!important}.tabulator.grey{border-top:.2em solid #767676}.tabulator.inverted.grey{background-color:#767676!important;color:#fff!important}.tabulator.black{border-top:.2em solid #1b1c1d}.tabulator.inverted.black{background-color:#1b1c1d!important;color:#fff!important}.tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content{padding:1em}.tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{top:20px}.tabulator.padded .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell{padding:1em}.tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content{padding:1.5em}.tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{top:26px}.tabulator.padded.very .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell{padding:1.5em}.tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content{padding:.5em .7em}.tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{top:12px}.tabulator.compact .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell{padding:.5em .7em}.tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content{padding:.4em .6em}.tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{top:10px}.tabulator.compact.very .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell{padding:.4em .6em}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;border-bottom:1px solid rgba(34,36,38,.1)}.tabulator-row.tabulator-selectable:hover{box-shadow:inset 0 0 0 rgba(0,0,0,.87);background:#e0e0e0!important;color:rgba(0,0,0,.87)!important;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #ddd;border-bottom:1px solid #ddd;pointer-events:none!important;z-index:2}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:1}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:.78571em;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #db2828}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#db2828}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #ddd;border-bottom:2px solid #ddd}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #ddd;border-top:1px solid #999;padding:5px;padding-left:10px;background:#fafafa;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow{margin-left:20px}.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow{margin-left:40px}.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow{margin-left:60px}.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow{margin-left:80px}.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow{margin-left:100px}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#666}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #ddd;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:4}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #ddd;padding:4px;padding-top:6px;color:#333;font-weight:700} -/*# sourceMappingURL=tabulator_semantic-ui.min.css.map */ diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/semantic-ui/tabulator_semantic-ui.min.css.map b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/semantic-ui/tabulator_semantic-ui.min.css.map deleted file mode 100644 index 9c420c95be..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/semantic-ui/tabulator_semantic-ui.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_semantic-ui.min.css"],"names":[],"mappings":"AAiOA,WACE,kBAAmB,AACnB,sBAA0B,AAC1B,gBAAiB,AACjB,eAAgB,AAChB,gBAAiB,AACjB,WAAY,AACZ,aAAgB,AAChB,oCAAyC,AACzC,gBAAiB,AACjB,2BAA6B,AAC7B,sBAA2B,AAE3B,uBAAyB,CAc1B,AAED,iFACE,cAAgB,CACjB,AAED,kCACE,yBAA0B,AACvB,sBAAuB,AACtB,qBAAsB,AAClB,gBAAkB,CAC3B,AAED,6BAGE,WAAY,AACZ,0CAA+C,AAE/C,gBAAiB,AACjB,sBAA2B,AAC3B,gBAAiB,AACjB,gBAAkB,AAClB,oBAAqB,AACrB,mBAAoB,AAEpB,sBAAuB,AACvB,wBAAyB,AACzB,yBAA0B,AAC1B,mBAAqB,CACtB,AAED,yEAlBE,kBAAmB,AACnB,sBAAuB,AAGvB,yBAA0B,AAO1B,eAAiB,CAOnB,AAQC,4CAPC,qBAAsB,AAItB,gBAAiB,AACjB,qBAAuB,CAExB,AAED,6DACE,kBAAmB,AACnB,sBAAuB,AACvB,mBAAoB,AACpB,mBAAqB,CACtB,AAED,mEACE,sBAAuB,AACvB,kBAAmB,AACnB,yBAA6B,CAC9B,AAED,wFACE,sBAAuB,AACvB,WAAY,AACZ,mBAAoB,AACpB,gBAAiB,AACjB,uBAAwB,AACxB,qBAAuB,CACxB,AAED,gHACE,sBAAuB,AACvB,WAAY,AACZ,sBAAuB,AACvB,YAAa,AACb,eAAiB,CAClB,AAED,oFACE,qBAAsB,AACtB,kBAAmB,AACnB,SAAU,AACV,UAAW,AACX,QAAS,AACT,SAAU,AACV,kCAAmC,AACnC,mCAAoC,AACpC,4BAA8B,CAC/B,AAED,0FACE,kBAAmB,AACnB,oBAAqB,AACrB,aAAc,AACd,0BAA2B,AAC3B,eAAiB,CAClB,AAED,oHACE,iBAAmB,CACpB,AAED,0FACE,YAAc,CACf,AAED,+DACE,kBAAmB,AACnB,mCAAqC,AACrC,qBAAuB,CACxB,AAED,qEACE,kBAAmB,AACnB,sBAAuB,AACvB,eAAgB,AAChB,WAAY,AACZ,iBAAmB,CACpB,AAED,8EACE,qBAAwB,CACzB,AAED,yEACE,cAAgB,CACjB,AAED,sFACE,QAAS,AACT,QAAU,CACX,AAED,oFACE,kBAAoB,CACrB,AAED,qEACE,eAAgB,AAChB,wBAA0B,CAC3B,AAED,uHACE,gBAAiB,AACjB,4BAA8B,CAC/B,AAED,sHACE,gBAAiB,AACjB,4BAA8B,CAC/B,AAED,uHACE,0BAA2B,AAC3B,kBAAoB,CACrB,AAED,+GACE,iCAAkC,AAC9B,uBAAwB,AACpB,yBAA0B,AAClC,uBAAwB,AACxB,oBAAqB,AACrB,aAAc,AACd,sBAAuB,AACnB,mBAAoB,AACxB,qBAAsB,AAClB,sBAAwB,CAC7B,AAED,oHAEM,wBAA0B,CAC/B,AAED,2GACE,gBAAiB,AACjB,gBAAkB,CACnB,AAED,uIACE,gBAAiB,AACjB,mBAAqB,CACtB,AAED,uGACE,qBAAuB,CACxB,AAED,+CACE,qBAAsB,AACtB,kBAAmB,AACnB,SAAY,CACb,AAED,qEACE,2BAA6B,CAC9B,AAED,sEACE,0BAA4B,CAC7B,AAED,qDACE,sBAAuB,AACvB,eAAgB,AAChB,0BAA6B,AAC7B,0BAA2B,AAC3B,6BAA8B,AAC9B,eAAiB,CAClB,AAED,oEACE,yBAA6B,CAC9B,AAED,iGACE,YAAc,CACf,AAED,2DACE,cAAgB,CACjB,AAED,iEACE,YAAc,CACf,AAED,kCACE,kBAAmB,AACnB,WAAY,AACZ,mBAAoB,AACpB,cAAe,AACf,gCAAkC,CACnC,AAED,wCACE,YAAc,CACf,AAED,yDACE,sBAAuB,AACvB,oBAAqB,AACrB,aAAc,AACd,sBAAuB,AACnB,mBAAoB,AACxB,UAAY,CACb,AAED,wFACE,kBAAmB,AACnB,MAAO,AACP,OAAQ,AACR,WAAa,CACd,AAED,8DACE,qBAAsB,AACtB,cAAe,AACf,aAAc,AACd,WAAY,AACZ,gBAAkB,AAClB,cAAgB,CACjB,AAED,mDACE,kBAAmB,AACnB,qBAAsB,AACtB,mBAAoB,AACpB,iBAAkB,AAClB,UAAY,CACb,AAED,kFACE,gBAAkB,AAClB,4BAA+B,CAChC,AAED,sGACE,4BAA8B,CAC/B,AAED,yGACE,yBAA2B,CAC5B,AAED,wCACE,kBAAmB,AACnB,QAAS,AACT,MAAO,AACP,SAAU,AACV,SAAW,CACZ,AAED,6CACE,OAAQ,AACR,UAAY,CACb,AAED,8CACE,gBAAkB,CACnB,AAED,6BACE,iBAA6B,AAC7B,wCAA6C,AAC7C,gBAAiB,AACjB,mBAAoB,AACpB,iBAAkB,AAClB,sBAA2B,AAC3B,kBAAmB,AACnB,gBAAoB,AACpB,oBAAqB,AACrB,mBAAoB,AACpB,qBAAsB,AAClB,iBAAkB,AACtB,sBAAuB,AACvB,wBAAyB,AACzB,yBAA0B,AAC1B,mBAAqB,CACtB,AAED,qDACE,sBAAuB,AACvB,wBAAyB,AACzB,oCAAmD,AACnD,gBAAiB,AACjB,0BAA6B,AAC7B,6BAA8B,AAC9B,0BAA2B,AAC3B,eAAiB,CAClB,AAED,oEACE,gBAAkB,AAClB,yBAA6B,CAC9B,AAED,iGACE,YAAc,CACf,AAED,gEACE,wBAA0B,AAC1B,kBAAoB,CACrB,AAED,8CACE,YAAc,CACf,AAED,6CACE,qBAAsB,AACtB,aAAc,AACd,sBAAuB,AACvB,kBAAmB,AACnB,gBAAiB,AACjB,8BAAqC,AACrC,WAAY,AACZ,oBAAqB,AACrB,oBAAqB,AACrB,iBAAmB,CACpB,AAED,oDACE,UAAY,CACb,AAED,sDACE,UAAY,CACb,AAED,kEACE,eAAgB,AAChB,0BAA+B,AAC/B,UAAY,CACb,AAED,6BACE,kBAAmB,AACnB,oBAAqB,AACrB,aAAc,AACd,sBAAuB,AACnB,mBAAoB,AACxB,MAAO,AACP,OAAQ,AACR,UAAa,AACb,YAAa,AACb,WAAY,AACZ,0BAA+B,AAC/B,iBAAmB,CACpB,AAED,mDACE,qBAAsB,AACtB,cAAe,AACf,kBAAmB,AACnB,mBAAoB,AACpB,gBAAiB,AACjB,gBAAkB,AAClB,cAAgB,CACjB,AAED,qEACE,sBAAuB,AACvB,UAAY,CACb,AAED,mEACE,sBAAuB,AACvB,aAAe,CAChB,AAED,sKACE,+BAAsC,AACtC,6BAA+B,AAC/B,uBAA0B,CAC3B,AAED,kLACE,6BAA+B,AAC/B,uBAA0B,CAC3B,AAED,sKACE,+BAAsC,AACtC,6BAA+B,AAC/B,uBAA0B,CAC3B,AAED,kLACE,6BAA+B,AAC/B,uBAA0B,CAC3B,AAED,gKACE,+BAAsC,AACtC,6BAA+B,AAC/B,uBAA0B,CAC3B,AAED,4KACE,6BAA+B,AAC/B,uBAA0B,CAC3B,AAED,oKACE,+BAAsC,AACtC,6BAA+B,AAC/B,uBAA0B,CAC3B,AAED,gLACE,6BAA+B,AAC/B,uBAA0B,CAC3B,AAED,kKACE,uCAAkD,AAClD,6BAA+B,AAC/B,+BAAsC,CACvC,AAED,8KACE,6BAA+B,AAC/B,uBAA0B,CAC3B,AAED,mPACE,oBAAqB,AACrB,oBAA0B,CAC3B,AAED,oBACE,gBAAoB,AACpB,yBAAgC,AAChC,WAAa,CACd,AAED,sCACE,iCAAsC,AAEtC,wBAAgC,CACjC,AAED,2FAJE,yCAAkD,CAMnD,AAED,2EACE,yBAAgC,AAChC,WAAa,CACd,AAED,2FACE,yCAAkD,CACnD,AAED,sCACE,eAAoB,CACrB,AAED,wFACE,0CAAiD,CAClD,AAED,kBACE,mCAAyC,CAC1C,AAMD,4IACE,wCAA8C,CAC/C,AAED,wGACE,iBAAmB,CACpB,AAED,eACE,6BAAgC,CACjC,AAED,wBACE,mCAAqC,AACrC,oBAA0B,CAC3B,AAED,kBACE,6BAAgC,CACjC,AAED,2BACE,mCAAqC,AACrC,oBAA0B,CAC3B,AAED,kBACE,6BAAgC,CACjC,AAED,2BACE,mCAAqC,AACrC,oBAA0B,CAC3B,AAED,iBACE,6BAAgC,CACjC,AAED,0BACE,mCAAqC,AACrC,oBAA0B,CAC3B,AAED,iBACE,6BAAgC,CACjC,AAED,0BACE,mCAAqC,AACrC,oBAA0B,CAC3B,AAED,gBACE,6BAAgC,CACjC,AAED,yBACE,mCAAqC,AACrC,oBAA0B,CAC3B,AAED,gBACE,6BAAgC,CACjC,AAED,yBACE,mCAAqC,AACrC,oBAA0B,CAC3B,AAED,kBACE,6BAAgC,CACjC,AAED,2BACE,mCAAqC,AACrC,oBAA0B,CAC3B,AAED,kBACE,6BAAgC,CACjC,AAED,2BACE,mCAAqC,AACrC,oBAA0B,CAC3B,AAED,gBACE,6BAAgC,CACjC,AAED,yBACE,mCAAqC,AACrC,oBAA0B,CAC3B,AAED,iBACE,6BAAgC,CACjC,AAED,0BACE,mCAAqC,AACrC,oBAA0B,CAC3B,AAED,gBACE,6BAAgC,CACjC,AAED,yBACE,mCAAqC,AACrC,oBAA0B,CAC3B,AAED,iBACE,6BAAgC,CACjC,AAED,0BACE,mCAAqC,AACrC,oBAA0B,CAC3B,AAED,0EACE,WAAiB,CAClB,AAED,2FACE,QAAU,CACX,AAED,yFACE,WAAiB,CAClB,AAED,+EACE,aAAqB,CACtB,AAED,gGACE,QAAU,CACX,AAED,8FACE,aAAqB,CACtB,AAED,2EACE,iBAAqB,CACtB,AAED,4FACE,QAAU,CACX,AAED,0FACE,iBAAqB,CACtB,AAED,gFACE,iBAAqB,CACtB,AAED,iGACE,QAAU,CACX,AAED,+FACE,iBAAqB,CACtB,AAED,eACE,kBAAmB,AACnB,sBAAuB,AACvB,gBAAiB,AACjB,yCAA+C,CAChD,AAED,0CACE,uCAAkD,AAClD,6BAA+B,AAC/B,gCAAsC,AACtC,cAAgB,CACjB,AAED,kCACE,wBAA0B,CAC3B,AAED,wCACE,yBAA0B,AAC1B,cAAgB,CACjB,AAED,gCACE,kBAAmB,AACnB,0BAA2B,AAC3B,6BAA8B,AAC9B,8BAAgC,AAChC,SAAY,CACb,AAED,4CACE,kBAAmB,AACnB,QAAS,AACT,SAAU,AACV,OAAQ,AACR,UAAY,CACb,AAED,iDACE,MAAO,AACP,WAAa,CACd,AAED,kDACE,gBAAkB,CACnB,AAED,iCACE,qBAAsB,AACtB,kBAAmB,AACnB,yBAA0B,AAC1B,SAAY,CACb,AAED,uDACE,2BAA6B,CAC9B,AAED,wDACE,0BAA4B,CAC7B,AAED,8CACE,sBAAuB,AACvB,YAAa,AACb,0BAA2B,AAC3B,4BAA8B,CAC/B,AAED,oDACE,YAAc,CACf,AAED,oDACE,cAAgB,CACjB,AAED,0DACE,iBAAmB,CACpB,AAED,wEACE,kBAAoB,CACrB,AAED,+BACE,qBAAsB,AACtB,kBAAmB,AACnB,sBAAuB,AACvB,iBAA6B,AAC7B,sBAAuB,AACvB,mBAAoB,AACpB,gBAAiB,AACjB,sBAAwB,CACzB,AAED,4CACE,iBAAmB,CACpB,AAED,iDACE,yBAA0B,AAC1B,SAAW,CACZ,AAED,+GACE,WAAY,AACZ,sBAAwB,CACzB,AAED,yDACE,wBAA0B,CAC3B,AAED,+HACE,WAAY,AACZ,uBAAwB,AACxB,aAAe,CAChB,AAED,6EACE,YAAc,CACf,AAED,oDACE,2BAA4B,AAC5B,oBAAqB,AACrB,sBAAuB,AACnB,mBAAoB,AACxB,sBAAuB,AACvB,wBAAyB,AACzB,yBAA0B,AAC1B,mBAAqB,CACtB,AAED,8EACE,SAAW,CACZ,AAED,wGACE,WAAY,AACZ,WAAY,AACZ,eAAgB,AAChB,eAAiB,CAClB,AAED,2DACE,qBAAsB,AACtB,sBAAuB,AACvB,WAAY,AACZ,UAAW,AACX,gBAAiB,AACjB,iBAAkB,AAClB,8BAA+B,AAC/B,2BAA4B,AAC5B,4BAA8B,CAC/B,AAED,4DACE,2BAA4B,AAC5B,oBAAqB,AACrB,qBAAsB,AAClB,uBAAwB,AAC5B,sBAAuB,AACnB,mBAAoB,AACxB,sBAAuB,AACvB,YAAa,AACb,WAAY,AACZ,iBAAkB,AAClB,sBAAuB,AACvB,kBAAmB,AACnB,0BAA+B,AAC/B,eAAiB,CAClB,AAED,kEACE,eAAgB,AAChB,yBAA+B,CAChC,AAED,kGACE,qBAAsB,AACtB,kBAAmB,AACnB,WAAY,AACZ,UAAW,AACX,sBAAwB,CACzB,AAED,wGACE,kBAAmB,AACnB,WAAY,AACZ,UAAW,AACX,QAAS,AACT,WAAY,AACZ,UAAW,AACX,eAAiB,CAClB,AAED,gGACE,qBAAsB,AACtB,kBAAmB,AACnB,WAAY,AACZ,UAAW,AACX,eAAiB,CAClB,AAED,sGACE,kBAAmB,AACnB,WAAY,AACZ,UAAW,AACX,QAAS,AACT,WAAY,AACZ,UAAW,AACX,eAAiB,CAClB,AAED,qEACE,2BAA4B,AAC5B,oBAAqB,AACrB,sBAAuB,AACnB,mBAAoB,AACxB,qBAAsB,AAClB,uBAAwB,AAC5B,sBAAuB,AACvB,wBAAyB,AACzB,yBAA0B,AAC1B,oBAAqB,AACrB,YAAa,AACb,WAAY,AACZ,mBAAoB,AACpB,gBAAiB,AACjB,WAAY,AACZ,gBAAkB,AAClB,eAAiB,CAClB,AAED,2EACE,UAAY,CACb,AAED,sHACE,eAAiB,CAClB,AAMD,sOACE,YAAc,CACf,AAED,+BACE,sBAAuB,AACvB,6BAA8B,AAC9B,4BAA6B,AAC7B,0BAA2B,AAC3B,YAAa,AACb,kBAAmB,AACnB,mBAAoB,AACpB,gBAAkB,AAClB,cAAgB,CACjB,AAED,qCACE,eAAgB,AAChB,+BAAqC,CACtC,AAED,wEACE,kBAAmB,AACnB,kCAAmC,AACnC,mCAAoC,AACpC,0BAA2B,AAC3B,eAAiB,CAClB,AAED,wEACE,gBAAkB,CACnB,AAED,wEACE,gBAAkB,CACnB,AAED,wEACE,gBAAkB,CACnB,AAED,wEACE,gBAAkB,CACnB,AAED,wEACE,iBAAmB,CACpB,AAED,gDACE,qBAAsB,AACtB,QAAS,AACT,SAAU,AACV,kBAAmB,AACnB,iCAAkC,AAClC,oCAAqC,AACrC,eAAgB,AAChB,2BAA4B,AAC5B,qBAAuB,CACxB,AAED,oCACE,iBAAkB,AAClB,UAAY,CACb,AAED,4BACE,kBAAmB,AACnB,qBAAsB,AACtB,sBAAuB,AACvB,iBAAkB,AAClB,gBAAoB,AACpB,sBAAuB,AACvB,eAAgB,AAChB,gBAAiB,AACjB,iCAAkC,AAClC,SAAe,CAChB,AAED,6DACE,YAAa,AACb,UAAY,CACb,AAED,oEACE,WAAe,AACf,kBAAoB,CACrB,AAED,mEACE,eAAgB,AAChB,WAAe,AACf,kBAAoB,CACrB,AAED,8DACE,6BAA8B,AAC9B,YAAa,AACb,gBAAiB,AACjB,WAAY,AACZ,eAAkB,CACnB","file":"tabulator_semantic-ui.min.css","sourcesContent":["/* Tabulator v4.1.2 (c) Oliver Folkerd */\n/*******************************\r\n Site Settings\r\n*******************************/\n/*-------------------\r\n Fonts\r\n--------------------*/\n/*-------------------\r\n Base Sizes\r\n--------------------*/\n/* This is the single variable that controls them all */\n/* The size of page text */\n/*-------------------\r\n Exact Pixel Values\r\n--------------------*/\n/*\r\n These are used to specify exact pixel values in em\r\n for things like borders that remain constantly\r\n sized as emSize adjusts\r\n\r\n Since there are many more sizes than names for sizes,\r\n these are named by their original pixel values.\r\n\r\n*/\n/*-------------------\r\n Border Radius\r\n--------------------*/\n/* See Power-user section below\r\n for explanation of $px variables\r\n*/\n/*-------------------\r\n Site Colors\r\n--------------------*/\n/*--- Colors ---*/\n/*--- Light Colors ---*/\n/*--- Neutrals ---*/\n/*--- Colored Backgrounds ---*/\n/*--- Colored Text ---*/\n/*--- Colored Headers ---*/\n/*--- Colored Border ---*/\n/*-------------------\r\n Alpha Colors\r\n--------------------*/\n/*-------------------\r\n Brand Colors\r\n--------------------*/\n/*--------------\r\n Page Heading\r\n---------------*/\n/*-------------------\r\n Page\r\n--------------------*/\n/*--------------\r\n Form Input\r\n---------------*/\n/* This adjusts the default form input across all elements */\n/* Input Text Color */\n/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */\n/*-------------------\r\n Focused Input\r\n--------------------*/\n/* Used on inputs, textarea etc */\n/* Used on dropdowns, other larger blocks */\n/*-------------------\r\n Sizes\r\n--------------------*/\n/*\r\n Sizes are all expressed in terms of 14px/em (default em)\r\n This ensures these \"ratios\" remain constant despite changes in EM\r\n*/\n/*-------------------\r\n Paragraph\r\n--------------------*/\n/*-------------------\r\n Links\r\n--------------------*/\n/*-------------------\r\n Highlighted Text\r\n--------------------*/\n/*-------------------\r\n Em Sizes\r\n--------------------*/\n/*\r\n This rounds $size values to the closest pixel then expresses that value in (r)em.\r\n This ensures all size values round to exact pixels\r\n*/\n/* em */\n/* rem */\n/*-------------------\r\n Loader\r\n--------------------*/\n/*-------------------\r\n Grid\r\n--------------------*/\n/*-------------------\r\n Transitions\r\n--------------------*/\n/*-------------------\r\n Breakpoints\r\n--------------------*/\n/* Columns */\n/*******************************\r\n Power-User\r\n*******************************/\n/*-------------------\r\n Emotive Colors\r\n--------------------*/\n/* Positive */\n/* Negative */\n/* Info */\n/* Warning */\n/*-------------------\r\n Paths\r\n--------------------*/\n/* For source only. Modified in gulp for dist */\n/*-------------------\r\n Icons\r\n--------------------*/\n/* Maximum Glyph Width of Icon */\n/*-------------------\r\n Neutral Text\r\n--------------------*/\n/*-------------------\r\n Brand Colors\r\n--------------------*/\n/*-------------------\r\n Borders\r\n--------------------*/\n/*-------------------\r\n Accents\r\n--------------------*/\n/* Differentiating Neutrals */\n/* Differentiating Layers */\n/*-------------------\r\n Derived Values\r\n--------------------*/\n/* Loaders Position Offset */\n/* Rendered Scrollbar Width */\n/* Maximum Single Character Glyph Width, aka Capital \"W\" */\n/* Used to match floats with text */\n/* Header Spacing */\n/* Minimum Mobile Width */\n/* Positive / Negative Dupes */\n/* Responsive */\n/*******************************\r\n States\r\n*******************************/\n/*-------------------\r\n Disabled\r\n--------------------*/\n/*-------------------\r\n Hover\r\n--------------------*/\n/*--- Shadows ---*/\n/*--- Colors ---*/\n/*--- Emotive ---*/\n/*--- Brand ---*/\n/*--- Dark Tones ---*/\n/*--- Light Tones ---*/\n/*-------------------\r\n Focus\r\n--------------------*/\n/*--- Colors ---*/\n/*--- Emotive ---*/\n/*--- Brand ---*/\n/*--- Dark Tones ---*/\n/*--- Light Tones ---*/\n/*-------------------\r\n Down (:active)\r\n--------------------*/\n/*--- Colors ---*/\n/*--- Emotive ---*/\n/*--- Brand ---*/\n/*--- Dark Tones ---*/\n/*--- Light Tones ---*/\n/*-------------------\r\n Active\r\n--------------------*/\n/*--- Colors ---*/\n/*--- Emotive ---*/\n/*--- Brand ---*/\n/*--- Dark Tones ---*/\n/*--- Light Tones ---*/\n/*******************************\r\n Table\r\n*******************************/\n/*-------------------\r\n Element\r\n--------------------*/\n/*--------------\r\n Parts\r\n---------------*/\n/* Table Row */\n/* Table Cell */\n/* Table Header */\n/* Table Footer */\n/* Responsive Size */\n/*-------------------\r\n Types\r\n--------------------*/\n/* Definition */\n/*--------------\r\n Couplings\r\n---------------*/\n/*--------------\r\n States\r\n---------------*/\n/* Positive */\n/* Negative */\n/* Error */\n/* Warning */\n/* Active */\n/*--------------\r\n Types\r\n---------------*/\n/* Attached */\n/* Striped */\n/* Selectable */\n/* Sortable */\n/* Colors */\n/* Inverted */\n/* Basic */\n/* Padded */\n/* Compact */\n/* Sizes */\n.tabulator {\n position: relative;\n background-color: #FFFFFF;\n overflow: hidden;\n font-size: 14px;\n text-align: left;\n width: 100%;\n margin: 1em 0em;\n border: 1px solid rgba(34, 36, 38, 0.15);\n box-shadow: none;\n border-radius: 0.28571/pxrem;\n color: rgba(0, 0, 0, 0.87);\n -ms-transform: translatez(0);\n transform: translatez(0);\n /* Red */\n /* Orange */\n /* Yellow */\n /* Olive */\n /* Green */\n /* Teal */\n /* Blue */\n /* Violet */\n /* Purple */\n /* Pink */\n /* Brown */\n /* Grey */\n /* Black */\n}\n\n.tabulator[tabulator-layout=\"fitDataFill\"] .tabulator-tableHolder .tabulator-table {\n min-width: 100%;\n}\n\n.tabulator.tabulator-block-select {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n\n.tabulator .tabulator-header {\n position: relative;\n box-sizing: border-box;\n width: 100%;\n border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n background-color: #F9FAFB;\n box-shadow: none;\n color: rgba(0, 0, 0, 0.87);\n font-style: none;\n font-weight: bold;\n text-transform: none;\n white-space: nowrap;\n overflow: hidden;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n}\n\n.tabulator .tabulator-header .tabulator-col {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n background-color: #F9FAFB;\n text-align: left;\n vertical-align: bottom;\n overflow: hidden;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-moving {\n position: absolute;\n border: 1px solid #999;\n background: #dae1e7;\n pointer-events: none;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-col-content {\n box-sizing: border-box;\n position: relative;\n padding: 0.92857em 0.78571em;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title {\n box-sizing: border-box;\n width: 100%;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n vertical-align: bottom;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor {\n box-sizing: border-box;\n width: 100%;\n border: 1px solid #999;\n padding: 1px;\n background: #fff;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n display: inline-block;\n position: absolute;\n top: 18px;\n right: 8px;\n width: 0;\n height: 0;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-bottom: 6px solid #bbb;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols {\n position: relative;\n display: -ms-flexbox;\n display: flex;\n border-top: 1px solid #ddd;\n overflow: hidden;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child {\n margin-right: -1px;\n}\n\n.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev {\n display: none;\n}\n\n.tabulator .tabulator-header .tabulator-col.ui-sortable-helper {\n position: absolute;\n background-color: #dae1e7 !important;\n border: 1px solid #ddd;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-header-filter {\n position: relative;\n box-sizing: border-box;\n margin-top: 2px;\n width: 100%;\n text-align: center;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea {\n height: auto !important;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg {\n margin-top: 3px;\n}\n\n.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear {\n width: 0;\n height: 0;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title {\n padding-right: 25px;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover {\n cursor: pointer;\n background-color: #dae1e7;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"none\"] .tabulator-col-content .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #bbb;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"asc\"] .tabulator-col-content .tabulator-arrow {\n border-top: none;\n border-bottom: 6px solid #666;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=\"desc\"] .tabulator-col-content .tabulator-arrow {\n border-top: 6px solid #666;\n border-bottom: none;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title {\n -webkit-writing-mode: vertical-rl;\n -ms-writing-mode: tb-rl;\n writing-mode: vertical-rl;\n text-orientation: mixed;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title {\n -ms-transform: rotate(180deg);\n transform: rotate(180deg);\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title {\n padding-right: 0;\n padding-top: 20px;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title {\n padding-right: 0;\n padding-bottom: 20px;\n}\n\n.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow {\n right: calc(50% - 6px);\n}\n\n.tabulator .tabulator-header .tabulator-frozen {\n display: inline-block;\n position: absolute;\n z-index: 10;\n}\n\n.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd;\n}\n\n.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd;\n}\n\n.tabulator .tabulator-header .tabulator-calcs-holder {\n box-sizing: border-box;\n min-width: 400%;\n background: white !important;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n overflow: hidden;\n}\n\n.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row {\n background: white !important;\n}\n\n.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none;\n}\n\n.tabulator .tabulator-header .tabulator-frozen-rows-holder {\n min-width: 400%;\n}\n\n.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty {\n display: none;\n}\n\n.tabulator .tabulator-tableHolder {\n position: relative;\n width: 100%;\n white-space: nowrap;\n overflow: auto;\n -webkit-overflow-scrolling: touch;\n}\n\n.tabulator .tabulator-tableHolder:focus {\n outline: none;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-placeholder {\n box-sizing: border-box;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n width: 100%;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=\"virtual\"] {\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-placeholder span {\n display: inline-block;\n margin: 0 auto;\n padding: 10px;\n color: #000;\n font-weight: bold;\n font-size: 20px;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table {\n position: relative;\n display: inline-block;\n white-space: nowrap;\n overflow: visible;\n color: #333;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs {\n font-weight: bold;\n background: #f2f2f2 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top {\n border-bottom: 2px solid #ddd;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom {\n border-top: 2px solid #ddd;\n}\n\n.tabulator .tabulator-col-resize-handle {\n position: absolute;\n right: 0;\n top: 0;\n bottom: 0;\n width: 5px;\n}\n\n.tabulator .tabulator-col-resize-handle.prev {\n left: 0;\n right: auto;\n}\n\n.tabulator .tabulator-col-resize-handle:hover {\n cursor: ew-resize;\n}\n\n.tabulator .tabulator-footer {\n padding: 0.78571em 0.78571em;\n border-top: 1px solid rgba(34, 36, 38, 0.15);\n box-shadow: none;\n background: #F9FAFB;\n text-align: right;\n color: rgba(0, 0, 0, 0.87);\n font-style: normal;\n font-weight: normal;\n text-transform: none;\n white-space: nowrap;\n -ms-user-select: none;\n user-select: none;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n}\n\n.tabulator .tabulator-footer .tabulator-calcs-holder {\n box-sizing: border-box;\n width: calc(100% + 20px);\n margin: -0.78571em -0.78571em 0.78571em -0.78571em;\n text-align: left;\n background: white !important;\n border-bottom: 1px solid #ddd;\n border-top: 1px solid #ddd;\n overflow: hidden;\n}\n\n.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row {\n font-weight: bold;\n background: white !important;\n}\n\n.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle {\n display: none;\n}\n\n.tabulator .tabulator-footer .tabulator-calcs-holder:only-child {\n margin-bottom: -0.78571em;\n border-bottom: none;\n}\n\n.tabulator .tabulator-footer .tabulator-pages {\n margin: 0 7px;\n}\n\n.tabulator .tabulator-footer .tabulator-page {\n display: inline-block;\n margin: 0 2px;\n border: 1px solid #aaa;\n border-radius: 3px;\n padding: 2px 5px;\n background: rgba(255, 255, 255, 0.2);\n color: #555;\n font-family: inherit;\n font-weight: inherit;\n font-size: inherit;\n}\n\n.tabulator .tabulator-footer .tabulator-page.active {\n color: #d00;\n}\n\n.tabulator .tabulator-footer .tabulator-page:disabled {\n opacity: .5;\n}\n\n.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n color: #fff;\n}\n\n.tabulator .tabulator-loader {\n position: absolute;\n display: -ms-flexbox;\n display: flex;\n -ms-flex-align: center;\n align-items: center;\n top: 0;\n left: 0;\n z-index: 100;\n height: 100%;\n width: 100%;\n background: rgba(0, 0, 0, 0.4);\n text-align: center;\n}\n\n.tabulator .tabulator-loader .tabulator-loader-msg {\n display: inline-block;\n margin: 0 auto;\n padding: 10px 20px;\n border-radius: 10px;\n background: #fff;\n font-weight: bold;\n font-size: 16px;\n}\n\n.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading {\n border: 4px solid #333;\n color: #000;\n}\n\n.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error {\n border: 4px solid #D00;\n color: #590000;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.positive, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.positive {\n box-shadow: 0px 0px 0px #A3C293 inset;\n background: #FCFFF5 !important;\n color: #21BA45 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.positive:hover, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.positive:hover {\n background: #f7ffe6 !important;\n color: #13ae38 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.negative, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.negative {\n box-shadow: 0px 0px 0px #E0B4B4 inset;\n background: #FFF6F6 !important;\n color: #DB2828 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.negative:hover, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.negative:hover {\n background: #ffe7e7 !important;\n color: #d41616 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.error, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.error {\n box-shadow: 0px 0px 0px #E0B4B4 inset;\n background: #FFF6F6 !important;\n color: #DB2828 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.error:hover, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.error:hover {\n background: #ffe7e7 !important;\n color: #d12323 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.warning, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.warning {\n box-shadow: 0px 0px 0px #C9BA9B inset;\n background: #FFFAF3 !important;\n color: #F2C037 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.warning:hover, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.warning:hover {\n background: #fff4e4 !important;\n color: #f1bb29 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.active, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.active {\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n background: #E0E0E0 !important;\n color: rgba(0, 0, 0, 0.87) !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.active:hover, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.active:hover {\n background: #f7ffe6 !important;\n color: #13ae38 !important;\n}\n\n.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.active, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.disabled:hover, .tabulator .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell.active {\n pointer-events: none;\n color: rgba(0, 0, 0, 0.2);\n}\n\n.tabulator.inverted {\n background: #333333;\n color: rgba(255, 255, 255, 0.9);\n border: none;\n}\n\n.tabulator.inverted .tabulator-header {\n background-color: rgba(0, 0, 0, 0.15);\n border-color: rgba(255, 255, 255, 0.1) !important;\n color: rgba(255, 255, 255, 0.9);\n}\n\n.tabulator.inverted .tabulator-header .tabulator-col {\n border-color: rgba(255, 255, 255, 0.1) !important;\n}\n\n.tabulator.inverted .tabulator-tableHolder .tabulator-table .tabulator-row {\n color: rgba(255, 255, 255, 0.9);\n border: none;\n}\n\n.tabulator.inverted .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell {\n border-color: rgba(255, 255, 255, 0.1) !important;\n}\n\n.tabulator.inverted .tabulator-footer {\n background: #FFFFFF;\n}\n\n.tabulator.striped .tabulator-tableHolder .tabulator-table .tabulator-row:nth-child(even) {\n background-color: rgba(0, 0, 0, 0.05) !important;\n}\n\n.tabulator.celled {\n border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.tabulator.celled .tabulator-header .tabulator-col {\n border-right: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.tabulator.celled .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.tabulator[class*=\"single line\"] .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell {\n border-right: none;\n}\n\n.tabulator.red {\n border-top: 0.2em solid #DB2828;\n}\n\n.tabulator.inverted.red {\n background-color: #DB2828 !important;\n color: #FFFFFF !important;\n}\n\n.tabulator.orange {\n border-top: 0.2em solid #F2711C;\n}\n\n.tabulator.inverted.orange {\n background-color: #F2711C !important;\n color: #FFFFFF !important;\n}\n\n.tabulator.yellow {\n border-top: 0.2em solid #FBBD08;\n}\n\n.tabulator.inverted.yellow {\n background-color: #FBBD08 !important;\n color: #FFFFFF !important;\n}\n\n.tabulator.olive {\n border-top: 0.2em solid #B5CC18;\n}\n\n.tabulator.inverted.olive {\n background-color: #B5CC18 !important;\n color: #FFFFFF !important;\n}\n\n.tabulator.green {\n border-top: 0.2em solid #21BA45;\n}\n\n.tabulator.inverted.green {\n background-color: #21BA45 !important;\n color: #FFFFFF !important;\n}\n\n.tabulator.teal {\n border-top: 0.2em solid #00B5AD;\n}\n\n.tabulator.inverted.teal {\n background-color: #00B5AD !important;\n color: #FFFFFF !important;\n}\n\n.tabulator.blue {\n border-top: 0.2em solid #2185D0;\n}\n\n.tabulator.inverted.blue {\n background-color: #2185D0 !important;\n color: #FFFFFF !important;\n}\n\n.tabulator.violet {\n border-top: 0.2em solid #6435C9;\n}\n\n.tabulator.inverted.violet {\n background-color: #6435C9 !important;\n color: #FFFFFF !important;\n}\n\n.tabulator.purple {\n border-top: 0.2em solid #A333C8;\n}\n\n.tabulator.inverted.purple {\n background-color: #A333C8 !important;\n color: #FFFFFF !important;\n}\n\n.tabulator.pink {\n border-top: 0.2em solid #E03997;\n}\n\n.tabulator.inverted.pink {\n background-color: #E03997 !important;\n color: #FFFFFF !important;\n}\n\n.tabulator.brown {\n border-top: 0.2em solid #A5673F;\n}\n\n.tabulator.inverted.brown {\n background-color: #A5673F !important;\n color: #FFFFFF !important;\n}\n\n.tabulator.grey {\n border-top: 0.2em solid #767676;\n}\n\n.tabulator.inverted.grey {\n background-color: #767676 !important;\n color: #FFFFFF !important;\n}\n\n.tabulator.black {\n border-top: 0.2em solid #1B1C1D;\n}\n\n.tabulator.inverted.black {\n background-color: #1B1C1D !important;\n color: #FFFFFF !important;\n}\n\n.tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 1em 1em;\n}\n\n.tabulator.padded .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n top: 20px;\n}\n\n.tabulator.padded .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 1em 1em;\n}\n\n.tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 1.5em 1.5em;\n}\n\n.tabulator.padded.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n top: 26px;\n}\n\n.tabulator.padded.very .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 1.5em 1.5em;\n}\n\n.tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 0.5em 0.7em;\n}\n\n.tabulator.compact .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n top: 12px;\n}\n\n.tabulator.compact .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 0.5em 0.7em;\n}\n\n.tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content {\n padding: 0.4em 0.6em;\n}\n\n.tabulator.compact.very .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow {\n top: 10px;\n}\n\n.tabulator.compact.very .tabulator-tableHolder .tabulator-table .tabulator-row .tabulator-cell {\n padding: 0.4em 0.6em;\n}\n\n.tabulator-row {\n position: relative;\n box-sizing: border-box;\n min-height: 22px;\n border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.tabulator-row.tabulator-selectable:hover {\n box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n background: #E0E0E0 !important;\n color: rgba(0, 0, 0, 0.87) !important;\n cursor: pointer;\n}\n\n.tabulator-row.tabulator-selected {\n background-color: #9ABCEA;\n}\n\n.tabulator-row.tabulator-selected:hover {\n background-color: #769BCC;\n cursor: pointer;\n}\n\n.tabulator-row.tabulator-moving {\n position: absolute;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n pointer-events: none !important;\n z-index: 15;\n}\n\n.tabulator-row .tabulator-row-resize-handle {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 5px;\n}\n\n.tabulator-row .tabulator-row-resize-handle.prev {\n top: 0;\n bottom: auto;\n}\n\n.tabulator-row .tabulator-row-resize-handle:hover {\n cursor: ns-resize;\n}\n\n.tabulator-row .tabulator-frozen {\n display: inline-block;\n position: absolute;\n background-color: inherit;\n z-index: 10;\n}\n\n.tabulator-row .tabulator-frozen.tabulator-frozen-left {\n border-right: 2px solid #ddd;\n}\n\n.tabulator-row .tabulator-frozen.tabulator-frozen-right {\n border-left: 2px solid #ddd;\n}\n\n.tabulator-row .tabulator-responsive-collapse {\n box-sizing: border-box;\n padding: 5px;\n border-top: 1px solid #ddd;\n border-bottom: 1px solid #ddd;\n}\n\n.tabulator-row .tabulator-responsive-collapse:empty {\n display: none;\n}\n\n.tabulator-row .tabulator-responsive-collapse table {\n font-size: 14px;\n}\n\n.tabulator-row .tabulator-responsive-collapse table tr td {\n position: relative;\n}\n\n.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type {\n padding-right: 10px;\n}\n\n.tabulator-row .tabulator-cell {\n display: inline-block;\n position: relative;\n box-sizing: border-box;\n padding: 0.78571em 0.78571em;\n vertical-align: middle;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tabulator-row .tabulator-cell:last-of-type {\n border-right: none;\n}\n\n.tabulator-row .tabulator-cell.tabulator-editing {\n border: 1px solid #1D68CD;\n padding: 0;\n}\n\n.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select {\n border: 1px;\n background: transparent;\n}\n\n.tabulator-row .tabulator-cell.tabulator-validation-fail {\n border: 1px solid #DB2828;\n}\n\n.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select {\n border: 1px;\n background: transparent;\n color: #DB2828;\n}\n\n.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev {\n display: none;\n}\n\n.tabulator-row .tabulator-cell.tabulator-row-handle {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-align: center;\n align-items: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n}\n\n.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box {\n width: 80%;\n}\n\n.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar {\n width: 100%;\n height: 3px;\n margin-top: 2px;\n background: #666;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-branch {\n display: inline-block;\n vertical-align: middle;\n height: 9px;\n width: 7px;\n margin-top: -9px;\n margin-right: 5px;\n border-bottom-left-radius: 1px;\n border-left: 2px solid #ddd;\n border-bottom: 2px solid #ddd;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-pack: center;\n justify-content: center;\n -ms-flex-align: center;\n align-items: center;\n vertical-align: middle;\n height: 11px;\n width: 11px;\n margin-right: 5px;\n border: 1px solid #333;\n border-radius: 2px;\n background: rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.2);\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: transparent;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand {\n display: inline-block;\n position: relative;\n height: 7px;\n width: 1px;\n background: #333;\n}\n\n.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after {\n position: absolute;\n content: \"\";\n left: -3px;\n top: 3px;\n height: 1px;\n width: 7px;\n background: #333;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle {\n display: -ms-inline-flexbox;\n display: inline-flex;\n -ms-flex-align: center;\n align-items: center;\n -ms-flex-pack: center;\n justify-content: center;\n -moz-user-select: none;\n -khtml-user-select: none;\n -webkit-user-select: none;\n -o-user-select: none;\n height: 15px;\n width: 15px;\n border-radius: 20px;\n background: #666;\n color: #fff;\n font-weight: bold;\n font-size: 1.1em;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover {\n opacity: .7;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close {\n display: initial;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open {\n display: none;\n}\n\n.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close {\n display: none;\n}\n\n.tabulator-row.tabulator-group {\n box-sizing: border-box;\n border-bottom: 1px solid #999;\n border-right: 1px solid #ddd;\n border-top: 1px solid #999;\n padding: 5px;\n padding-left: 10px;\n background: #fafafa;\n font-weight: bold;\n min-width: 100%;\n}\n\n.tabulator-row.tabulator-group:hover {\n cursor: pointer;\n background-color: rgba(0, 0, 0, 0.1);\n}\n\n.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow {\n margin-right: 10px;\n border-left: 6px solid transparent;\n border-right: 6px solid transparent;\n border-top: 6px solid #666;\n border-bottom: 0;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow {\n margin-left: 20px;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow {\n margin-left: 40px;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow {\n margin-left: 60px;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow {\n margin-left: 80px;\n}\n\n.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow {\n margin-left: 100px;\n}\n\n.tabulator-row.tabulator-group .tabulator-arrow {\n display: inline-block;\n width: 0;\n height: 0;\n margin-right: 16px;\n border-top: 6px solid transparent;\n border-bottom: 6px solid transparent;\n border-right: 0;\n border-left: 6px solid #666;\n vertical-align: middle;\n}\n\n.tabulator-row.tabulator-group span {\n margin-left: 10px;\n color: #666;\n}\n\n.tabulator-edit-select-list {\n position: absolute;\n display: inline-block;\n box-sizing: border-box;\n max-height: 200px;\n background: #FFFFFF;\n border: 1px solid #ddd;\n font-size: 14px;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n z-index: 10000;\n}\n\n.tabulator-edit-select-list .tabulator-edit-select-list-item {\n padding: 4px;\n color: #333;\n}\n\n.tabulator-edit-select-list .tabulator-edit-select-list-item.active {\n color: #FFFFFF;\n background: #1D68CD;\n}\n\n.tabulator-edit-select-list .tabulator-edit-select-list-item:hover {\n cursor: pointer;\n color: #FFFFFF;\n background: #1D68CD;\n}\n\n.tabulator-edit-select-list .tabulator-edit-select-list-group {\n border-bottom: 1px solid #ddd;\n padding: 4px;\n padding-top: 6px;\n color: #333;\n font-weight: bold;\n}\n"]} \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator.css deleted file mode 100644 index f087924868..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator.css +++ /dev/null @@ -1,769 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator { - position: relative; - border: 1px solid #999; - background-color: #888; - font-size: 14px; - text-align: left; - overflow: hidden; - -ms-transform: translatez(0); - transform: translatez(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table { - min-width: 100%; -} - -.tabulator.tabulator-block-select { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid #999; - background-color: #e6e6e6; - color: #555; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-block; - position: relative; - box-sizing: border-box; - border-right: 1px solid #aaa; - background: #e6e6e6; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #999; - background: #cdcdcd; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - display: inline-block; - position: absolute; - top: 9px; - right: 8px; - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: -ms-flexbox; - display: flex; - border-top: 1px solid #aaa; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child { - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator .tabulator-header .tabulator-col.ui-sortable-helper { - position: absolute; - background-color: #e6e6e6 !important; - border: 1px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover { - cursor: pointer; - background-color: #cdcdcd; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow { - border-top: 6px solid #666; - border-bottom: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - -webkit-writing-mode: vertical-rl; - -ms-writing-mode: tb-rl; - writing-mode: vertical-rl; - text-orientation: mixed; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow { - right: calc(50% - 6px); -} - -.tabulator .tabulator-header .tabulator-frozen { - display: inline-block; - position: absolute; - z-index: 10; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - min-width: 400%; - background: #f3f3f3 !important; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: #f3f3f3 !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - min-width: 400%; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableHolder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableHolder:focus { - outline: none; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder { - box-sizing: border-box; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - width: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] { - position: absolute; - top: 0; - left: 0; - height: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder span { - display: inline-block; - margin: 0 auto; - padding: 10px; - color: #ccc; - font-weight: bold; - font-size: 20px; -} - -.tabulator .tabulator-tableHolder .tabulator-table { - position: relative; - display: inline-block; - background-color: #fff; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #e2e2e2 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #aaa; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #aaa; -} - -.tabulator .tabulator-footer { - padding: 5px 10px; - border-top: 1px solid #999; - background-color: #e6e6e6; - text-align: right; - color: #555; - font-weight: bold; - white-space: nowrap; - -ms-user-select: none; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: calc(100% + 20px); - margin: -5px -10px 5px -10px; - text-align: left; - background: #f3f3f3 !important; - border-bottom: 1px solid #aaa; - border-top: 1px solid #aaa; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: #f3f3f3 !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; - background: rgba(255, 255, 255, 0.2); - color: #555; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #d00; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; -} - -.tabulator .tabulator-col-resize-handle { - position: absolute; - right: 0; - top: 0; - bottom: 0; - width: 5px; -} - -.tabulator .tabulator-col-resize-handle.prev { - left: 0; - right: auto; -} - -.tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; -} - -.tabulator .tabulator-loader { - position: absolute; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-loader .tabulator-loader-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 22px; - background-color: #fff; -} - -.tabulator-row.tabulator-row-even { - background-color: #EFEFEF; -} - -.tabulator-row.tabulator-selectable:hover { - background-color: #bbb; - cursor: pointer; -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -.tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; -} - -.tabulator-row.tabulator-row-moving { - border: 1px solid #000; - background: #fff; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; - pointer-events: none; - z-index: 15; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -.tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; -} - -.tabulator-row .tabulator-frozen { - display: inline-block; - position: absolute; - background-color: inherit; - z-index: 10; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #aaa; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #aaa; -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 14px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid #aaa; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #aaa; - border-bottom: 2px solid #aaa; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-pack: center; - justify-content: center; - -ms-flex-align: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #fff; - font-weight: bold; - font-size: 1.1em; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #aaa; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - min-width: 100%; -} - -.tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow { - margin-left: 20px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow { - margin-left: 40px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow { - margin-left: 60px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow { - margin-left: 80px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow { - margin-left: 100px; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #d00; -} - -.tabulator-edit-select-list { - position: absolute; - display: inline-block; - box-sizing: border-box; - max-height: 200px; - background: #fff; - border: 1px solid #aaa; - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item { - padding: 4px; - color: #333; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - cursor: pointer; - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-group { - border-bottom: 1px solid #aaa; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator.min.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator.min.css deleted file mode 100644 index a8616f5142..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator{position:relative;border:1px solid #999;background-color:#888;font-size:14px;text-align:left;overflow:hidden;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator.tabulator-block-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{position:relative;box-sizing:border-box;width:100%;border-bottom:1px solid #999;background-color:#e6e6e6;color:#555;font-weight:700;white-space:nowrap;overflow:hidden;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header .tabulator-col{display:inline-block;position:relative;box-sizing:border-box;border-right:1px solid #aaa;background:#e6e6e6;text-align:left;vertical-align:bottom;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #999;background:#cdcdcd;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:9px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child{margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col.ui-sortable-helper{position:absolute;background-color:#e6e6e6!important;border:1px solid #aaa}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#cdcdcd}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #666;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-webkit-writing-mode:vertical-rl;-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:1}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:400%;background:#f3f3f3!important;border-top:1px solid #aaa;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:400%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{position:absolute;top:0;left:0;height:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#ccc;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#e2e2e2!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #aaa}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #aaa}.tabulator .tabulator-footer{padding:5px 10px;border-top:1px solid #999;background-color:#e6e6e6;text-align:right;color:#555;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-5px -10px 5px;text-align:left;background:#f3f3f3!important;border-bottom:1px solid #aaa;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f3f3f3!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:hsla(0,0%,100%,.2);color:#555;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:3;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none;z-index:2}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:1}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:4px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #aaa;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow{margin-left:20px}.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow{margin-left:40px}.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow{margin-left:60px}.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow{margin-left:80px}.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow{margin-left:100px}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#d00}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:4}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700} -/*# sourceMappingURL=tabulator.min.css.map */ diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator.min.css.map b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator.min.css.map deleted file mode 100644 index 825baa6e12..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator.scss"],"names":[],"mappings":"AA0CA,WACC,kBAAkB,AAElB,sBAxCgB,AA0ChB,sBA3CqB,AA6CrB,eA3Ca,AA4Cb,gBAAgB,AAChB,gBAAe,AAMf,uBAAwB,CAqexB,AApfD,iFAoBI,cAAc,CACd,AArBJ,kCA0BE,yBAAiB,AAAjB,sBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AA3BF,6BA+BE,kBAAiB,AACjB,sBAAsB,AAEtB,WAAU,AAEV,6BAlEwB,AAmExB,yBAtE4B,AAuE5B,WAtEmB,AAuEnB,gBAAgB,AAEhB,mBAAmB,AACnB,gBAAe,AAEf,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CA8OpB,AA7RF,4CAmDG,qBAAoB,AACpB,kBAAiB,AACjB,sBAAqB,AACrB,4BArFoB,AAsFpB,mBAxF2B,AAyF3B,gBAAe,AACf,sBAAsB,AACtB,eAAgB,CAoLhB,AA9OH,6DA6DI,kBAAkB,AAClB,sBA5FsB,AA6FtB,mBAA8C,AAC9C,mBAAoB,CACpB,AAjEJ,mEAqEI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CAsCX,AA7GJ,wFA2EK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAarB,AA9FL,gHAqFM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AA7FN,oFAkGK,qBAAqB,AACrB,kBAAkB,AAClB,QAAO,AACP,UAAS,AACT,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BAnImB,CAoInB,AA3GL,0FAoHK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAtJkB,AAuJlB,eAAgB,CAKhB,AA7HL,oHA2HM,iBAAiB,CACjB,AA5HN,0FAmIK,YAAa,CACb,AApIL,+DAyII,kBAAkB,AAClB,mCAAmD,AACnD,qBA1KmB,CA2KnB,AA5IJ,qEAgJI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AArKJ,8EAwJK,qBAAsB,CACtB,AAzJL,yEA4JK,cAAe,CACf,AA7JL,sFAiKM,QAAS,AACT,QAAS,CACT,AAnKN,oFA0KK,kBAAkB,CAClB,AA3KL,qEA8KK,eAAc,AACd,wBAAoD,CACpD,AAhLL,uHAoLM,gBAAgB,AAChB,4BA9MkB,CA+MlB,AAtLN,sHA2LM,gBAAgB,AAChB,4BAtNgB,CAuNhB,AA7LN,uHAkMM,0BA5NgB,AA6NhB,kBAAmB,CACnB,AApMN,+GA4MM,iCAAyB,AAAzB,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAlNN,oHAuNM,wBAAyB,CACzB,AAxNN,2GA6NM,gBAAe,AACf,gBAAgB,CAChB,AA/NN,uIAmOO,gBAAe,AACf,mBAAmB,CACnB,AArOP,uGA0OM,qBAAqB,CACrB,AA3ON,+CAiPG,qBAAqB,AACrB,kBAAkB,AAIlB,SAAW,CASX,AA/PH,qEAyPI,2BA7QgB,CA8QhB,AA1PJ,sEA6PI,0BAjRgB,CAkRhB,AA9PJ,qDAmQG,sBAAqB,AACrB,eAAc,AAEd,6BAAyD,AAUzD,0BApSiB,AAqSjB,6BAhToB,AAkTpB,eAAgB,CAChB,AApRH,oEAyQI,4BAAyD,CAKzD,AA9QJ,iGA4QK,YAAa,CACb,AA7QL,2DAuRG,cAAc,CAKd,AA5RH,iEA0RI,YAAa,CACb,AA3RJ,kCAiSE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CA2DjC,AAhWF,wCAwSG,YAAa,CACb,AAzSH,yDA6SG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AASlB,UAAU,CAYV,AApUH,wFAkTI,kBAAkB,AAClB,MAAK,AACL,OAAM,AACN,WAAW,CACX,AAtTJ,8DA2TI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,WAAU,AACV,gBAAiB,AACjB,cAAe,CACf,AAnUJ,mDAwUG,kBAAiB,AACjB,qBAAoB,AACpB,sBAhWqB,AAiWrB,mBAAmB,AACnB,iBAAgB,AAChB,UAhWe,CAkXf,AA/VH,kFAkVK,gBAAiB,AACjB,4BAAwD,CASxD,AA5VL,sGAsVM,4BA1Wc,CA2Wd,AAvVN,yGA0VM,yBA9Wc,CA+Wd,AA3VN,6BAsWE,iBAAgB,AAChB,0BA7WwB,AA8WxB,yBAjX4B,AAkX5B,iBAAiB,AACjB,WAlXmB,AAmXnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAoEpB,AAtbF,qDAqXG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAAyD,AAUzD,6BAzZiB,AA0ZjB,0BA1ZiB,AA4ZjB,eAAgB,CAMhB,AA9YH,oEA8XI,4BAAyD,CAKzD,AAnYJ,iGAiYK,YAAa,CACb,AAlYL,gEA2YI,mBAAkB,AAClB,kBAAkB,CAClB,AA7YJ,8CAkZG,YAAY,CACZ,AAnZH,6CAuZG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBAnaoB,AAoapB,kBAAiB,AAEjB,8BAA+B,AAE/B,WAzakB,AA0alB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CAiBjB,AArbH,oDAuaI,UA5amB,CA6anB,AAxaJ,sDA2aI,UAAU,CACV,AA5aJ,kEAgbK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAnbL,wCA0bE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AAxcF,6CAicG,OAAM,AACN,UAAU,CACV,AAncH,8CAscG,gBAAgB,CAChB,AAvcH,6BA6cE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,UAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AAnfF,mDA4dG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AAlfH,qEAyeI,sBAAqB,AACrB,UAAU,CACV,AA3eJ,mEA+eI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AACtB,gBAA0C,AAC1C,qBAjhBuB,CAg4BvB,AAnXD,kCAQE,wBAphB4B,CAqhB5B,AATF,0CAYE,sBArhBsB,AAshBtB,cAAe,CACf,AAdF,kCAiBE,wBAxhB6B,CAyhB7B,AAlBF,wCAqBE,yBA3hBkC,AA4hBlC,cAAe,CACf,AAvBF,oCA0BE,sBAAqB,AACrB,eAAe,CACf,AA5BF,gCA+BE,kBAAkB,AAElB,0BA5iBkB,AA6iBlB,6BA7iBkB,AA+iBlB,oBAAoB,AACpB,SAAU,CACV,AAtCF,4CA0CE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAxDF,iDAiDG,MAAK,AACL,WAAW,CACX,AAnDH,kDAsDG,gBAAgB,CAChB,AAvDH,iCA2DE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,SAAW,CASX,AAzEF,uDAmEG,2BA9kBiB,CA+kBjB,AApEH,wDAuEG,0BAllBiB,CAmlBjB,AAxEH,8CA4EE,sBAAqB,AAErB,YAAW,AAEX,0BA3lBkB,AA4lBlB,4BA5lBkB,CA+mBlB,AApGF,oDAoFG,YAAY,CACZ,AArFH,oDAwFG,cAnnBW,CA8nBX,AAnGH,0DA4FK,iBAAkB,CAKlB,AAjGL,wEA+FM,kBAAkB,CAClB,AAhGN,+BAwGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BAvnBkB,AAwnBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CAkLtB,AAlSF,iDAoHG,yBAxnBkB,AAynBlB,SAAU,CAMV,AA3HH,+GAwHI,WAAU,AACV,sBAAsB,CACtB,AA1HJ,yDA8HG,qBAjoBgB,CAwoBhB,AArIH,+HAgII,WAAU,AACV,uBAAsB,AAEtB,UAtoBe,CAuoBf,AApIJ,6EA0II,YAAa,CACb,AA3IJ,oDAgJG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AArKH,8EA2JI,SAAS,CAST,AApKJ,wGA+JK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AAnKL,2DAwKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BA9rBiB,AA+rBjB,4BA/rBiB,CAgsBjB,AArLH,4DAyLG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA7sBe,AA8sBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AA1PH,kEA0MI,eAAc,AACd,yBAA4B,CAC5B,AA5MJ,kGA+MI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAlOJ,wGAwNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA1uBa,CA2uBb,AAjOL,gGAqOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eArvBc,CAkwBd,AAxPJ,sGA8OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAhwBa,CAiwBb,AAvPL,qEA6PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WAzxBqB,AA0xBrB,gBAAgB,AAChB,eAAe,CAmBf,AAjSH,2EAiRI,UAAU,CACV,AAlRJ,sHAsRK,eAAe,CACf,AAvRL,sOA+RI,YAAY,CACZ,AAhSJ,+BAsSE,sBAAqB,AACrB,6BAA4B,AAC5B,4BAnzBkB,AAozBlB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAEhB,cAAe,CAkEf,AAjXF,qCAkTG,eAAc,AACd,+BAA+B,CAC/B,AApTH,wEAyTI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BA70BkB,AA80BlB,eAAgB,CAChB,AA9TJ,wEAoUI,gBAAgB,CAChB,AArUJ,wEA0UI,gBAAgB,CAChB,AA3UJ,wEAgVI,gBAAgB,CAChB,AAjVJ,wEAsVI,gBAAgB,CAChB,AAvVJ,wEA4VI,iBAAiB,CACjB,AA7VJ,gDAkWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BA13BmB,AA23BnB,qBAAqB,CACrB,AA3WH,oCA8WG,iBAAgB,AAChB,UAAU,CACV,AAKH,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBAz4BuB,AA04BvB,sBAx4BmB,AA04BnB,eA15Ba,AA45Bb,gBAAe,AACf,iCAAiC,AAEjC,SAAc,CA6Bd,AA5CD,6DAkBE,YAAW,AAEX,UAn5BgB,CAg6BhB,AAjCF,oEAuBG,WAz5BqB,AA05BrB,kBAj5BkB,CAk5BlB,AAzBH,mEA4BG,eAAc,AAEd,WAh6BqB,AAi6BrB,kBAx5BkB,CAy5BlB,AAhCH,8DAoCE,6BAp6BkB,AAs6BlB,YAAW,AACX,gBAAe,AAEf,WAx6BgB,AAy6BhB,eAAgB,CAChB","file":"tabulator.min.css","sourcesContent":["/* Tabulator v4.1.2 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #888 !default; //background color of tabulator\r\n$borderColor:#999 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$headerTextColor:#555 !default; //header text colour\r\n$headerBorderColor:#aaa !default; //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#e6e6e6 !default; //border to tabulator\r\n$footerTextColor:#555 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#d00 !default; //footer bottom active text color\r\n\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder: 1px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground:$headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:9px;\r\n\t\t\t\t\tright:8px;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\t.tabulator-col:last-child{\r\n\t\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//placeholder element for sortable columns\r\n\t\t\t&.ui-sortable-helper{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tbackground-color: $headerBackgroundColor !important;\r\n\t\t\t\tborder:1px solid $headerBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t\twidth : 0;\r\n\t\t\t\t\t\theight: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\tright:calc(50% - 6px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:400%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:400%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\ttop:0;\r\n\t\t\t\tleft:0;\r\n\t\t\t\theight:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#ccc;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t//row element\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align: right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpointer-events: none;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:40px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:60px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:80px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:100px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#d00;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}"]} \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_midnight.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_midnight.css deleted file mode 100644 index 40ae915a5a..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_midnight.css +++ /dev/null @@ -1,771 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator { - position: relative; - border: 1px solid #333; - background-color: #222; - overflow: hidden; - font-size: 14px; - text-align: left; - -ms-transform: translatez(0); - transform: translatez(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table { - min-width: 100%; -} - -.tabulator.tabulator-block-select { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid #999; - background-color: #333; - color: #fff; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-block; - position: relative; - box-sizing: border-box; - border-right: 1px solid #aaa; - background-color: #333; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #999; - background: #1a1a1a; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #444; - color: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - display: inline-block; - position: absolute; - top: 9px; - right: 8px; - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: -ms-flexbox; - display: flex; - border-top: 1px solid #aaa; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child { - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator .tabulator-header .tabulator-col.ui-sortable-helper { - position: absolute; - background-color: #1a1a1a !important; - border: 1px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input, .tabulator .tabulator-header .tabulator-col .tabulator-header-filter select { - border: 1px solid #999; - background: #444; - color: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover { - cursor: pointer; - background-color: #1a1a1a; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow { - border-top: 6px solid #666; - border-bottom: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - -webkit-writing-mode: vertical-rl; - -ms-writing-mode: tb-rl; - writing-mode: vertical-rl; - text-orientation: mixed; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow { - right: calc(50% - 6px); -} - -.tabulator .tabulator-header .tabulator-frozen { - display: inline-block; - position: absolute; - z-index: 10; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #888; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #888; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - min-width: 400%; - background: #1a1a1a !important; - border-top: 1px solid #888; - border-bottom: 1px solid #aaa; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: #1a1a1a !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - min-width: 400%; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableHolder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableHolder:focus { - outline: none; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder { - box-sizing: border-box; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - width: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] { - position: absolute; - top: 0; - left: 0; - height: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder span { - display: inline-block; - margin: 0 auto; - padding: 10px; - color: #eee; - font-weight: bold; - font-size: 20px; -} - -.tabulator .tabulator-tableHolder .tabulator-table { - position: relative; - display: inline-block; - background-color: #666; - white-space: nowrap; - overflow: visible; - color: #fff; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #373737 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #888; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #888; -} - -.tabulator .tabulator-col-resize-handle { - position: absolute; - right: 0; - top: 0; - bottom: 0; - width: 5px; -} - -.tabulator .tabulator-col-resize-handle.prev { - left: 0; - right: auto; -} - -.tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; -} - -.tabulator .tabulator-footer { - padding: 5px 10px; - border-top: 1px solid #999; - background-color: #333; - text-align: right; - color: #333; - font-weight: bold; - white-space: nowrap; - -ms-user-select: none; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: calc(100% + 20px); - margin: -5px -10px 5px -10px; - text-align: left; - background: #262626 !important; - border-bottom: 1px solid #888; - border-top: 1px solid #888; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: #262626 !important; - color: #fff; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - border: 1px solid #aaa; - border-radius: 3px; - padding: 2px 5px; - background: rgba(255, 255, 255, 0.2); - color: #333; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #fff; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; -} - -.tabulator .tabulator-loader { - position: absolute; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-loader .tabulator-loader-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 22px; - background-color: #666; -} - -.tabulator-row:nth-child(even) { - background-color: #444; -} - -.tabulator-row.tabulator-selectable:hover { - background-color: #999; - cursor: pointer; -} - -.tabulator-row.tabulator-selected { - background-color: #000; -} - -.tabulator-row.tabulator-selected:hover { - background-color: #888; - cursor: pointer; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #888; - border-bottom: 1px solid #888; - pointer-events: none !important; - z-index: 15; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -.tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; -} - -.tabulator-row .tabulator-frozen { - display: inline-block; - position: absolute; - background-color: inherit; - z-index: 10; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #888; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #888; -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #888; - border-bottom: 1px solid #888; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 14px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid #888; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #999; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #888; - border-bottom: 2px solid #888; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-pack: center; - justify-content: center; - -ms-flex-align: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #fff; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #fff; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #fff; - color: #666; - font-weight: bold; - font-size: 1.1em; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #888; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #ccc; - font-weight: bold; - color: #333; - min-width: 100%; -} - -.tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow { - margin-left: 20px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow { - margin-left: 40px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow { - margin-left: 60px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow { - margin-left: 80px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow { - margin-left: 100px; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #666; -} - -.tabulator-edit-select-list { - position: absolute; - display: inline-block; - box-sizing: border-box; - max-height: 200px; - background: #666; - border: 1px solid #888; - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item { - padding: 4px; - color: #fff; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: #666; - background: #999; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - cursor: pointer; - color: #666; - background: #999; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-group { - border-bottom: 1px solid #888; - padding: 4px; - padding-top: 6px; - color: #fff; - font-weight: bold; -} diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_midnight.min.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_midnight.min.css deleted file mode 100644 index a603d0cbbb..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_midnight.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator{position:relative;border:1px solid #333;background-color:#222;overflow:hidden;font-size:14px;text-align:left;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator.tabulator-block-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{width:100%;border-bottom:1px solid #999;color:#fff;font-weight:700;white-space:nowrap;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header,.tabulator .tabulator-header .tabulator-col{position:relative;box-sizing:border-box;background-color:#333;overflow:hidden}.tabulator .tabulator-header .tabulator-col{display:inline-block;border-right:1px solid #aaa;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #999;background:#1a1a1a;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#444;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:9px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child{margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col.ui-sortable-helper{position:absolute;background-color:#1a1a1a!important;border:1px solid #aaa}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input,.tabulator .tabulator-header .tabulator-col .tabulator-header-filter select{border:1px solid #999;background:#444;color:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#1a1a1a}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #666;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-webkit-writing-mode:vertical-rl;-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:1}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #888}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #888}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:400%;background:#1a1a1a!important;border-top:1px solid #888;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#1a1a1a!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:400%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{position:absolute;top:0;left:0;height:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#eee;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#666;white-space:nowrap;overflow:visible;color:#fff}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#373737!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #888}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #888}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-footer{padding:5px 10px;border-top:1px solid #999;background-color:#333;text-align:right;color:#333;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-5px -10px 5px;text-align:left;background:#262626!important;border-bottom:1px solid #888;border-top:1px solid #888;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#262626!important;color:#fff}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;border:1px solid #aaa;border-radius:3px;padding:2px 5px;background:hsla(0,0%,100%,.2);color:#333;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#fff}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:3;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#666}.tabulator-row:nth-child(2n){background-color:#444}.tabulator-row.tabulator-selectable:hover{background-color:#999;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#000}.tabulator-row.tabulator-selected:hover{background-color:#888;cursor:pointer}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #888;border-bottom:1px solid #888;pointer-events:none!important;z-index:2}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:1}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #888}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #888}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #888;border-bottom:1px solid #888}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:4px;border-right:1px solid #888;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #999;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #888;border-bottom:2px solid #888}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #fff;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#fff}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#fff}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#fff}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#fff;color:#666;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #888;border-top:1px solid #999;padding:5px;padding-left:10px;background:#ccc;font-weight:700;color:#333;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow{margin-left:20px}.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow{margin-left:40px}.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow{margin-left:60px}.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow{margin-left:80px}.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow{margin-left:100px}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#666}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#666;border:1px solid #888;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:4}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#fff}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#666;background:#999}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#666;background:#999}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #888;padding:4px;padding-top:6px;color:#fff;font-weight:700} -/*# sourceMappingURL=tabulator_midnight.min.css.map */ diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_midnight.min.css.map b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_midnight.min.css.map deleted file mode 100644 index d82ee592b8..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_midnight.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_midnight.scss"],"names":[],"mappings":"AAyCA,WACC,kBAAkB,AAClB,sBAtCgB,AAuChB,sBAxCqB,AAyCrB,gBAAe,AACf,eAxCa,AAyCb,gBAAgB,AAMhB,uBAAwB,CAwexB,AApfD,iFAiBI,cAAc,CACd,AAlBJ,kCAuBE,yBAAiB,AAAjB,sBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AAxBF,6BA+BE,WAAU,AAEV,6BA9DwB,AAgExB,WAlEmB,AAmEnB,gBAAgB,AAEhB,mBAAmB,AAGnB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAwPpB,AApSF,yEA4BE,kBAAiB,AACjB,sBAAsB,AAKtB,sBAlEyB,AAuEzB,eAAe,CAvCjB,AAoPG,4CApMA,qBAAoB,AAGpB,4BAjFoB,AAmFpB,gBAAe,AACf,qBAAsB,CA8LtB,AApPH,6DA0DI,kBAAkB,AAClB,sBAxFsB,AAyFtB,mBAA8C,AAC9C,mBAAoB,CACpB,AA9DJ,mEAkEI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CAwCX,AA5GJ,wFAwEK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAerB,AA7FL,gHAkFM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,gBAAgB,AAChB,UAAW,CACX,AA3FN,oFAiGK,qBAAqB,AACrB,kBAAkB,AAClB,QAAO,AACP,UAAS,AACT,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BAjImB,CAkInB,AA1GL,0FAmHK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BApJkB,AAqJlB,eAAgB,CAKhB,AA5HL,oHA0HM,iBAAiB,CACjB,AA3HN,0FAkIK,YAAa,CACb,AAnIL,+DAwII,kBAAkB,AAClB,mCAAgE,AAChE,qBAxKmB,CAyKnB,AA3IJ,qEA+II,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAuBlB,AA1KJ,8EAuJK,qBAAsB,CACtB,AAxJL,yEA2JK,cAAe,CACf,AA5JL,uJA+JK,sBAAqB,AACrB,gBAAgB,AAChB,UAAW,CACX,AAlKL,sFAsKO,QAAS,AACT,QAAS,CACV,AAxKN,oFA+KK,kBAAkB,CAClB,AAhLL,qEAmLK,eAAc,AACd,wBAAoD,CACpD,AArLL,uHA0LM,gBAAgB,AAChB,4BAnNkB,CAoNlB,AA5LN,sHAiMM,gBAAgB,AAChB,4BA3NgB,CA4NhB,AAnMN,uHAwMM,0BAjOgB,AAkOhB,kBAAmB,CACnB,AA1MN,+GAiNM,iCAAyB,AAAzB,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAvNN,oHA4NM,wBAAyB,CACzB,AA7NN,2GAkOM,gBAAe,AACf,gBAAgB,CAChB,AApON,uIAwOO,gBAAe,AACf,mBAAmB,CACnB,AA1OP,uGA+OM,qBAAqB,CACrB,AAhPN,+CAuPG,qBAAqB,AACrB,kBAAkB,AAIlB,SAAW,CASX,AArQH,qEA+PI,2BAlRgB,CAmRhB,AAhQJ,sEAmQI,0BAtRgB,CAuRhB,AApQJ,qDAyQG,sBAAqB,AACrB,eAAc,AAEd,6BAAyD,AAUzD,0BAzSiB,AA0SjB,6BArToB,AAuTpB,eAAgB,CAChB,AA1RH,oEA+QI,4BAAyD,CAKzD,AApRJ,iGAkRK,YAAa,CACb,AAnRL,2DA6RG,cAAc,CAKd,AAlSH,iEAgSI,YAAa,CACb,AAjSJ,kCAwSE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAyDjC,AArWF,wCA+SG,YAAa,CACb,AAhTH,yDAoTG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AASlB,UAAU,CAYV,AA3UH,wFAyTI,kBAAkB,AAClB,MAAK,AACL,OAAM,AACN,WAAW,CACX,AA7TJ,8DAkUI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,WAAU,AACV,gBAAiB,AACjB,cAAe,CACf,AA1UJ,mDA+UG,kBAAiB,AACjB,qBAAoB,AACpB,sBAtWqB,AAuWrB,mBAAmB,AACnB,iBAAgB,AAChB,UAtWe,CAsXf,AApWH,kFAwVK,gBAAiB,AACjB,4BAAwD,CASxD,AAlWL,sGA4VM,4BA/Wc,CAgXd,AA7VN,yGAgWM,yBAnXc,CAoXd,AAjWN,wCAyWE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AAvXF,6CAgXG,OAAM,AACN,UAAU,CACV,AAlXH,8CAqXG,gBAAgB,CAChB,AAtXH,6BA4XE,iBAAgB,AAChB,0BAlYwB,AAmYxB,sBAtYyB,AAuYzB,iBAAgB,AAChB,WAvYmB,AAwYnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAiEpB,AAzcF,qDA2YG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAAwD,AAWxD,6BA/aiB,AAgbjB,0BAhbiB,AAkbjB,eAAgB,CAMhB,AAraH,oEAoZI,6BAAwD,AACxD,UApbiB,CAybjB,AA1ZJ,iGAwZK,YAAa,CACb,AAzZL,gEAkaI,mBAAkB,AAClB,kBAAkB,CAClB,AApaJ,8CAyaG,YAAY,CACZ,AA1aH,6CA8aG,qBAAoB,AACpB,aAAY,AACZ,sBAtboB,AAubpB,kBAAiB,AACjB,gBAAe,AACf,8BAA+B,AAC/B,WA3bkB,AA4blB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CAiBjB,AAxcH,oDA0bI,UA9bmB,CA+bnB,AA3bJ,sDA8bI,UAAU,CACV,AA/bJ,kEAmcK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAtcL,6BA6cE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,UAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AAnfF,mDA4dG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AAlfH,qEAyeI,sBAAqB,AACrB,UAAU,CACV,AA3eJ,mEA+eI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AAEtB,gBAA0C,AAC1C,qBAjhBuB,CA23BvB,AA/WD,6BAQE,qBAnhByB,CAohBzB,AATF,0CAYE,sBAphBsB,AAqhBtB,cAAe,CACf,AAdF,kCAiBE,qBAvhB0B,CAwhB1B,AAlBF,wCAqBE,sBA1hB+B,AA2hB/B,cAAe,CACf,AAvBF,gCA0BE,kBAAkB,AAElB,0BAtiBkB,AAuiBlB,6BAviBkB,AAyiBlB,8BAA+B,AAC/B,SAAU,CACV,AAjCF,4CAqCE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAnDF,iDA4CG,MAAK,AACL,WAAW,CACX,AA9CH,kDAiDG,gBAAgB,CAChB,AAlDH,iCAsDE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,SAAW,CASX,AApEF,uDA8DG,2BAxkBiB,CAykBjB,AA/DH,wDAkEG,0BA5kBiB,CA6kBjB,AAnEH,8CAuEE,sBAAqB,AAErB,YAAW,AAEX,0BArlBkB,AAslBlB,4BAtlBkB,CAymBlB,AA/FF,oDA+EG,YAAY,CACZ,AAhFH,oDAmFG,cA7mBW,CAwnBX,AA9FH,0DAuFK,iBAAkB,CAKlB,AA5FL,wEA0FM,kBAAkB,CAClB,AA3FN,+BAoGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BAlnBkB,AAmnBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CAkLtB,AA9RF,iDAgHG,sBAnnBe,AAonBf,SAAU,CAMV,AAvHH,+GAoHI,WAAU,AACV,sBAAsB,CACtB,AAtHJ,yDA0HG,qBA5nBgB,CAmoBhB,AAjIH,+HA4HI,WAAU,AACV,uBAAsB,AAEtB,UAjoBe,CAkoBf,AAhIJ,6EAsII,YAAa,CACb,AAvIJ,oDA6IG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAElB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AAjKH,8EAuJI,SAAS,CAST,AAhKJ,wGA2JK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AA/JL,2DAoKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAzrBiB,AA0rBjB,4BA1rBiB,CA2rBjB,AAjLH,4DAqLG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBAxsBe,AAysBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AAtPH,kEAsMI,eAAc,AACd,yBAA4B,CAC5B,AAxMJ,kGA2MI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AA9NJ,wGAoNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAruBa,CAsuBb,AA7NL,gGAiOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAhvBc,CA6vBd,AApPJ,sGA0OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA3vBa,CA4vBb,AAnPL,qEAyPG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WApxBqB,AAqxBrB,gBAAgB,AAChB,eAAe,CAmBf,AA7RH,2EA6QI,UAAU,CACV,AA9QJ,sHAkRK,eAAe,CACf,AAnRL,sOA2RI,YAAY,CACZ,AA5RJ,+BAoSE,sBAAqB,AACrB,6BAA4B,AAC5B,4BAhzBkB,AAizBlB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,gBAAe,AACf,gBAAgB,AAChB,WAAU,AAEV,cAAe,CAgEf,AA9WF,qCAiTG,eAAc,AACd,+BAA+B,CAC/B,AAnTH,wEAuTI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BA10BkB,AA20BlB,eAAgB,CAChB,AA5TJ,wEAiUI,gBAAgB,CAChB,AAlUJ,wEAuUI,gBAAgB,CAChB,AAxUJ,wEA6UI,gBAAgB,CAChB,AA9UJ,wEAmVI,gBAAgB,CAChB,AApVJ,wEAyVI,iBAAiB,CACjB,AA1VJ,gDA+VG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BAt3BmB,AAu3BnB,qBAAqB,CACrB,AAxWH,oCA2WG,iBAAgB,AAChB,UAAU,CACV,AAIH,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBAp4BuB,AAq4BvB,sBAn4BmB,AAq4BnB,eAr5Ba,AAu5Bb,gBAAe,AACf,iCAAiC,AAEjC,SAAc,CA6Bd,AA5CD,6DAkBE,YAAW,AAEX,UA94BgB,CA25BhB,AAjCF,oEAuBG,WAp5BqB,AAq5BrB,eA54Be,CA64Bf,AAzBH,mEA4BG,eAAc,AAEd,WA35BqB,AA45BrB,eAn5Be,CAo5Bf,AAhCH,8DAoCE,6BA/5BkB,AAi6BlB,YAAW,AACX,gBAAe,AAEf,WAn6BgB,AAo6BhB,eAAgB,CAChB","file":"tabulator_midnight.min.css","sourcesContent":["/* Tabulator v4.1.2 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #222 !default; //background color of tabulator\r\n$borderColor:#333 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#333 !default; //border to tabulator\r\n$headerTextColor:#fff !default; //header text colour\r\n$headerBorderColor:#aaa !default; //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#666 !default; //table row background color\r\n$rowAltBackgroundColor:#444 !default; //table row background color\r\n$rowBorderColor:#888 !default; //table border color\r\n$rowTextColor:#fff !default; //table text color\r\n$rowHoverBackground:#999 !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #000 !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #888 !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#999 !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#333 !default; //border to tabulator\r\n$footerTextColor:#333 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#fff !default; //footer bottom active text color\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\tborder: 1px solid $borderColor;\r\n\tbackground-color: $backgroundColor;\r\n\toverflow:hidden;\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #444;\r\n\t\t\t\t\t\tcolor: #fff;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:9px;\r\n\t\t\t\t\tright:8px;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\t.tabulator-col:last-child{\r\n\t\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//placeholder element for sortable columns\r\n\t\t\t&.ui-sortable-helper{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tbackground-color: darken($headerBackgroundColor, 10%) !important;\r\n\t\t\t\tborder:1px solid $headerBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput, select{\r\n\t\t\t\t\tborder:1px solid #999;\r\n\t\t\t\t\tbackground: #444;\r\n\t\t\t\t\tcolor: #fff;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t width : 0;\r\n\t\t\t\t\t height: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\tright:calc(50% - 6px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:400%;\r\n\r\n\t\t\tbackground:darken($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:400%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\ttop:0;\r\n\t\t\t\tleft:0;\r\n\t\t\t\theight:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#eee;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:darken($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($footerBackgroundColor, 5%) !important;\r\n\t\t\t\tcolor:$headerTextColor;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tmargin:0 2px;\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t\tpadding:2px 5px;\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\t&:nth-child(even){\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#fff;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#ccc;\r\n\t\tfont-weight:bold;\r\n\t\tcolor:#333;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:40px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:60px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:80px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:100px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#666;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}"]} \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_modern.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_modern.css deleted file mode 100644 index 662b3e842e..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_modern.css +++ /dev/null @@ -1,794 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator { - position: relative; - border: 1px solid #fff; - background-color: #fff; - overflow: hidden; - font-size: 16px; - text-align: left; - -ms-transform: translatez(0); - transform: translatez(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table { - min-width: 100%; -} - -.tabulator.tabulator-block-select { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 3px solid #3759D7; - margin-bottom: 4px; - background-color: #fff; - color: #3759D7; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - padding-left: 10px; - font-size: 1.1em; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-block; - position: relative; - box-sizing: border-box; - border-right: 2px solid #fff; - background-color: #fff; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #3759D7; - background: #e6e6e6; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #3759D7; - padding: 1px; - background: #fff; - font-size: 1em; - color: #3759D7; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - display: inline-block; - position: absolute; - top: 9px; - right: 8px; - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #b7c3f1; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: -ms-flexbox; - display: flex; - border-top: 2px solid #3759D7; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child { - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator .tabulator-header .tabulator-col.ui-sortable-helper { - position: absolute; - background-color: #e6e6e6 !important; - border: 1px solid #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover { - cursor: pointer; - background-color: #e6e6e6; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #b7c3f1; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #3759D7; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow { - border-top: 6px solid #3759D7; - border-bottom: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - -webkit-writing-mode: vertical-rl; - -ms-writing-mode: tb-rl; - writing-mode: vertical-rl; - text-orientation: mixed; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow { - right: calc(50% - 6px); -} - -.tabulator .tabulator-header .tabulator-frozen { - display: inline-block; - position: absolute; - z-index: 10; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - padding-left: 10px; - border-right: 2px solid #fff; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #fff; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - min-width: 400%; - border-top: 2px solid #3759D7 !important; - background: white !important; - border-top: 1px solid #fff; - border-bottom: 1px solid #fff; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - padding-left: 0 !important; - background: white !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell { - background: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - min-width: 400%; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableHolder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableHolder:focus { - outline: none; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder { - box-sizing: border-box; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - width: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] { - position: absolute; - top: 0; - left: 0; - height: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder span { - display: inline-block; - margin: 0 auto; - padding: 10px; - color: #3759D7; - font-weight: bold; - font-size: 20px; -} - -.tabulator .tabulator-tableHolder .tabulator-table { - position: relative; - display: inline-block; - background-color: #f3f3f3; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #f2f2f2 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #3759D7; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #3759D7; -} - -.tabulator .tabulator-col-resize-handle { - position: absolute; - right: 0; - top: 0; - bottom: 0; - width: 5px; -} - -.tabulator .tabulator-col-resize-handle.prev { - left: 0; - right: auto; -} - -.tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; -} - -.tabulator .tabulator-footer { - padding: 5px 10px; - border-top: 1px solid #999; - background-color: #fff; - text-align: right; - color: #3759D7; - font-weight: bold; - white-space: nowrap; - -ms-user-select: none; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: calc(100% + 20px); - margin: -5px -10px 5px -10px; - text-align: left; - background: white !important; - border-top: 3px solid #3759D7 !important; - border-bottom: 2px solid #3759D7 !important; - border-bottom: 1px solid #fff; - border-top: 1px solid #fff; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: white !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell { - background: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; - border-bottom: none !important; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - border: 1px solid #aaa; - border-radius: 3px; - padding: 2px 5px; - background: rgba(255, 255, 255, 0.2); - color: #3759D7; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #3759D7; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; -} - -.tabulator .tabulator-loader { - position: absolute; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-loader .tabulator-loader-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - box-sizing: border-box; - min-height: 24px; - background-color: #3759D7; - padding-left: 10px !important; - margin-bottom: 2px; -} - -.tabulator-row:nth-child(even) { - background-color: #627ce0; -} - -.tabulator-row:nth-child(even) .tabulator-cell { - background-color: #fff; -} - -.tabulator-row.tabulator-selectable:hover { - cursor: pointer; -} - -.tabulator-row.tabulator-selectable:hover .tabulator-cell { - background-color: #bbb; -} - -.tabulator-row.tabulator-selected .tabulator-cell { - background-color: #9ABCEA; -} - -.tabulator-row.tabulator-selected:hover .tabulator-cell { - background-color: #769BCC; - cursor: pointer; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #fff; - border-bottom: 1px solid #fff; - pointer-events: none !important; - z-index: 15; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -.tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; -} - -.tabulator-row .tabulator-frozen { - display: inline-block; - position: absolute; - background-color: inherit; - z-index: 10; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-left { - padding-left: 10px; - border-right: 2px solid #fff; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #fff; -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #fff; - border-bottom: 1px solid #fff; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 16px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 6px 4px; - border-right: 2px solid #fff; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - background-color: #f3f3f3; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #fff; - border-bottom: 2px solid #fff; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-pack: center; - justify-content: center; - -ms-flex-align: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #f3f3f3; - font-weight: bold; - font-size: 1.1em; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 2px solid #3759D7; - border-top: 2px solid #3759D7; - padding: 5px; - padding-left: 10px; - background: #8ca0e8; - font-weight: bold; - color: fff; - margin-bottom: 2px; - min-width: 100%; -} - -.tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #3759D7; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow { - margin-left: 20px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow { - margin-left: 40px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow { - margin-left: 60px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow { - margin-left: 80px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow { - margin-left: 100px; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #3759D7; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #3759D7; -} - -.tabulator-edit-select-list { - position: absolute; - display: inline-block; - box-sizing: border-box; - max-height: 200px; - background: #f3f3f3; - border: 1px solid #fff; - font-size: 16px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item { - padding: 4px; - color: #333; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: #f3f3f3; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - cursor: pointer; - color: #f3f3f3; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-group { - border-bottom: 1px solid #fff; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_modern.min.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_modern.min.css deleted file mode 100644 index b7cb65fa9a..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_modern.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator{position:relative;border:1px solid #fff;background-color:#fff;overflow:hidden;font-size:16px;text-align:left;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator.tabulator-block-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{width:100%;border-bottom:3px solid #3759d7;margin-bottom:4px;color:#3759d7;font-weight:700;white-space:nowrap;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;padding-left:10px;font-size:1.1em}.tabulator .tabulator-header,.tabulator .tabulator-header .tabulator-col{position:relative;box-sizing:border-box;background-color:#fff;overflow:hidden}.tabulator .tabulator-header .tabulator-col{display:inline-block;border-right:2px solid #fff;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #3759d7;background:#e6e6e6;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #3759d7;padding:1px;background:#fff;font-size:1em;color:#3759d7}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:9px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #b7c3f1}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:2px solid #3759d7;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child{margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col.ui-sortable-helper{position:absolute;background-color:#e6e6e6!important;border:1px solid #fff}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#e6e6e6}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #b7c3f1}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #3759d7}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #3759d7;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-webkit-writing-mode:vertical-rl;-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:1}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{padding-left:10px;border-right:2px solid #fff}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #fff}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:400%;border-top:2px solid #3759d7!important;background:#fff!important;border-top:1px solid #fff;border-bottom:1px solid #fff;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{padding-left:0!important;background:#fff!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-cell{background:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:400%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{position:absolute;top:0;left:0;height:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#3759d7;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#f3f3f3;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#f2f2f2!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #3759d7}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #3759d7}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-footer{padding:5px 10px;border-top:1px solid #999;background-color:#fff;text-align:right;color:#3759d7;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-5px -10px 5px;text-align:left;background:#fff!important;border-top:3px solid #3759d7!important;border-bottom:2px solid #3759d7!important;border-bottom:1px solid #fff;border-top:1px solid #fff;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-cell{background:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none;border-bottom:none!important}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;border:1px solid #aaa;border-radius:3px;padding:2px 5px;background:hsla(0,0%,100%,.2);color:#3759d7;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#3759d7}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:3;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:24px;background-color:#3759d7;padding-left:10px!important;margin-bottom:2px}.tabulator-row:nth-child(2n){background-color:#627ce0}.tabulator-row:nth-child(2n) .tabulator-cell{background-color:#fff}.tabulator-row.tabulator-selectable:hover{cursor:pointer}.tabulator-row.tabulator-selectable:hover .tabulator-cell{background-color:#bbb}.tabulator-row.tabulator-selected .tabulator-cell{background-color:#9abcea}.tabulator-row.tabulator-selected:hover .tabulator-cell{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #fff;border-bottom:1px solid #fff;pointer-events:none!important;z-index:2}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:1}.tabulator-row .tabulator-frozen.tabulator-frozen-left{padding-left:10px;border-right:2px solid #fff}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #fff}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #fff;border-bottom:1px solid #fff}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:16px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:6px 4px;border-right:2px solid #fff;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background-color:#f3f3f3}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #fff;border-bottom:2px solid #fff}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#f3f3f3;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:2px solid #3759d7;border-top:2px solid #3759d7;padding:5px;padding-left:10px;background:#8ca0e8;font-weight:700;color:fff;margin-bottom:2px;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3759d7;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow{margin-left:20px}.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow{margin-left:40px}.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow{margin-left:60px}.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow{margin-left:80px}.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow{margin-left:100px}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3759d7;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#3759d7}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#f3f3f3;border:1px solid #fff;font-size:16px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:4}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#f3f3f3;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#f3f3f3;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #fff;padding:4px;padding-top:6px;color:#333;font-weight:700} -/*# sourceMappingURL=tabulator_modern.min.css.map */ diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_modern.min.css.map b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_modern.min.css.map deleted file mode 100644 index 95bd98527e..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_modern.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_modern.scss"],"names":[],"mappings":"AA+CA,WACC,kBAAkB,AAClB,sBA1CgB,AA2ChB,sBA5CqB,AA6CrB,gBAAe,AACf,eA5Ca,AA6Cb,gBAAgB,AAMhB,uBAAwB,CAyfxB,AArgBD,iFAiBI,cAAc,CACd,AAlBJ,kCAuBE,yBAAiB,AAAjB,sBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AAxBF,6BA+BE,WAAU,AAEV,gCA7Ee,AA8Ef,kBAAiB,AAEjB,cAhFe,AAiFf,gBAAgB,AAEhB,mBAAmB,AAGnB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,kBArDe,AAuDf,eAAgB,CA4PhB,AA7SF,yEA4BE,kBAAiB,AACjB,sBAAsB,AAMtB,sBAvEyB,AA4EzB,eAAe,CAxCjB,AAqPG,4CAhMA,qBAAoB,AAGpB,4BA1FoB,AA4FpB,gBAAe,AACf,qBAAsB,CA0LtB,AArPH,6DA+DI,kBAAkB,AAClB,yBA5Ga,AA6Gb,mBAA8C,AAC9C,mBAAoB,CACpB,AAnEJ,mEAuEI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CAyCX,AAlHJ,wFA6EK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAgBrB,AAnGL,gHAuFM,sBAAsB,AACtB,WAAW,AAEX,yBAtIW,AAwIX,YAAW,AAEX,gBAAgB,AAEhB,cAAc,AACd,aA7IW,CA8IX,AAlGN,oFAuGK,qBAAqB,AACrB,kBAAkB,AAClB,QAAO,AACP,UAAS,AACT,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,+BA3IqC,CA4IrC,AAhHL,0FAyHK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,6BAxKY,AAyKZ,eAAgB,CAKhB,AAlIL,oHAgIM,iBAAiB,CACjB,AAjIN,0FAyIK,YAAa,CACb,AA1IL,+DA+II,kBAAkB,AAClB,mCAAgE,AAChE,qBAnLmB,CAoLnB,AAlJJ,qEAsJI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AA3KJ,8EA8JK,qBAAsB,CACtB,AA/JL,yEAkKK,cAAe,CACf,AAnKL,sFAuKO,QAAS,AACT,QAAS,CACV,AAzKN,oFAgLK,kBAAkB,CAClB,AAjLL,qEAoLK,eAAc,AACd,wBAAoD,CACpD,AAtLL,uHA2LM,gBAAgB,AAChB,+BAxNoC,CAyNpC,AA7LN,sHAkMM,gBAAgB,AAChB,+BA/OW,CAgPX,AApMN,uHAyMM,6BArPW,AAsPX,kBAAmB,CACnB,AA3MN,+GAkNM,iCAAyB,AAAzB,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAxNN,oHA6NM,wBAAyB,CACzB,AA9NN,2GAmOM,gBAAe,AACf,gBAAgB,CAChB,AArON,uIAyOO,gBAAe,AACf,mBAAmB,CACnB,AA3OP,uGAgPM,qBAAqB,CACrB,AAjPN,+CAwPG,qBAAqB,AACrB,kBAAkB,AAIlB,SAAW,CAWX,AAxQH,qEAgQI,kBAtQa,AAwQb,2BAzRgB,CA0RhB,AAnQJ,sEAsQI,0BA7RgB,CA8RhB,AAvQJ,qDA2QG,sBAAqB,AACrB,eAAc,AAEd,uCAAqD,AAErD,0BAAyD,AAgBzD,0BAvTiB,AAwTjB,6BAnUoB,AAqUpB,eAAgB,CAChB,AApSH,oEAmRI,yBAA0B,AAE1B,yBAAyD,CASzD,AA9RJ,iGAwRK,YAAa,CACb,AAzRL,oFA4RK,eAAe,CACf,AA7RL,2DAuSG,cAAc,CAKd,AA5SH,iEA0SI,YAAa,CACb,AA3SJ,kCAiTE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAyDjC,AA9WF,wCAwTG,YAAa,CACb,AAzTH,yDA6TG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AASlB,UAAU,CAYV,AApVH,wFAkUI,kBAAkB,AAClB,MAAK,AACL,OAAM,AACN,WAAW,CACX,AAtUJ,8DA2UI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,cA5Xa,AA6Xb,gBAAiB,AACjB,cAAe,CACf,AAnVJ,mDAwVG,kBAAiB,AACjB,qBAAoB,AACpB,yBAnXwB,AAoXxB,mBAAmB,AACnB,iBAAgB,AAChB,UAnXe,CAmYf,AA7WH,kFAiWK,gBAAiB,AACjB,4BAAwD,CASxD,AA3WL,sGAqWM,+BAjZW,CAkZX,AAtWN,yGAyWM,4BArZW,CAsZX,AA1WN,wCAmXE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AAjYF,6CA0XG,OAAM,AACN,UAAU,CACV,AA5XH,8CA+XG,gBAAgB,CAChB,AAhYH,6BAsYE,iBAAgB,AAChB,0BAhZwB,AAiZxB,sBApZyB,AAqZzB,iBAAgB,AAChB,cAtbe,AAubf,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAwEpB,AA1dF,qDAqZG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,0BAAyD,AAEzD,uCAAqD,AACrD,0CAAwD,AAcxD,6BAnciB,AAocjB,0BApciB,AAscjB,eAAgB,CAOhB,AAtbH,oEAiaI,yBAAyD,CASzD,AA1aJ,iGAoaK,YAAa,CACb,AAraL,oFAwaK,eAAe,CACf,AAzaL,gEAkbI,mBAAkB,AAClB,mBAAkB,AAClB,4BAA6B,CAC7B,AArbJ,8CA0bG,YAAY,CACZ,AA3bH,6CA+bG,qBAAoB,AACpB,aAAY,AACZ,sBA3coB,AA4cpB,kBAAiB,AACjB,gBAAe,AACf,8BAA+B,AAC/B,cAjfc,AAkfd,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CAiBjB,AAzdH,oDA2cI,aAvfa,CAwfb,AA5cJ,sDA+cI,UAAU,CACV,AAhdJ,kEAodK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAvdL,6BA8dE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,UAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AApgBF,mDA6eG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AAngBH,qEA0fI,sBAAqB,AACrB,UAAU,CACV,AA5fJ,mEAggBI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAGlB,sBAAsB,AACtB,gBAA0C,AAE1C,yBA3jBgB,AA6jBhB,4BAAqC,AAErC,iBAAkB,CAsXlB,AAjYD,6BAcE,wBA1hBqC,CA+hBrC,AAnBF,6CAiBG,qBAjjBwB,CAkjBxB,AAlBH,0CAsBE,cAAe,CAKf,AA3BF,0DAyBG,qBAtjBqB,CAujBrB,AA1BH,kDA+BG,wBA1jB4B,CA2jB5B,AAhCH,wDAqCG,yBA/jBiC,AAgkBjC,cAAe,CACf,AAvCH,gCA2CE,kBAAkB,AAElB,0BA5kBkB,AA6kBlB,6BA7kBkB,AA+kBlB,8BAA+B,AAC/B,SAAU,CACV,AAlDF,4CAsDE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AApEF,iDA6DG,MAAK,AACL,WAAW,CACX,AA/DH,kDAkEG,gBAAgB,CAChB,AAnEH,iCAuEE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,SAAW,CAUX,AAtFF,uDA+EG,kBA7lBc,AA8lBd,2BA/mBiB,CAgnBjB,AAjFH,wDAoFG,0BAnnBiB,CAonBjB,AArFH,8CAyFE,sBAAqB,AAErB,YAAW,AAEX,0BA5nBkB,AA6nBlB,4BA7nBkB,CAgpBlB,AAjHF,oDAiGG,YAAY,CACZ,AAlGH,oDAqGG,cAppBW,CA+pBX,AAhHH,0DAyGK,iBAAkB,CAKlB,AA9GL,wEA4GM,kBAAkB,CAClB,AA7GN,+BAqHE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,gBAAe,AACf,4BAxpBkB,AAypBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,uBAAsB,AAEtB,wBAhqByB,CAi1BzB,AAhTF,iDAkIG,yBA1pBkB,AA2pBlB,SAAU,CAMV,AAzIH,+GAsII,WAAU,AACV,sBAAsB,CACtB,AAxIJ,yDA4IG,qBAnqBgB,CA0qBhB,AAnJH,+HA8II,WAAU,AACV,uBAAsB,AAEtB,UAxqBe,CAyqBf,AAlJJ,6EAwJI,YAAa,CACb,AAzJJ,oDA+JG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAElB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AAnLH,8EAyKI,SAAS,CAST,AAlLJ,wGA6KK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AAjLL,2DAsLG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAhuBiB,AAiuBjB,4BAjuBiB,CAkuBjB,AAnMH,4DAuMG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA/uBe,AAgvBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AAxQH,kEAwNI,eAAc,AACd,yBAA4B,CAC5B,AA1NJ,kGA6NI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAhPJ,wGAsOK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA5wBa,CA6wBb,AA/OL,gGAmPI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAvxBc,CAoyBd,AAtQJ,sGA4PK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAlyBa,CAmyBb,AArQL,qEA2QG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,cA3zBwB,AA4zBxB,gBAAgB,AAChB,eAAe,CAmBf,AA/SH,2EA+RI,UAAU,CACV,AAhSJ,sHAoSK,eAAe,CACf,AArSL,sOA6SI,YAAY,CACZ,AA9SJ,+BAqTE,sBAAqB,AACrB,gCA12Be,AA22Bf,6BA32Be,AA42Bf,YAAW,AACX,kBAAiB,AACjB,mBAAiC,AACjC,gBAAgB,AAChB,UAAS,AACT,kBAAkB,AAElB,cAAe,CAiEf,AAhYF,qCAkUG,eAAc,AACd,+BAA+B,CAC/B,AApUH,wEAyUI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,6BAh4Ba,AAi4Bb,eAAgB,CAChB,AA9UJ,wEAmVI,gBAAgB,CAChB,AApVJ,wEAyVI,gBAAgB,CAChB,AA1VJ,wEA+VI,gBAAgB,CAChB,AAhWJ,wEAqWI,gBAAgB,CAChB,AAtWJ,wEA2WI,iBAAiB,CACjB,AA5WJ,gDAiXG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,8BA56Bc,AA66Bd,qBAAqB,CACrB,AA1XH,oCA6XG,iBAAgB,AAChB,aAl7Bc,CAm7Bd,AAIH,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,mBA36B0B,AA46B1B,sBA16BmB,AA46BnB,eA57Ba,AA87Bb,gBAAe,AACf,iCAAiC,AAEjC,SAAc,CA6Bd,AA5CD,6DAkBE,YAAW,AAEX,UAr7BgB,CAk8BhB,AAjCF,oEAuBG,cA37BwB,AA47BxB,kBAn7BkB,CAo7BlB,AAzBH,mEA4BG,eAAc,AAEd,cAl8BwB,AAm8BxB,kBA17BkB,CA27BlB,AAhCH,8DAoCE,6BAt8BkB,AAw8BlB,YAAW,AACX,gBAAe,AAEf,WA18BgB,AA28BhB,eAAgB,CAChB","file":"tabulator_modern.min.css","sourcesContent":["/* Tabulator v4.1.2 (c) Oliver Folkerd */\n\n\r\n$primary: #3759D7 !default; //the base text color from which the rest of the theme derives\r\n\r\n//Main Theme Variables\r\n$backgroundColor: #fff !default; //background color of tabulator\r\n$borderColor:#fff !default; //border to tabulator\r\n$textSize:16px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#fff !default; //border to tabulator\r\n$headerTextColor:$primary !default; //header text colour\r\n$headerBorderColor:#fff !default; //header border color\r\n$headerSeperatorColor:$primary !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: $primary !default;\r\n$sortArrowInactive: lighten($primary, 30%) !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#f3f3f3 !default; //table row background color\r\n$rowAltBackgroundColor:#fff !default; //table row background color\r\n$rowBorderColor:#fff !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#fff !default; //border to tabulator\r\n$footerTextColor:$primary !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:$primary !default; //footer bottom active text color\r\n\r\n$handleWidth:10px !default; //width of the row handle\r\n$handleColor: $primary !default; //color for odd numbered rows\r\n$handleColorAlt: lighten($primary, 10%) !default; //color for even numbered rows\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\tborder: 1px solid $borderColor;\r\n\tbackground-color: $backgroundColor;\r\n\toverflow:hidden;\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:3px solid $headerSeperatorColor;\r\n\t\tmargin-bottom:4px;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\tpadding-left:$handleWidth;\r\n\r\n\t\tfont-size: 1.1em;\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:2px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid $primary;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\r\n\t\t\t\t\t\tfont-size: 1em;\r\n\t\t\t\t\t\tcolor: $primary;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:9px;\r\n\t\t\t\t\tright:8px;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:2px solid $headerSeperatorColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\t.tabulator-col:last-child{\r\n\t\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//placeholder element for sortable columns\r\n\t\t\t&.ui-sortable-helper{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tbackground-color: darken($headerBackgroundColor, 10%) !important;\r\n\t\t\t\tborder:1px solid $headerBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t width : 0;\r\n\t\t\t\t\t height: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\tright:calc(50% - 6px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tpadding-left: $handleWidth;\r\n\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:400%;\r\n\r\n\t\t\tborder-top:2px solid $headerSeperatorColor !important;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tpadding-left: 0 !important;\r\n\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-cell{\r\n\t\t\t\t\tbackground:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:400%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\ttop:0;\r\n\t\t\t\tleft:0;\r\n\t\t\t\theight:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:$primary;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $headerSeperatorColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\tborder-top:3px solid $headerSeperatorColor !important;\r\n\t\t\tborder-bottom:2px solid $headerSeperatorColor !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-cell{\r\n\t\t\t\t\tbackground:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t\tborder-bottom:none !important;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tmargin:0 2px;\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t\tpadding:2px 5px;\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\r\n\tbackground-color: $handleColor;\r\n\r\n\tpadding-left: $handleWidth !important;\r\n\r\n\tmargin-bottom: 2px;\r\n\r\n\t&:nth-child(even){\r\n\t\tbackground-color: $handleColorAlt;\r\n\r\n\t\t.tabulator-cell{\r\n\t\t\tbackground-color: $rowAltBackgroundColor;\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tcursor: pointer;\r\n\r\n\t\t.tabulator-cell{\r\n\t\t\tbackground-color:$rowHoverBackground;\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\t.tabulator-cell{\r\n\t\t\tbackground-color:$rowSelectedBackground;\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\t.tabulator-cell{\r\n\t\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\t\tcursor: pointer;\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tpadding-left: $handleWidth;\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:6px 4px;\r\n\t\tborder-right:2px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\t\tbackground-color: $rowBackgroundColor;\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:2px solid $primary;\r\n\t\tborder-top:2px solid $primary;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:lighten($primary, 20%);\r\n\t\tfont-weight:bold;\r\n\t\tcolor:fff;\r\n\t\tmargin-bottom: 2px;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:40px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:60px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:80px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:100px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$primary;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}"]} \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_simple.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_simple.css deleted file mode 100644 index 51aca5bbca..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_simple.css +++ /dev/null @@ -1,766 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator { - position: relative; - background-color: #fff; - overflow: hidden; - font-size: 14px; - text-align: left; - -ms-transform: translatez(0); - transform: translatez(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table { - min-width: 100%; -} - -.tabulator.tabulator-block-select { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 1px solid #999; - background-color: #fff; - color: #555; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-block; - position: relative; - box-sizing: border-box; - border-right: 1px solid #ddd; - background-color: #fff; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #999; - background: #e6e6e6; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 4px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - display: inline-block; - position: absolute; - top: 9px; - right: 8px; - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: -ms-flexbox; - display: flex; - border-top: 1px solid #ddd; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child { - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator .tabulator-header .tabulator-col.ui-sortable-helper { - position: absolute; - background-color: #e6e6e6 !important; - border: 1px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover { - cursor: pointer; - background-color: #e6e6e6; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #666; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow { - border-top: 6px solid #666; - border-bottom: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - -webkit-writing-mode: vertical-rl; - -ms-writing-mode: tb-rl; - writing-mode: vertical-rl; - text-orientation: mixed; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow { - right: calc(50% - 6px); -} - -.tabulator .tabulator-header .tabulator-frozen { - display: inline-block; - position: absolute; - z-index: 10; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - min-width: 400%; - background: #f2f2f2 !important; - border-top: 1px solid #ddd; - border-bottom: 1px solid #999; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: #f2f2f2 !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - min-width: 400%; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableHolder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableHolder:focus { - outline: none; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder { - box-sizing: border-box; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - width: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] { - position: absolute; - top: 0; - left: 0; - height: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder span { - display: inline-block; - margin: 0 auto; - padding: 10px; - color: #000; - font-weight: bold; - font-size: 20px; -} - -.tabulator .tabulator-tableHolder .tabulator-table { - position: relative; - display: inline-block; - background-color: #fff; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #f2f2f2 !important; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top { - border-bottom: 2px solid #ddd; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom { - border-top: 2px solid #ddd; -} - -.tabulator .tabulator-col-resize-handle { - position: absolute; - right: 0; - top: 0; - bottom: 0; - width: 5px; -} - -.tabulator .tabulator-col-resize-handle.prev { - left: 0; - right: auto; -} - -.tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; -} - -.tabulator .tabulator-footer { - padding: 5px 10px; - border-top: 1px solid #999; - background-color: #fff; - text-align: right; - color: #555; - font-weight: bold; - white-space: nowrap; - -ms-user-select: none; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: calc(100% + 20px); - margin: -5px -10px 5px -10px; - text-align: left; - background: #f2f2f2 !important; - border-bottom: 1px solid #fff; - border-top: 1px solid #ddd; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: #f2f2f2 !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - border: 1px solid #aaa; - border-radius: 3px; - padding: 2px 5px; - background: rgba(255, 255, 255, 0.2); - color: #555; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #d00; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; -} - -.tabulator .tabulator-loader { - position: absolute; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-loader .tabulator-loader-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 22px; - background-color: #fff; - border-bottom: 1px solid #ddd; -} - -.tabulator-row:nth-child(even) { - background-color: #fff; -} - -.tabulator-row.tabulator-selectable:hover { - background-color: #bbb; - cursor: pointer; -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -.tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - pointer-events: none !important; - z-index: 15; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -.tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; -} - -.tabulator-row .tabulator-frozen { - display: inline-block; - position: absolute; - background-color: inherit; - z-index: 10; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #ddd; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #ddd; -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 14px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 4px; - border-right: 1px solid #ddd; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.tabulator-row .tabulator-cell:last-of-type { - border-right: none; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #666; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #ddd; - border-bottom: 2px solid #ddd; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-pack: center; - justify-content: center; - -ms-flex-align: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #fff; - font-weight: bold; - font-size: 1.1em; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-bottom: 1px solid #999; - border-right: 1px solid #ddd; - border-top: 1px solid #999; - padding: 5px; - padding-left: 10px; - background: #fafafa; - font-weight: bold; - min-width: 100%; -} - -.tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: rgba(0, 0, 0, 0.1); -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #666; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow { - margin-left: 20px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow { - margin-left: 40px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow { - margin-left: 60px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow { - margin-left: 80px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow { - margin-left: 100px; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #666; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #666; -} - -.tabulator-edit-select-list { - position: absolute; - display: inline-block; - box-sizing: border-box; - max-height: 200px; - background: #fff; - border: 1px solid #ddd; - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item { - padding: 4px; - color: #333; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - cursor: pointer; - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-group { - border-bottom: 1px solid #ddd; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_simple.min.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_simple.min.css deleted file mode 100644 index 13b1828bba..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_simple.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator{position:relative;background-color:#fff;overflow:hidden;font-size:14px;text-align:left;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator.tabulator-block-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{width:100%;border-bottom:1px solid #999;color:#555;font-weight:700;white-space:nowrap;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header,.tabulator .tabulator-header .tabulator-col{position:relative;box-sizing:border-box;background-color:#fff;overflow:hidden}.tabulator .tabulator-header .tabulator-col{display:inline-block;border-right:1px solid #ddd;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #999;background:#e6e6e6;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:4px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:9px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #ddd;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child{margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col.ui-sortable-helper{position:absolute;background-color:#e6e6e6!important;border:1px solid #ddd}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#e6e6e6}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #666}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #666;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-webkit-writing-mode:vertical-rl;-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:1}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:400%;background:#f2f2f2!important;border-top:1px solid #ddd;border-bottom:1px solid #999;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#f2f2f2!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:400%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{position:absolute;top:0;left:0;height:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#000;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#f2f2f2!important}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-top{border-bottom:2px solid #ddd}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs.tabulator-calcs-bottom{border-top:2px solid #ddd}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-footer{padding:5px 10px;border-top:1px solid #999;background-color:#fff;text-align:right;color:#555;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-5px -10px 5px;text-align:left;background:#f2f2f2!important;border-bottom:1px solid #fff;border-top:1px solid #ddd;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#f2f2f2!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;border:1px solid #aaa;border-radius:3px;padding:2px 5px;background:hsla(0,0%,100%,.2);color:#555;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#d00}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:3;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;border-bottom:1px solid #ddd}.tabulator-row,.tabulator-row:nth-child(2n){background-color:#fff}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #ddd;border-bottom:1px solid #ddd;pointer-events:none!important;z-index:2}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:1}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #ddd}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #ddd}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #ddd;border-bottom:1px solid #ddd}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:4px;border-right:1px solid #ddd;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#666}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #ddd;border-bottom:2px solid #ddd}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row.tabulator-group{box-sizing:border-box;border-bottom:1px solid #999;border-right:1px solid #ddd;border-top:1px solid #999;padding:5px;padding-left:10px;background:#fafafa;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:rgba(0,0,0,.1)}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #666;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow{margin-left:20px}.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow{margin-left:40px}.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow{margin-left:60px}.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow{margin-left:80px}.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow{margin-left:100px}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #666;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#666}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #ddd;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:4}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #ddd;padding:4px;padding-top:6px;color:#333;font-weight:700} -/*# sourceMappingURL=tabulator_simple.min.css.map */ diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_simple.min.css.map b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_simple.min.css.map deleted file mode 100644 index 193e31c7ad..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_simple.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_simple.scss"],"names":[],"mappings":"AA0CA,WACC,kBAAkB,AAClB,sBAxCqB,AAyCrB,gBAAe,AACf,eAxCa,AAyCb,gBAAgB,AAMhB,uBAAwB,CAkexB,AA7eD,iFAgBI,cAAc,CACd,AAjBJ,kCAsBE,yBAAiB,AAAjB,sBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AAvBF,6BA8BE,WAAU,AAEV,6BA9DwB,AAgExB,WAlEmB,AAmEnB,gBAAgB,AAEhB,mBAAmB,AAGnB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAgPpB,AA3RF,yEA2BE,kBAAiB,AACjB,sBAAsB,AAKtB,sBAlEyB,AAuEzB,eAAe,CAtCjB,AA6OG,4CA9LA,qBAAoB,AAGpB,4BAjFoB,AAmFpB,gBAAe,AACf,qBAAsB,CAwLtB,AA7OH,6DAyDI,kBAAkB,AAClB,sBAxFsB,AAyFtB,mBAA8C,AAC9C,mBAAoB,CACpB,AA7DJ,mEAiEI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CAsCX,AAzGJ,wFAuEK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAarB,AA1FL,gHAiFM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AAzFN,oFA8FK,qBAAqB,AACrB,kBAAkB,AAClB,QAAO,AACP,UAAS,AACT,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BA/HmB,CAgInB,AAvGL,0FAgHK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAlJkB,AAmJlB,eAAgB,CAKhB,AAzHL,oHAuHM,iBAAiB,CACjB,AAxHN,0FAgIK,YAAa,CACb,AAjIL,+DAsII,kBAAkB,AAClB,mCAA+D,AAC/D,qBAvKmB,CAwKnB,AAzIJ,qEA6II,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AAlKJ,8EAqJK,qBAAsB,CACtB,AAtJL,yEAyJK,cAAe,CACf,AA1JL,sFA8JO,QAAS,AACT,QAAS,CACV,AAhKN,oFAwKK,kBAAkB,CAClB,AAzKL,qEA4KK,eAAc,AACd,wBAAoD,CACpD,AA9KL,uHAmLM,gBAAgB,AAChB,4BA7MkB,CA8MlB,AArLN,sHA0LM,gBAAgB,AAChB,4BArNgB,CAsNhB,AA5LN,uHAiMM,0BA3NgB,AA4NhB,kBAAmB,CACnB,AAnMN,+GA0MM,iCAAyB,AAAzB,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AAhNN,oHAqNM,wBAAyB,CACzB,AAtNN,2GA2NM,gBAAe,AACf,gBAAgB,CAChB,AA7NN,uIAiOO,gBAAe,AACf,mBAAmB,CACnB,AAnOP,uGAwOM,qBAAqB,CACrB,AAzON,+CAgPG,qBAAqB,AACrB,kBAAkB,AAIlB,SAAW,CASX,AA9PH,qEAwPI,2BA5QgB,CA6QhB,AAzPJ,sEA4PI,0BAhRgB,CAiRhB,AA7PJ,qDAiQG,sBAAqB,AACrB,eAAc,AAEd,6BAAwD,AAUxD,0BAlSiB,AAmSjB,6BA7SuB,AA+SvB,eAAgB,CAChB,AAlRH,oEAuQI,4BAAwD,CAKxD,AA5QJ,iGA0QK,YAAa,CACb,AA3QL,2DAqRG,cAAc,CAKd,AA1RH,iEAwRI,YAAa,CACb,AAzRJ,kCAiSE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CA0DjC,AA/VF,wCAwSG,YAAa,CACb,AAzSH,yDA6SG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AASlB,UAAU,CAYV,AApUH,wFAkTI,kBAAkB,AAClB,MAAK,AACL,OAAM,AACN,WAAW,CACX,AAtTJ,8DA2TI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,WAAU,AACV,gBAAiB,AACjB,cAAe,CACf,AAnUJ,mDAwUG,kBAAiB,AACjB,qBAAoB,AACpB,sBAhWqB,AAiWrB,mBAAmB,AACnB,iBAAgB,AAChB,UAhWe,CAiXf,AA9VH,kFAiVK,gBAAiB,AACjB,4BAAwD,CASxD,AA3VL,sGAqVM,4BAzWc,CA0Wd,AAtVN,yGAyVM,yBA7Wc,CA8Wd,AA1VN,wCAmWE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AAjXF,6CA0WG,OAAM,AACN,UAAU,CACV,AA5WH,8CA+WG,gBAAgB,CAChB,AAhXH,6BAsXE,iBAAgB,AAChB,0BA5XwB,AA6XxB,sBAhYyB,AAiYzB,iBAAgB,AAChB,WAjYmB,AAkYnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAgEpB,AAlcF,qDAqYG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAAwD,AAUxD,6BA7ZwB,AA8ZxB,0BA1aiB,AA4ajB,eAAgB,CAMhB,AA9ZH,oEA8YI,4BAAwD,CAKxD,AAnZJ,iGAiZK,YAAa,CACb,AAlZL,gEA2ZI,mBAAkB,AAClB,kBAAkB,CAClB,AA7ZJ,8CAkaG,YAAY,CACZ,AAnaH,6CAuaG,qBAAoB,AACpB,aAAY,AACZ,sBA/aoB,AAgbpB,kBAAiB,AACjB,gBAAe,AACf,8BAA+B,AAC/B,WApbkB,AAqblB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CAiBjB,AAjcH,oDAmbI,UAvbmB,CAwbnB,AApbJ,sDAubI,UAAU,CACV,AAxbJ,kEA4bK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AA/bL,6BAscE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,UAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AA5eF,mDAqdG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AA3eH,qEAkeI,sBAAqB,AACrB,UAAU,CACV,AApeJ,mEAweI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AAEtB,gBAA0C,AAE1C,4BA1gBmB,CAo3BnB,AAhXD,4CAKC,qBA3gBuB,CAghBtB,AAVF,0CAaE,sBA/gBsB,AAghBtB,cAAe,CACf,AAfF,kCAkBE,wBAlhB6B,CAmhB7B,AAnBF,wCAsBE,yBArhBkC,AAshBlC,cAAe,CACf,AAxBF,gCA2BE,kBAAkB,AAElB,0BAjiBkB,AAkiBlB,6BAliBkB,AAoiBlB,8BAA+B,AAC/B,SAAU,CACV,AAlCF,4CAsCE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AApDF,iDA6CG,MAAK,AACL,WAAW,CACX,AA/CH,kDAkDG,gBAAgB,CAChB,AAnDH,iCAuDE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,SAAW,CASX,AArEF,uDA+DG,2BAnkBiB,CAokBjB,AAhEH,wDAmEG,0BAvkBiB,CAwkBjB,AApEH,8CAwEE,sBAAqB,AAErB,YAAW,AAEX,0BAhlBkB,AAilBlB,4BAjlBkB,CAomBlB,AAhGF,oDAgFG,YAAY,CACZ,AAjFH,oDAoFG,cAxmBW,CAmnBX,AA/FH,0DAwFK,iBAAkB,CAKlB,AA7FL,wEA2FM,kBAAkB,CAClB,AA5FN,+BAoGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BA5mBkB,AA6mBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CAqLtB,AAjSF,4CA+GG,iBAAkB,CAClB,AAhHH,iDAmHG,yBA/mBkB,AAgnBlB,SAAU,CAMV,AA1HH,+GAuHI,WAAU,AACV,sBAAsB,CACtB,AAzHJ,yDA6HG,qBAxnBgB,CA+nBhB,AApIH,+HA+HI,WAAU,AACV,uBAAsB,AAEtB,UA7nBe,CA8nBf,AAnIJ,6EAyII,YAAa,CACb,AA1IJ,oDAgJG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAElB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AApKH,8EA0JI,SAAS,CAST,AAnKJ,wGA8JK,WAAU,AACV,WAAU,AACV,eAAc,AACd,eAAe,CACf,AAlKL,2DAuKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAtrBiB,AAurBjB,4BAvrBiB,CAwrBjB,AApLH,4DAwLG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBArsBe,AAssBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AAzPH,kEAyMI,eAAc,AACd,yBAA4B,CAC5B,AA3MJ,kGA8MI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAjOJ,wGAuNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAluBa,CAmuBb,AAhOL,gGAoOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eA7uBc,CA0vBd,AAvPJ,sGA6OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAxvBa,CAyvBb,AAtPL,qEA4PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WAjxBqB,AAkxBrB,gBAAgB,AAChB,eAAe,CAmBf,AAhSH,2EAgRI,UAAU,CACV,AAjRJ,sHAqRK,eAAe,CACf,AAtRL,sOA8RI,YAAY,CACZ,AA/RJ,+BAsSE,sBAAqB,AACrB,6BAA4B,AAC5B,4BA5yBkB,AA6yBlB,0BAAyB,AACzB,YAAW,AACX,kBAAiB,AACjB,mBAAkB,AAClB,gBAAgB,AAEhB,cAAe,CAgEf,AA/WF,qCAkTG,eAAc,AACd,+BAA+B,CAC/B,AApTH,wEAwTI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,0BAr0BkB,AAs0BlB,eAAgB,CAChB,AA7TJ,wEAkUI,gBAAgB,CAChB,AAnUJ,wEAwUI,gBAAgB,CAChB,AAzUJ,wEA8UI,gBAAgB,CAChB,AA/UJ,wEAoVI,gBAAgB,CAChB,AArVJ,wEA0VI,iBAAiB,CACjB,AA3VJ,gDAgWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,2BAj3BmB,AAk3BnB,qBAAqB,CACrB,AAzWH,oCA4WG,iBAAgB,AAChB,UAAU,CACV,AAIH,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBA/3BuB,AAg4BvB,sBA93BmB,AAg4BnB,eAh5Ba,AAk5Bb,gBAAe,AACf,iCAAiC,AAEjC,SAAc,CA6Bd,AA5CD,6DAkBE,YAAW,AAEX,UAz4BgB,CAs5BhB,AAjCF,oEAuBG,WA/4BqB,AAg5BrB,kBAt4BkB,CAu4BlB,AAzBH,mEA4BG,eAAc,AAEd,WAt5BqB,AAu5BrB,kBA74BkB,CA84BlB,AAhCH,8DAoCE,6BA15BkB,AA45BlB,YAAW,AACX,gBAAe,AAEf,WA95BgB,AA+5BhB,eAAgB,CAChB","file":"tabulator_simple.min.css","sourcesContent":["/* Tabulator v4.1.2 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #fff !default; //background color of tabulator\r\n$borderColor:#999 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#fff !default; //border to tabulator\r\n$headerTextColor:#555 !default; //header text colour\r\n$headerBorderColor:#ddd !default; //header border color\r\n$headerSeperatorColor:#999 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #666 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#fff !default; //table row background color\r\n$rowBorderColor:#ddd !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#fff !default; //border to tabulator\r\n$footerTextColor:#555 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#999 !default; //footer bottom seperator color\r\n$footerActiveColor:#d00 !default; //footer bottom active text color\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\tbackground-color: $backgroundColor;\r\n\toverflow:hidden;\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:4px;\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:9px;\r\n\t\t\t\t\tright:8px;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\t.tabulator-col:last-child{\r\n\t\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//placeholder element for sortable columns\r\n\t\t\t&.ui-sortable-helper{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%) !important;\r\n\t\t\t\tborder:1px solid $headerBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t width : 0;\r\n\t\t\t\t\t height: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\tright:calc(50% - 6px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:400%;\r\n\r\n\t\t\tbackground:darken($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $headerSeperatorColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:400%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\ttop:0;\r\n\t\t\t\tleft:0;\r\n\t\t\t\theight:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:#000;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:darken($rowAltBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t\t&.tabulator-calcs-top{\r\n\t\t\t\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-calcs-bottom{\r\n\t\t\t\t\t\tborder-top:2px solid $rowBorderColor;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tborder-top:1px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-5px -10px 5px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:darken($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:darken($footerBackgroundColor, 5%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-bottom:1px solid $footerBackgroundColor;\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tmargin:0 2px;\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\t\t\tpadding:2px 5px;\r\n\t\t\tbackground:rgba(255,255,255,.2);\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t&:nth-child(even){\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:4px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\t\t&:last-of-type{\r\n\t\t\tborder-right: none;\r\n\t\t}\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:#666;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-bottom:1px solid #999;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #999;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:#fafafa;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:rgba(0,0,0,.1);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:40px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:60px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:80px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:100px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:#666;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}"]} \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_site.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_site.css deleted file mode 100644 index 0b3137a32b..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_site.css +++ /dev/null @@ -1,765 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator { - position: relative; - border-bottom: 5px solid #222; - background-color: #fff; - font-size: 14px; - text-align: left; - overflow: hidden; - -ms-transform: translatez(0); - transform: translatez(0); -} - -.tabulator[tabulator-layout="fitDataFill"] .tabulator-tableHolder .tabulator-table { - min-width: 100%; -} - -.tabulator[tabulator-layout="fitColumns"] .tabulator-row .tabulator-cell:last-of-type { - border-right: none; -} - -.tabulator.tabulator-block-select { - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.tabulator .tabulator-header { - position: relative; - box-sizing: border-box; - width: 100%; - border-bottom: 3px solid #3FB449; - background-color: #222; - color: #fff; - font-weight: bold; - white-space: nowrap; - overflow: hidden; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-header .tabulator-col { - display: inline-block; - position: relative; - box-sizing: border-box; - border-right: 1px solid #aaa; - background-color: #222; - text-align: left; - vertical-align: bottom; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-moving { - position: absolute; - border: 1px solid #3FB449; - background: #090909; - pointer-events: none; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content { - box-sizing: border-box; - position: relative; - padding: 8px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title { - box-sizing: border-box; - width: 100%; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align: bottom; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor { - box-sizing: border-box; - width: 100%; - border: 1px solid #999; - padding: 1px; - background: #fff; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow { - display: inline-block; - position: absolute; - top: 14px; - right: 8px; - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols { - position: relative; - display: -ms-flexbox; - display: flex; - border-top: 1px solid #aaa; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child { - margin-right: -1px; -} - -.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator .tabulator-header .tabulator-col.ui-sortable-helper { - position: absolute; - background-color: #222 !important; - border: 1px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter { - position: relative; - box-sizing: border-box; - margin-top: 2px; - width: 100%; - text-align: center; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea { - height: auto !important; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg { - margin-top: 3px; -} - -.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear { - width: 0; - height: 0; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title { - padding-right: 25px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover { - cursor: pointer; - background-color: #090909; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="none"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #bbb; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="asc"] .tabulator-col-content .tabulator-arrow { - border-top: none; - border-bottom: 6px solid #3FB449; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort="desc"] .tabulator-col-content .tabulator-arrow { - border-top: 6px solid #3FB449; - border-bottom: none; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title { - -webkit-writing-mode: vertical-rl; - -ms-writing-mode: tb-rl; - writing-mode: vertical-rl; - text-orientation: mixed; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title { - -ms-transform: rotate(180deg); - transform: rotate(180deg); -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title { - padding-right: 0; - padding-top: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title { - padding-right: 0; - padding-bottom: 20px; -} - -.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow { - right: calc(50% - 6px); -} - -.tabulator .tabulator-header .tabulator-frozen { - display: inline-block; - position: absolute; - z-index: 10; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #aaa; -} - -.tabulator .tabulator-header .tabulator-calcs-holder { - box-sizing: border-box; - min-width: 400%; - background: #3c3c3c !important; - border-top: 1px solid #aaa; - overflow: hidden; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row { - background: #3c3c3c !important; -} - -.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder { - min-width: 400%; -} - -.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty { - display: none; -} - -.tabulator .tabulator-tableHolder { - position: relative; - width: 100%; - white-space: nowrap; - overflow: auto; - -webkit-overflow-scrolling: touch; -} - -.tabulator .tabulator-tableHolder:focus { - outline: none; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder { - box-sizing: border-box; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - width: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode="virtual"] { - position: absolute; - top: 0; - left: 0; - height: 100%; -} - -.tabulator .tabulator-tableHolder .tabulator-placeholder span { - display: inline-block; - margin: 0 auto; - padding: 10px; - color: #3FB449; - font-weight: bold; - font-size: 20px; -} - -.tabulator .tabulator-tableHolder .tabulator-table { - position: relative; - display: inline-block; - background-color: #fff; - white-space: nowrap; - overflow: visible; - color: #333; -} - -.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs { - font-weight: bold; - background: #484848 !important; - color: #fff; -} - -.tabulator .tabulator-footer { - padding: 5px 10px; - padding-top: 8px; - border-top: 3px solid #3FB449; - background-color: #222; - text-align: right; - color: #222; - font-weight: bold; - white-space: nowrap; - -ms-user-select: none; - user-select: none; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder { - box-sizing: border-box; - width: calc(100% + 20px); - margin: -8px -10px 8px -10px; - text-align: left; - background: #3c3c3c !important; - border-bottom: 1px solid #aaa; - overflow: hidden; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row { - background: #3c3c3c !important; - color: #fff !important; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle { - display: none; -} - -.tabulator .tabulator-footer .tabulator-calcs-holder:only-child { - margin-bottom: -5px; - border-bottom: none; -} - -.tabulator .tabulator-footer .tabulator-pages { - margin: 0 7px; -} - -.tabulator .tabulator-footer .tabulator-page { - display: inline-block; - margin: 0 2px; - padding: 2px 5px; - border: 1px solid #aaa; - border-radius: 3px; - background: #fff; - color: #222; - font-family: inherit; - font-weight: inherit; - font-size: inherit; -} - -.tabulator .tabulator-footer .tabulator-page.active { - color: #3FB449; -} - -.tabulator .tabulator-footer .tabulator-page:disabled { - opacity: .5; -} - -.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); - color: #fff; -} - -.tabulator .tabulator-col-resize-handle { - position: absolute; - right: 0; - top: 0; - bottom: 0; - width: 5px; -} - -.tabulator .tabulator-col-resize-handle.prev { - left: 0; - right: auto; -} - -.tabulator .tabulator-col-resize-handle:hover { - cursor: ew-resize; -} - -.tabulator .tabulator-loader { - position: absolute; - display: -ms-flexbox; - display: flex; - -ms-flex-align: center; - align-items: center; - top: 0; - left: 0; - z-index: 100; - height: 100%; - width: 100%; - background: rgba(0, 0, 0, 0.4); - text-align: center; -} - -.tabulator .tabulator-loader .tabulator-loader-msg { - display: inline-block; - margin: 0 auto; - padding: 10px 20px; - border-radius: 10px; - background: #fff; - font-weight: bold; - font-size: 16px; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading { - border: 4px solid #333; - color: #000; -} - -.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error { - border: 4px solid #D00; - color: #590000; -} - -.tabulator-row { - position: relative; - box-sizing: border-box; - min-height: 22px; - background-color: #fff; -} - -.tabulator-row.tabulator-row-even { - background-color: #EFEFEF; -} - -.tabulator-row.tabulator-selectable:hover { - background-color: #bbb; - cursor: pointer; -} - -.tabulator-row.tabulator-selected { - background-color: #9ABCEA; -} - -.tabulator-row.tabulator-selected:hover { - background-color: #769BCC; - cursor: pointer; -} - -.tabulator-row.tabulator-row-moving { - border: 1px solid #000; - background: #fff; -} - -.tabulator-row.tabulator-moving { - position: absolute; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; - pointer-events: none !important; - z-index: 15; -} - -.tabulator-row .tabulator-row-resize-handle { - position: absolute; - right: 0; - bottom: 0; - left: 0; - height: 5px; -} - -.tabulator-row .tabulator-row-resize-handle.prev { - top: 0; - bottom: auto; -} - -.tabulator-row .tabulator-row-resize-handle:hover { - cursor: ns-resize; -} - -.tabulator-row .tabulator-frozen { - display: inline-block; - position: absolute; - background-color: inherit; - z-index: 10; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-left { - border-right: 2px solid #aaa; -} - -.tabulator-row .tabulator-frozen.tabulator-frozen-right { - border-left: 2px solid #aaa; -} - -.tabulator-row .tabulator-responsive-collapse { - box-sizing: border-box; - padding: 5px; - border-top: 1px solid #aaa; - border-bottom: 1px solid #aaa; -} - -.tabulator-row .tabulator-responsive-collapse:empty { - display: none; -} - -.tabulator-row .tabulator-responsive-collapse table { - font-size: 14px; -} - -.tabulator-row .tabulator-responsive-collapse table tr td { - position: relative; -} - -.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type { - padding-right: 10px; -} - -.tabulator-row .tabulator-cell { - display: inline-block; - position: relative; - box-sizing: border-box; - padding: 6px; - border-right: 1px solid #aaa; - vertical-align: middle; - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; -} - -.tabulator-row .tabulator-cell.tabulator-editing { - border: 1px solid #1D68CD; - padding: 0; -} - -.tabulator-row .tabulator-cell.tabulator-editing input, .tabulator-row .tabulator-cell.tabulator-editing select { - border: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail { - border: 1px solid #dd0000; -} - -.tabulator-row .tabulator-cell.tabulator-validation-fail input, .tabulator-row .tabulator-cell.tabulator-validation-fail select { - border: 1px; - background: transparent; - color: #dd0000; -} - -.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev { - display: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box { - width: 80%; -} - -.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar { - width: 100%; - height: 3px; - margin-top: 2px; - background: #3FB449; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-branch { - display: inline-block; - vertical-align: middle; - height: 9px; - width: 7px; - margin-top: -9px; - margin-right: 5px; - border-bottom-left-radius: 1px; - border-left: 2px solid #aaa; - border-bottom: 2px solid #aaa; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-pack: center; - justify-content: center; - -ms-flex-align: center; - align-items: center; - vertical-align: middle; - height: 11px; - width: 11px; - margin-right: 5px; - border: 1px solid #333; - border-radius: 2px; - background: rgba(0, 0, 0, 0.1); - overflow: hidden; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover { - cursor: pointer; - background: rgba(0, 0, 0, 0.2); -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: transparent; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand { - display: inline-block; - position: relative; - height: 7px; - width: 1px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - height: 1px; - width: 7px; - background: #333; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle { - display: -ms-inline-flexbox; - display: inline-flex; - -ms-flex-align: center; - align-items: center; - -ms-flex-pack: center; - justify-content: center; - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - height: 15px; - width: 15px; - border-radius: 20px; - background: #666; - color: #fff; - font-weight: bold; - font-size: 1.1em; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover { - opacity: .7; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close { - display: initial; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open { - display: none; -} - -.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close { - display: none; -} - -.tabulator-row.tabulator-group { - box-sizing: border-box; - border-right: 1px solid #aaa; - border-top: 1px solid #000; - border-bottom: 2px solid #3FB449; - padding: 5px; - padding-left: 10px; - background: #222; - color: #fff; - font-weight: bold; - min-width: 100%; -} - -.tabulator-row.tabulator-group:hover { - cursor: pointer; - background-color: #090909; -} - -.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow { - margin-right: 10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid #3FB449; - border-bottom: 0; -} - -.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow { - margin-left: 20px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow { - margin-left: 40px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow { - margin-left: 60px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow { - margin-left: 80px; -} - -.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow { - margin-left: 100px; -} - -.tabulator-row.tabulator-group .tabulator-arrow { - display: inline-block; - width: 0; - height: 0; - margin-right: 16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid #3FB449; - vertical-align: middle; -} - -.tabulator-row.tabulator-group span { - margin-left: 10px; - color: #3FB449; -} - -.tabulator-edit-select-list { - position: absolute; - display: inline-block; - box-sizing: border-box; - max-height: 200px; - background: #fff; - border: 1px solid #aaa; - font-size: 14px; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 10000; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item { - padding: 4px; - color: #333; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item.active { - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-item:hover { - cursor: pointer; - color: #fff; - background: #1D68CD; -} - -.tabulator-edit-select-list .tabulator-edit-select-list-group { - border-bottom: 1px solid #aaa; - padding: 4px; - padding-top: 6px; - color: #333; - font-weight: bold; -} diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_site.min.css b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_site.min.css deleted file mode 100644 index c2a598371e..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_site.min.css +++ /dev/null @@ -1,3 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -.tabulator{position:relative;border-bottom:5px solid #222;background-color:#fff;font-size:14px;text-align:left;overflow:hidden;transform:translatez(0)}.tabulator[tabulator-layout=fitDataFill] .tabulator-tableHolder .tabulator-table{min-width:100%}.tabulator[tabulator-layout=fitColumns] .tabulator-row .tabulator-cell:last-of-type{border-right:none}.tabulator.tabulator-block-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.tabulator .tabulator-header{width:100%;border-bottom:3px solid #3fb449;color:#fff;font-weight:700;white-space:nowrap;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-header,.tabulator .tabulator-header .tabulator-col{position:relative;box-sizing:border-box;background-color:#222;overflow:hidden}.tabulator .tabulator-header .tabulator-col{display:inline-block;border-right:1px solid #aaa;text-align:left;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col.tabulator-moving{position:absolute;border:1px solid #3fb449;background:#090909;pointer-events:none}.tabulator .tabulator-header .tabulator-col .tabulator-col-content{box-sizing:border-box;position:relative;padding:8px}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title{box-sizing:border-box;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-title .tabulator-title-editor{box-sizing:border-box;width:100%;border:1px solid #999;padding:1px;background:#fff}.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-arrow{display:inline-block;position:absolute;top:14px;right:8px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols{position:relative;display:-ms-flexbox;display:flex;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-col.tabulator-col-group .tabulator-col-group-cols .tabulator-col:last-child{margin-right:-1px}.tabulator .tabulator-header .tabulator-col:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator .tabulator-header .tabulator-col.ui-sortable-helper{position:absolute;background-color:#222!important;border:1px solid #aaa}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter{position:relative;box-sizing:border-box;margin-top:2px;width:100%;text-align:center}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter textarea{height:auto!important}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter svg{margin-top:3px}.tabulator .tabulator-header .tabulator-col .tabulator-header-filter input::-ms-clear{width:0;height:0}.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:25px}.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{cursor:pointer;background-color:#090909}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=none] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #bbb}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=asc] .tabulator-col-content .tabulator-arrow{border-top:none;border-bottom:6px solid #3fb449}.tabulator .tabulator-header .tabulator-col.tabulator-sortable[aria-sort=desc] .tabulator-col-content .tabulator-arrow{border-top:6px solid #3fb449;border-bottom:none}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical .tabulator-col-content .tabulator-col-title{-webkit-writing-mode:vertical-rl;-ms-writing-mode:tb-rl;writing-mode:vertical-rl;text-orientation:mixed;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-col-vertical-flip .tabulator-col-title{transform:rotate(180deg)}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-col-title{padding-right:0;padding-top:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable.tabulator-col-vertical-flip .tabulator-col-title{padding-right:0;padding-bottom:20px}.tabulator .tabulator-header .tabulator-col.tabulator-col-vertical.tabulator-sortable .tabulator-arrow{right:calc(50% - 6px)}.tabulator .tabulator-header .tabulator-frozen{display:inline-block;position:absolute;z-index:1}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator .tabulator-header .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator .tabulator-header .tabulator-calcs-holder{box-sizing:border-box;min-width:400%;background:#3c3c3c!important;border-top:1px solid #aaa;overflow:hidden}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important}.tabulator .tabulator-header .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-header .tabulator-frozen-rows-holder{min-width:400%}.tabulator .tabulator-header .tabulator-frozen-rows-holder:empty{display:none}.tabulator .tabulator-tableHolder{position:relative;width:100%;white-space:nowrap;overflow:auto;-webkit-overflow-scrolling:touch}.tabulator .tabulator-tableHolder:focus{outline:none}.tabulator .tabulator-tableHolder .tabulator-placeholder{box-sizing:border-box;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;width:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder[tabulator-render-mode=virtual]{position:absolute;top:0;left:0;height:100%}.tabulator .tabulator-tableHolder .tabulator-placeholder span{display:inline-block;margin:0 auto;padding:10px;color:#3fb449;font-weight:700;font-size:20px}.tabulator .tabulator-tableHolder .tabulator-table{position:relative;display:inline-block;background-color:#fff;white-space:nowrap;overflow:visible;color:#333}.tabulator .tabulator-tableHolder .tabulator-table .tabulator-row.tabulator-calcs{font-weight:700;background:#484848!important;color:#fff}.tabulator .tabulator-footer{padding:5px 10px;padding-top:8px;border-top:3px solid #3fb449;background-color:#222;text-align:right;color:#222;font-weight:700;white-space:nowrap;-ms-user-select:none;user-select:none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator .tabulator-footer .tabulator-calcs-holder{box-sizing:border-box;width:calc(100% + 20px);margin:-8px -10px 8px;text-align:left;background:#3c3c3c!important;border-bottom:1px solid #aaa;overflow:hidden}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row{background:#3c3c3c!important;color:#fff!important}.tabulator .tabulator-footer .tabulator-calcs-holder .tabulator-row .tabulator-col-resize-handle{display:none}.tabulator .tabulator-footer .tabulator-calcs-holder:only-child{margin-bottom:-5px;border-bottom:none}.tabulator .tabulator-footer .tabulator-pages{margin:0 7px}.tabulator .tabulator-footer .tabulator-page{display:inline-block;margin:0 2px;padding:2px 5px;border:1px solid #aaa;border-radius:3px;background:#fff;color:#222;font-family:inherit;font-weight:inherit;font-size:inherit}.tabulator .tabulator-footer .tabulator-page.active{color:#3fb449}.tabulator .tabulator-footer .tabulator-page:disabled{opacity:.5}.tabulator .tabulator-footer .tabulator-page:not(.disabled):hover{cursor:pointer;background:rgba(0,0,0,.2);color:#fff}.tabulator .tabulator-col-resize-handle{position:absolute;right:0;top:0;bottom:0;width:5px}.tabulator .tabulator-col-resize-handle.prev{left:0;right:auto}.tabulator .tabulator-col-resize-handle:hover{cursor:ew-resize}.tabulator .tabulator-loader{position:absolute;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;top:0;left:0;z-index:3;height:100%;width:100%;background:rgba(0,0,0,.4);text-align:center}.tabulator .tabulator-loader .tabulator-loader-msg{display:inline-block;margin:0 auto;padding:10px 20px;border-radius:10px;background:#fff;font-weight:700;font-size:16px}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-loading{border:4px solid #333;color:#000}.tabulator .tabulator-loader .tabulator-loader-msg.tabulator-error{border:4px solid #d00;color:#590000}.tabulator-row{position:relative;box-sizing:border-box;min-height:22px;background-color:#fff}.tabulator-row.tabulator-row-even{background-color:#efefef}.tabulator-row.tabulator-selectable:hover{background-color:#bbb;cursor:pointer}.tabulator-row.tabulator-selected{background-color:#9abcea}.tabulator-row.tabulator-selected:hover{background-color:#769bcc;cursor:pointer}.tabulator-row.tabulator-row-moving{border:1px solid #000;background:#fff}.tabulator-row.tabulator-moving{position:absolute;border-top:1px solid #aaa;border-bottom:1px solid #aaa;pointer-events:none!important;z-index:2}.tabulator-row .tabulator-row-resize-handle{position:absolute;right:0;bottom:0;left:0;height:5px}.tabulator-row .tabulator-row-resize-handle.prev{top:0;bottom:auto}.tabulator-row .tabulator-row-resize-handle:hover{cursor:ns-resize}.tabulator-row .tabulator-frozen{display:inline-block;position:absolute;background-color:inherit;z-index:1}.tabulator-row .tabulator-frozen.tabulator-frozen-left{border-right:2px solid #aaa}.tabulator-row .tabulator-frozen.tabulator-frozen-right{border-left:2px solid #aaa}.tabulator-row .tabulator-responsive-collapse{box-sizing:border-box;padding:5px;border-top:1px solid #aaa;border-bottom:1px solid #aaa}.tabulator-row .tabulator-responsive-collapse:empty{display:none}.tabulator-row .tabulator-responsive-collapse table{font-size:14px}.tabulator-row .tabulator-responsive-collapse table tr td{position:relative}.tabulator-row .tabulator-responsive-collapse table tr td:first-of-type{padding-right:10px}.tabulator-row .tabulator-cell{display:inline-block;position:relative;box-sizing:border-box;padding:6px;border-right:1px solid #aaa;vertical-align:middle;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tabulator-row .tabulator-cell.tabulator-editing{border:1px solid #1d68cd;padding:0}.tabulator-row .tabulator-cell.tabulator-editing input,.tabulator-row .tabulator-cell.tabulator-editing select{border:1px;background:transparent}.tabulator-row .tabulator-cell.tabulator-validation-fail{border:1px solid #d00}.tabulator-row .tabulator-cell.tabulator-validation-fail input,.tabulator-row .tabulator-cell.tabulator-validation-fail select{border:1px;background:transparent;color:#d00}.tabulator-row .tabulator-cell:first-child .tabulator-col-resize-handle.prev{display:none}.tabulator-row .tabulator-cell.tabulator-row-handle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box{width:80%}.tabulator-row .tabulator-cell.tabulator-row-handle .tabulator-row-handle-box .tabulator-row-handle-bar{width:100%;height:3px;margin-top:2px;background:#3fb449}.tabulator-row .tabulator-cell .tabulator-data-tree-branch{display:inline-block;vertical-align:middle;height:9px;width:7px;margin-top:-9px;margin-right:5px;border-bottom-left-radius:1px;border-left:2px solid #aaa;border-bottom:2px solid #aaa}.tabulator-row .tabulator-cell .tabulator-data-tree-control{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center;vertical-align:middle;height:11px;width:11px;margin-right:5px;border:1px solid #333;border-radius:2px;background:rgba(0,0,0,.1);overflow:hidden}.tabulator-row .tabulator-cell .tabulator-data-tree-control:hover{cursor:pointer;background:rgba(0,0,0,.2)}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse{display:inline-block;position:relative;height:7px;width:1px;background:transparent}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-collapse:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand{display:inline-block;position:relative;height:7px;width:1px;background:#333}.tabulator-row .tabulator-cell .tabulator-data-tree-control .tabulator-data-tree-control-expand:after{position:absolute;content:"";left:-3px;top:3px;height:1px;width:7px;background:#333}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:none;-o-user-select:none;height:15px;width:15px;border-radius:20px;background:#666;color:#fff;font-weight:700;font-size:1.1em}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle:hover{opacity:.7}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-close{display:initial}.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle.open .tabulator-responsive-collapse-toggle-open,.tabulator-row .tabulator-cell .tabulator-responsive-collapse-toggle .tabulator-responsive-collapse-toggle-close{display:none}.tabulator-row.tabulator-group{box-sizing:border-box;border-right:1px solid #aaa;border-top:1px solid #000;border-bottom:2px solid #3fb449;padding:5px;padding-left:10px;background:#222;color:#fff;font-weight:700;min-width:100%}.tabulator-row.tabulator-group:hover{cursor:pointer;background-color:#090909}.tabulator-row.tabulator-group.tabulator-group-visible .tabulator-arrow{margin-right:10px;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #3fb449;border-bottom:0}.tabulator-row.tabulator-group.tabulator-group-level-1 .tabulator-arrow{margin-left:20px}.tabulator-row.tabulator-group.tabulator-group-level-2 .tabulator-arrow{margin-left:40px}.tabulator-row.tabulator-group.tabulator-group-level-3 .tabulator-arrow{margin-left:60px}.tabulator-row.tabulator-group.tabulator-group-level-4 .tabulator-arrow{margin-left:80px}.tabulator-row.tabulator-group.tabulator-group-level-5 .tabulator-arrow{margin-left:100px}.tabulator-row.tabulator-group .tabulator-arrow{display:inline-block;width:0;height:0;margin-right:16px;border-top:6px solid transparent;border-bottom:6px solid transparent;border-right:0;border-left:6px solid #3fb449;vertical-align:middle}.tabulator-row.tabulator-group span{margin-left:10px;color:#3fb449}.tabulator-edit-select-list{position:absolute;display:inline-block;box-sizing:border-box;max-height:200px;background:#fff;border:1px solid #aaa;font-size:14px;overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:4}.tabulator-edit-select-list .tabulator-edit-select-list-item{padding:4px;color:#333}.tabulator-edit-select-list .tabulator-edit-select-list-item.active{color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-item:hover{cursor:pointer;color:#fff;background:#1d68cd}.tabulator-edit-select-list .tabulator-edit-select-list-group{border-bottom:1px solid #aaa;padding:4px;padding-top:6px;color:#333;font-weight:700} -/*# sourceMappingURL=tabulator_site.min.css.map */ diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_site.min.css.map b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_site.min.css.map deleted file mode 100644 index 39e4544875..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/css/tabulator_site.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["tabulator_site.scss"],"names":[],"mappings":"AAyCA,WACC,kBAAkB,AAElB,6BAvCgB,AAyChB,sBA1CqB,AA4CrB,eA1Ca,AA2Cb,gBAAgB,AAChB,gBAAe,AAMf,uBAAwB,CAwexB,AAvfD,iFAoBI,cAAc,CACd,AArBJ,oFA6BK,iBAAkB,CAClB,AA9BL,kCAqCE,yBAAiB,AAAjB,sBAAiB,AAAjB,qBAAiB,AAAjB,gBAAiB,CACjB,AAtCF,6BA6CE,WAAU,AAEV,gCA5E2B,AA8E3B,WAhFmB,AAiFnB,gBAAgB,AAEhB,mBAAmB,AAGnB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CA8OpB,AAxSF,yEA0CE,kBAAiB,AACjB,sBAAsB,AAKtB,sBAhFyB,AAqFzB,eAAe,CArDjB,AA0PG,4CA5LA,qBAAoB,AAIpB,4BAhGoB,AAkGpB,gBAAe,AACf,qBAAsB,CAqLtB,AA1PH,6DAyEI,kBAAkB,AAClB,yBAvGyB,AAwGzB,mBAA8C,AAC9C,mBAAoB,CACpB,AA7EJ,mEAiFI,sBAAqB,AACrB,kBAAkB,AAClB,WAAW,CAsCX,AAzHJ,wFAuFK,sBAAqB,AACrB,WAAW,AAEX,mBAAmB,AACnB,gBAAgB,AAChB,uBAAuB,AACvB,qBAAqB,CAarB,AA1GL,gHAiGM,sBAAsB,AACtB,WAAW,AAEX,sBAAqB,AAErB,YAAW,AAEX,eAAgB,CAChB,AAzGN,oFA8GK,qBAAqB,AACrB,kBAAkB,AAClB,SAAQ,AACR,UAAS,AACT,QAAQ,AACR,SAAS,AACT,kCAAkC,AAClC,mCAAmC,AACnC,4BA9ImB,CA+InB,AAvHL,0FAgIK,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AAEb,0BAjKkB,AAkKlB,eAAgB,CAKhB,AAzIL,oHAuIM,iBAAiB,CACjB,AAxIN,0FA+IK,YAAa,CACb,AAhJL,+DAqJI,kBAAkB,AAClB,gCAAmD,AACnD,qBArLmB,CAsLnB,AAxJJ,qEA4JI,kBAAkB,AAClB,sBAAsB,AACtB,eAAc,AACd,WAAU,AACV,iBAAkB,CAiBlB,AAjLJ,8EAoKK,qBAAsB,CACtB,AArKL,yEAwKK,cAAe,CACf,AAzKL,sFA6KO,QAAS,AACT,QAAS,CACV,AA/KN,oFAsLK,kBAAkB,CAClB,AAvLL,qEA0LK,eAAc,AACd,wBAAoD,CACpD,AA5LL,uHAgMM,gBAAgB,AAChB,4BAzNkB,CA0NlB,AAlMN,sHAuMM,gBAAgB,AAChB,+BAjOmB,CAkOnB,AAzMN,uHA8MM,6BAvOmB,AAwOnB,kBAAmB,CACnB,AAhNN,+GAuNM,iCAAyB,AAAzB,uBAAyB,AAAzB,yBAAyB,AACzB,uBAAuB,AAEvB,oBAAY,AAAZ,aAAY,AACZ,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,sBAAsB,CACtB,AA7NN,oHAkOM,wBAAyB,CACzB,AAnON,2GAwOM,gBAAe,AACf,gBAAgB,CAChB,AA1ON,uIA8OO,gBAAe,AACf,mBAAmB,CACnB,AAhPP,uGAqPM,qBAAqB,CACrB,AAtPN,+CA6PG,qBAAqB,AACrB,kBAAkB,AAIlB,SAAW,CASX,AA3QH,qEAqQI,2BAxRgB,CAyRhB,AAtQJ,sEAyQI,0BA5RgB,CA6RhB,AA1QJ,qDA8QG,sBAAqB,AACrB,eAAc,AAEd,6BAA0D,AAU1D,0BA9SiB,AAiTjB,eAAgB,CAChB,AA/RH,oEAoRI,4BAA0D,CAK1D,AAzRJ,iGAuRK,YAAa,CACb,AAxRL,2DAkSG,cAAc,CAKd,AAvSH,iEAqSI,YAAa,CACb,AAtSJ,kCA4SE,kBAAiB,AACjB,WAAU,AACV,mBAAmB,AACnB,cAAa,AACb,gCAAiC,CAkDjC,AAlWF,wCAmTG,YAAa,CACb,AApTH,yDAwTG,sBAAqB,AACrB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AASlB,UAAU,CAYV,AA/UH,wFA6TI,kBAAkB,AAClB,MAAK,AACL,OAAM,AACN,WAAW,CACX,AAjUJ,8DAsUI,qBAAqB,AAErB,cAAa,AACb,aAAY,AAEZ,cAxWyB,AAyWzB,gBAAiB,AACjB,cAAe,CACf,AA9UJ,mDAmVG,kBAAiB,AACjB,qBAAoB,AACpB,sBA1WqB,AA2WrB,mBAAmB,AACnB,iBAAgB,AAChB,UA1We,CAmXf,AAjWH,kFA4VK,gBAAiB,AACjB,6BAA0D,AAC1D,UA7XgB,CA8XhB,AA/VL,6BAuWE,iBAAgB,AAChB,gBAAe,AACf,6BA9W2B,AA+W3B,sBAlXyB,AAmXzB,iBAAgB,AAChB,WAnXmB,AAoXnB,gBAAgB,AAChB,mBAAkB,AAClB,qBAAgB,AAAhB,iBAAgB,AAEhB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAqEpB,AAzbF,qDAuXG,sBAAqB,AACrB,wBAAuB,AACvB,sBAA2B,AAE3B,gBAAgB,AAEhB,6BAA0D,AAY1D,6BA5ZiB,AA8ZjB,eAAgB,CAMhB,AAjZH,oEAgYI,6BAA0D,AAC1D,oBAAiC,CAKjC,AAtYJ,iGAoYK,YAAa,CACb,AArYL,gEA8YI,mBAAkB,AAClB,kBAAkB,CAClB,AAhZJ,8CAqZG,YAAY,CACZ,AAtZH,6CA0ZG,qBAAoB,AAEpB,aAAY,AACZ,gBAAe,AAEf,sBAraoB,AAsapB,kBAAiB,AAEjB,gBAAe,AAEf,WA3akB,AA4alB,oBAAmB,AACnB,oBAAmB,AACnB,iBAAiB,CAiBjB,AAxbH,oDA0aI,aA/ayB,CAgbzB,AA3aJ,sDA8aI,UAAU,CACV,AA/aJ,kEAmbK,eAAc,AACd,0BAAyB,AACzB,UAAU,CACV,AAtbL,wCA6bE,kBAAiB,AACjB,QAAO,AACP,MAAK,AACL,SAAQ,AACR,SAAS,CAUT,AA3cF,6CAocG,OAAM,AACN,UAAU,CACV,AAtcH,8CAycG,gBAAgB,CAChB,AA1cH,6BAgdE,kBAAiB,AACjB,oBAAa,AAAb,aAAa,AACb,sBAAkB,AAAlB,mBAAkB,AAElB,MAAK,AACL,OAAM,AACN,UAAW,AAEX,YAAW,AACX,WAAU,AACV,0BAAyB,AACzB,iBAAiB,CA2BjB,AAtfF,mDA+dG,qBAAoB,AAEpB,cAAa,AACb,kBAAiB,AAEjB,mBAAkB,AAElB,gBAAe,AACf,gBAAgB,AAChB,cAAc,CAad,AArfH,qEA4eI,sBAAqB,AACrB,UAAU,CACV,AA9eJ,mEAkfI,sBAAqB,AACrB,aAAa,CACb,AAMJ,eACC,kBAAkB,AAClB,sBAAsB,AACtB,gBAA0C,AAC1C,qBAnhBuB,CAi4BvB,AAlXD,kCAQE,wBAthB4B,CAuhB5B,AATF,0CAYE,sBAvhBsB,AAwhBtB,cAAe,CACf,AAdF,kCAiBE,wBA1hB6B,CA2hB7B,AAlBF,wCAqBE,yBA7hBkC,AA8hBlC,cAAe,CACf,AAvBF,oCA0BE,sBAAqB,AACrB,eAAe,CACf,AA5BF,gCA+BE,kBAAkB,AAElB,0BA9iBkB,AA+iBlB,6BA/iBkB,AAijBlB,8BAA+B,AAC/B,SAAU,CACV,AAtCF,4CA0CE,kBAAiB,AACjB,QAAO,AACP,SAAQ,AACR,OAAM,AACN,UAAU,CAUV,AAxDF,iDAiDG,MAAK,AACL,WAAW,CACX,AAnDH,kDAsDG,gBAAgB,CAChB,AAvDH,iCA2DE,qBAAqB,AACrB,kBAAkB,AAElB,yBAAyB,AAEzB,SAAW,CASX,AAzEF,uDAmEG,2BAhlBiB,CAilBjB,AApEH,wDAuEG,0BAplBiB,CAqlBjB,AAxEH,8CA4EE,sBAAqB,AAErB,YAAW,AAEX,0BA7lBkB,AA8lBlB,4BA9lBkB,CAinBlB,AApGF,oDAoFG,YAAY,CACZ,AArFH,oDAwFG,cArnBW,CAgoBX,AAnGH,0DA4FK,iBAAkB,CAKlB,AAjGL,wEA+FM,kBAAkB,CAClB,AAhGN,+BAwGE,qBAAoB,AACpB,kBAAkB,AAClB,sBAAqB,AACrB,YAAW,AACX,4BAznBkB,AA0nBlB,sBAAqB,AACrB,mBAAkB,AAClB,gBAAe,AACf,sBAAsB,CAkLtB,AAlSF,iDAoHG,yBA1nBkB,AA2nBlB,SAAU,CAMV,AA3HH,+GAwHI,WAAU,AACV,sBAAsB,CACtB,AA1HJ,yDA8HG,qBAnoBgB,CA0oBhB,AArIH,+HAgII,WAAU,AACV,uBAAsB,AAEtB,UAxoBe,CAyoBf,AApIJ,6EA0II,YAAa,CACb,AA3IJ,oDAiJG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAElB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,mBAAoB,CAcpB,AArKH,8EA2JI,SAAS,CAST,AApKJ,wGA+JK,WAAU,AACV,WAAU,AACV,eAAc,AACd,kBArrBoB,CAsrBpB,AAnKL,2DAwKG,qBAAoB,AACpB,sBAAqB,AAErB,WAAU,AACV,UAAS,AAET,gBAAe,AACf,iBAAgB,AAEhB,8BAA6B,AAE7B,2BAhsBiB,AAisBjB,4BAjsBiB,CAksBjB,AArLH,4DAyLG,2BAAmB,AAAnB,oBAAmB,AACnB,qBAAsB,AAAtB,uBAAsB,AACtB,sBAAkB,AAAlB,mBAAkB,AAClB,sBAAqB,AAErB,YAAW,AACX,WAAU,AAEV,iBAAgB,AAEhB,sBA/sBe,AAgtBf,kBAAiB,AACjB,0BAA4B,AAE5B,eAAe,CAmDf,AA1PH,kEA0MI,eAAc,AACd,yBAA4B,CAC5B,AA5MJ,kGA+MI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,sBAAuB,CAavB,AAlOJ,wGAwNK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eA5uBa,CA6uBb,AAjOL,gGAqOI,qBAAoB,AACpB,kBAAkB,AAElB,WAAW,AACX,UAAU,AAEV,eAvvBc,CAowBd,AAxPJ,sGA8OK,kBAAkB,AAClB,WAAW,AACX,UAAU,AACV,QAAQ,AAER,WAAW,AACX,UAAU,AAEV,eAlwBa,CAmwBb,AAvPL,qEA6PG,2BAAoB,AAApB,oBAAoB,AACpB,sBAAkB,AAAlB,mBAAkB,AAClB,qBAAsB,AAAtB,uBAAsB,AAEtB,sBAAsB,AACtB,wBAAwB,AACxB,yBAAyB,AACzB,oBAAoB,AAEpB,YAAW,AACX,WAAU,AAEV,mBAAkB,AAClB,gBAAe,AAEf,WA3xBqB,AA4xBrB,gBAAgB,AAChB,eAAe,CAmBf,AAjSH,2EAiRI,UAAU,CACV,AAlRJ,sHAsRK,eAAe,CACf,AAvRL,sOA+RI,YAAY,CACZ,AAhSJ,+BAsSE,sBAAqB,AACrB,4BApzBkB,AAqzBlB,0BAAyB,AACzB,gCAh0B2B,AAi0B3B,YAAW,AACX,kBAAiB,AACjB,gBAt0ByB,AAu0BzB,WAt0BmB,AAu0BnB,gBAAgB,AAEhB,cAAe,CAgEf,AAhXF,qCAmTG,eAAc,AACd,wBAAoD,CACpD,AArTH,wEAyTI,kBAAiB,AACjB,kCAAkC,AAClC,mCAAmC,AACnC,6BA/0BqB,AAg1BrB,eAAgB,CAChB,AA9TJ,wEAmUI,gBAAgB,CAChB,AApUJ,wEAyUI,gBAAgB,CAChB,AA1UJ,wEA+UI,gBAAgB,CAChB,AAhVJ,wEAqVI,gBAAgB,CAChB,AAtVJ,wEA2VI,iBAAiB,CACjB,AA5VJ,gDAiWG,qBAAqB,AACrB,QAAQ,AACR,SAAS,AACT,kBAAiB,AACjB,iCAAiC,AACjC,oCAAoC,AACpC,eAAe,AACf,8BA33BsB,AA43BtB,qBAAqB,CACrB,AA1WH,oCA6WG,iBAAgB,AAChB,aAr4B0B,CAs4B1B,AAKH,4BACC,kBAAkB,AAClB,qBAAoB,AACpB,sBAAqB,AAErB,iBAAgB,AAEhB,gBA14BuB,AA24BvB,sBAz4BmB,AA24BnB,eA35Ba,AA65Bb,gBAAe,AACf,iCAAiC,AAEjC,SAAc,CA6Bd,AA5CD,6DAkBE,YAAW,AAEX,UAp5BgB,CAi6BhB,AAjCF,oEAuBG,WA15BqB,AA25BrB,kBAl5BkB,CAm5BlB,AAzBH,mEA4BG,eAAc,AAEd,WAj6BqB,AAk6BrB,kBAz5BkB,CA05BlB,AAhCH,8DAoCE,6BAr6BkB,AAu6BlB,YAAW,AACX,gBAAe,AAEf,WAz6BgB,AA06BhB,eAAgB,CAChB","file":"tabulator_site.min.css","sourcesContent":["/* Tabulator v4.1.2 (c) Oliver Folkerd */\n\n\r\n//Main Theme Variables\r\n$backgroundColor: #fff !default; //background color of tabulator\r\n$borderColor:#222 !default; //border to tabulator\r\n$textSize:14px !default; //table text size\r\n\r\n//header themeing\r\n$headerBackgroundColor:#222 !default; //border to tabulator\r\n$headerTextColor:#fff !default; //header text colour\r\n$headerBorderColor:#aaa !default; //header border color\r\n$headerSeperatorColor:#3FB449 !default; //header bottom seperator color\r\n$headerMargin:4px !default; //padding round header\r\n\r\n//column header arrows\r\n$sortArrowActive: #3FB449 !default;\r\n$sortArrowInactive: #bbb !default;\r\n\r\n//row themeing\r\n$rowBackgroundColor:#fff !default; //table row background color\r\n$rowAltBackgroundColor:#EFEFEF !default; //table row background color\r\n$rowBorderColor:#aaa !default; //table border color\r\n$rowTextColor:#333 !default; //table text color\r\n$rowHoverBackground:#bbb !default; //row background color on hover\r\n\r\n$rowSelectedBackground: #9ABCEA !default; //row background color when selected\r\n$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered\r\n\r\n$editBoxColor:#1D68CD !default; //border color for edit boxes\r\n$errorColor:#dd0000 !default; //error indication\r\n\r\n//footer themeing\r\n$footerBackgroundColor:#222 !default; //border to tabulator\r\n$footerTextColor:#222 !default; //footer text colour\r\n$footerBorderColor:#aaa !default; //footer border color\r\n$footerSeperatorColor:#3FB449 !default; //footer bottom seperator color\r\n$footerActiveColor:$footerSeperatorColor !default; //footer bottom active text color\r\n\r\n\r\n//Tabulator Containing Element\r\n.tabulator{\r\n\tposition: relative;\r\n\r\n\tborder-bottom: 5px solid $borderColor;\r\n\r\n\tbackground-color: $backgroundColor;\r\n\r\n\tfont-size:$textSize;\r\n\ttext-align: left;\r\n\toverflow:hidden;\r\n\r\n\t-webkit-transform: translatez(0);\r\n\t-moz-transform: translatez(0);\r\n\t-ms-transform: translatez(0);\r\n\t-o-transform: translatez(0);\r\n\ttransform: translatez(0);\r\n\r\n\t&[tabulator-layout=\"fitDataFill\"]{\r\n\t\t.tabulator-tableHolder{\r\n\t\t\t.tabulator-table{\r\n\t\t\t\tmin-width:100%;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t&[tabulator-layout=\"fitColumns\"]{\r\n\t\t.tabulator-row{\r\n\t\t\t.tabulator-cell{\r\n\t\t\t\t&:last-of-type{\r\n\t\t\t\t\tborder-right: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t&.tabulator-block-select{\r\n\t\tuser-select: none;\r\n\t}\r\n\r\n\t//column header containing element\r\n\t.tabulator-header{\r\n\t\tposition:relative;\r\n\t\tbox-sizing: border-box;\r\n\r\n\t\twidth:100%;\r\n\r\n\t\tborder-bottom:3px solid $headerSeperatorColor;\r\n\t\tbackground-color: $headerBackgroundColor;\r\n\t\tcolor: $headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:hidden;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t//individual column header element\r\n\t\t.tabulator-col{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tposition:relative;\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tborder-right:1px solid $headerBorderColor;\r\n\t\t\tbackground-color: $headerBackgroundColor;\r\n\t\t\ttext-align:left;\r\n\t\t\tvertical-align: bottom;\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&.tabulator-moving{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tborder:1px solid $headerSeperatorColor;\r\n\t\t\t\tbackground:darken($headerBackgroundColor, 10%);\r\n\t\t\t\tpointer-events: none;\r\n\t\t\t}\r\n\r\n\t\t\t//hold content of column header\r\n\t\t\t.tabulator-col-content{\r\n\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tpadding:8px;\r\n\r\n\t\t\t\t//hold title of column header\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tbox-sizing:border-box;\r\n\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\twhite-space: nowrap;\r\n\t\t\t\t\toverflow: hidden;\r\n\t\t\t\t\ttext-overflow: ellipsis;\r\n\t\t\t\t\tvertical-align:bottom;\r\n\r\n\t\t\t\t\t//element to hold title editor\r\n\t\t\t\t\t.tabulator-title-editor{\r\n\t\t\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\t\t\twidth: 100%;\r\n\r\n\t\t\t\t\t\tborder:1px solid #999;\r\n\r\n\t\t\t\t\t\tpadding:1px;\r\n\r\n\t\t\t\t\t\tbackground: #fff;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//column sorter arrow\r\n\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\tdisplay: inline-block;\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\ttop:14px;\r\n\t\t\t\t\tright:8px;\r\n\t\t\t\t\twidth: 0;\r\n\t\t\t\t\theight: 0;\r\n\t\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\r\n\t\t\t//complex header column group\r\n\t\t\t&.tabulator-col-group{\r\n\r\n\t\t\t\t//gelement to hold sub columns in column group\r\n\t\t\t\t.tabulator-col-group-cols{\r\n\t\t\t\t\tposition:relative;\r\n\t\t\t\t\tdisplay: flex;\r\n\r\n\t\t\t\t\tborder-top:1px solid $headerBorderColor;\r\n\t\t\t\t\toverflow: hidden;\r\n\r\n\t\t\t\t\t.tabulator-col:last-child{\r\n\t\t\t\t\t\tmargin-right:-1px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//hide left resize handle on first column\r\n\t\t\t&:first-child{\r\n\t\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//placeholder element for sortable columns\r\n\t\t\t&.ui-sortable-helper{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\tbackground-color: $headerBackgroundColor !important;\r\n\t\t\t\tborder:1px solid $headerBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t//header filter containing element\r\n\t\t\t.tabulator-header-filter{\r\n\t\t\t\tposition: relative;\r\n\t\t\t\tbox-sizing: border-box;\r\n\t\t\t\tmargin-top:2px;\r\n\t\t\t\twidth:100%;\r\n\t\t\t\ttext-align: center;\r\n\r\n\t\t\t\t//styling adjustment for inbuilt editors\r\n\t\t\t\ttextarea{\r\n\t\t\t\t\theight:auto !important;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsvg{\r\n\t\t\t\t\tmargin-top: 3px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tinput{\r\n\t\t\t\t\t&::-ms-clear {\r\n\t\t\t\t\t width : 0;\r\n\t\t\t\t\t height: 0;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//styling child elements for sortable columns\r\n\t\t\t&.tabulator-sortable{\r\n\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\tpadding-right:25px;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"none\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowInactive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"asc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: none;\r\n\t\t\t\t\t\tborder-bottom: 6px solid $sortArrowActive;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&[aria-sort=\"desc\"]{\r\n\t\t\t\t\t.tabulator-col-content .tabulator-arrow{\r\n\t\t\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\t\t\tborder-bottom: none;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-col-vertical{\r\n\t\t\t\t.tabulator-col-content{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\twriting-mode: vertical-rl;\r\n\t\t\t\t\t\ttext-orientation: mixed;\r\n\r\n\t\t\t\t\t\tdisplay:flex;\r\n\t\t\t\t\t\talign-items:center;\r\n\t\t\t\t\t\tjustify-content:center;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\ttransform: rotate(180deg);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t&.tabulator-sortable{\r\n\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\tpadding-top:20px;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t&.tabulator-col-vertical-flip{\r\n\t\t\t\t\t\t.tabulator-col-title{\r\n\t\t\t\t\t\t\tpadding-right:0;\r\n\t\t\t\t\t\t\tpadding-bottom:20px;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t.tabulator-arrow{\r\n\t\t\t\t\t\tright:calc(50% - 6px);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\tposition: absolute;\r\n\r\n\t\t\t// background-color: inherit;\r\n\r\n\t\t\tz-index: 10;\r\n\r\n\t\t\t&.tabulator-frozen-left{\r\n\t\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\r\n\t\t\t&.tabulator-frozen-right{\r\n\t\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tmin-width:400%;\r\n\r\n\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($headerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tborder-top:1px solid $rowBorderColor;\r\n\t\t\t// border-bottom:1px solid $headerBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\t\t}\r\n\r\n\t\t.tabulator-frozen-rows-holder{\r\n\t\t\tmin-width:400%;\r\n\r\n\t\t\t&:empty{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//scrolling element to hold table\r\n\t.tabulator-tableHolder{\r\n\t\tposition:relative;\r\n\t\twidth:100%;\r\n\t\twhite-space: nowrap;\r\n\t\toverflow:auto;\r\n\t\t-webkit-overflow-scrolling: touch;\r\n\r\n\t\t&:focus{\r\n\t\t\toutline: none;\r\n\t\t}\r\n\r\n\t\t//default placeholder element\r\n\t\t.tabulator-placeholder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t&[tabulator-render-mode=\"virtual\"]{\r\n\t\t\t\tposition: absolute;\r\n\t\t\t\ttop:0;\r\n\t\t\t\tleft:0;\r\n\t\t\t\theight:100%;\r\n\t\t\t}\r\n\r\n\t\t\twidth:100%;\r\n\r\n\t\t\tspan{\r\n\t\t\t\tdisplay: inline-block;\r\n\r\n\t\t\t\tmargin:0 auto;\r\n\t\t\t\tpadding:10px;\r\n\r\n\t\t\t\tcolor:$headerSeperatorColor;\r\n\t\t\t\tfont-weight: bold;\r\n\t\t\t\tfont-size: 20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//element to hold table rows\r\n\t\t.tabulator-table{\r\n\t\t\tposition:relative;\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tbackground-color:$rowBackgroundColor;\r\n\t\t\twhite-space: nowrap;\r\n\t\t\toverflow:visible;\r\n\t\t\tcolor:$rowTextColor;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\t&.tabulator-calcs{\r\n\t\t\t\t\tfont-weight: bold;\r\n\t\t\t\t\tbackground:lighten($headerBackgroundColor, 15%) !important;\r\n\t\t\t\t\tcolor:$headerTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//footer element\r\n\t.tabulator-footer{\r\n\t\tpadding:5px 10px;\r\n\t\tpadding-top:8px;\r\n\t\tborder-top:3px solid $footerSeperatorColor;\r\n\t\tbackground-color: $footerBackgroundColor;\r\n\t\ttext-align:right;\r\n\t\tcolor: $footerTextColor;\r\n\t\tfont-weight:bold;\r\n\t\twhite-space:nowrap;\r\n\t\tuser-select:none;\r\n\r\n\t\t-moz-user-select: none;\r\n\t\t-khtml-user-select: none;\r\n\t\t-webkit-user-select: none;\r\n\t\t-o-user-select: none;\r\n\r\n\t\t.tabulator-calcs-holder{\r\n\t\t\tbox-sizing:border-box;\r\n\t\t\twidth:calc(100% + 20px);\r\n\t\t\tmargin:-8px -10px 8px -10px;\r\n\r\n\t\t\ttext-align: left;\r\n\r\n\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\r\n\t\t\t.tabulator-row{\r\n\t\t\t\tbackground:lighten($footerBackgroundColor, 10%) !important;\r\n\t\t\t\tcolor:$headerTextColor !important;\r\n\r\n\t\t\t\t.tabulator-col-resize-handle{\r\n\t\t\t\t\tdisplay: none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// border-top:1px solid $rowBorderColor;\r\n\t\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t\toverflow: hidden;\r\n\r\n\t\t\t&:only-child{\r\n\t\t\t\tmargin-bottom:-5px;\r\n\t\t\t\tborder-bottom:none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//pagination container element\r\n\t\t.tabulator-pages{\r\n\t\t\tmargin:0 7px;\r\n\t\t}\r\n\r\n\t\t//pagination button\r\n\t\t.tabulator-page{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 2px;\r\n\t\t\tpadding:2px 5px;\r\n\r\n\t\t\tborder:1px solid $footerBorderColor;\r\n\t\t\tborder-radius:3px;\r\n\r\n\t\t\tbackground:#fff;\r\n\r\n\t\t\tcolor: $footerTextColor;\r\n\t\t\tfont-family:inherit;\r\n\t\t\tfont-weight:inherit;\r\n\t\t\tfont-size:inherit;\r\n\r\n\t\t\t&.active{\r\n\t\t\t\tcolor:$footerActiveColor;\r\n\t\t\t}\r\n\r\n\t\t\t&:disabled{\r\n\t\t\t\topacity:.5;\r\n\t\t\t}\r\n\r\n\t\t\t&:not(.disabled){\r\n\t\t\t\t&:hover{\r\n\t\t\t\t\tcursor:pointer;\r\n\t\t\t\t\tbackground:rgba(0,0,0,.2);\r\n\t\t\t\t\tcolor:#fff;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//column resize handles\r\n\t.tabulator-col-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\ttop:0;\r\n\t\tbottom:0;\r\n\t\twidth:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\tleft:0;\r\n\t\t\tright:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ew-resize;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//holding div that contains loader and covers tabulator element to prevent interaction\r\n\t.tabulator-loader{\r\n\t\tposition:absolute;\r\n\t\tdisplay: flex;\r\n\t\talign-items:center;\r\n\r\n\t\ttop:0;\r\n\t\tleft:0;\r\n\t\tz-index:100;\r\n\r\n\t\theight:100%;\r\n\t\twidth:100%;\r\n\t\tbackground:rgba(0,0,0,.4);\r\n\t\ttext-align:center;\r\n\r\n\t\t//loading message element\r\n\t\t.tabulator-loader-msg{\r\n\t\t\tdisplay:inline-block;\r\n\r\n\t\t\tmargin:0 auto;\r\n\t\t\tpadding:10px 20px;\r\n\r\n\t\t\tborder-radius:10px;\r\n\r\n\t\t\tbackground:#fff;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:16px;\r\n\r\n\t\t\t//loading message\r\n\t\t\t&.tabulator-loading{\r\n\t\t\t\tborder:4px solid #333;\r\n\t\t\t\tcolor:#000;\r\n\t\t\t}\r\n\r\n\t\t\t//error message\r\n\t\t\t&.tabulator-error{\r\n\t\t\t\tborder:4px solid #D00;\r\n\t\t\t\tcolor:#590000;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n//row element\r\n.tabulator-row{\r\n\tposition: relative;\r\n\tbox-sizing: border-box;\r\n\tmin-height:$textSize + ($headerMargin * 2);\r\n\tbackground-color: $rowBackgroundColor;\r\n\r\n\r\n\t&.tabulator-row-even{\r\n\t\tbackground-color: $rowAltBackgroundColor;\r\n\t}\r\n\r\n\t&.tabulator-selectable:hover{\r\n\t\tbackground-color:$rowHoverBackground;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-selected{\r\n\t\tbackground-color:$rowSelectedBackground;\r\n\t}\r\n\r\n\t&.tabulator-selected:hover{\r\n\t\tbackground-color:$rowSelectedBackgroundHover;\r\n\t\tcursor: pointer;\r\n\t}\r\n\r\n\t&.tabulator-row-moving{\r\n\t\tborder:1px solid #000;\r\n\t\tbackground:#fff;\r\n\t}\r\n\r\n\t&.tabulator-moving{\r\n\t\tposition: absolute;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpointer-events: none !important;\r\n\t\tz-index:15;\r\n\t}\r\n\r\n\t//row resize handles\r\n\t.tabulator-row-resize-handle{\r\n\t\tposition:absolute;\r\n\t\tright:0;\r\n\t\tbottom:0;\r\n\t\tleft:0;\r\n\t\theight:5px;\r\n\r\n\t\t&.prev{\r\n\t\t\ttop:0;\r\n\t\t\tbottom:auto;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:ns-resize;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-frozen{\r\n\t\tdisplay: inline-block;\r\n\t\tposition: absolute;\r\n\r\n\t\tbackground-color: inherit;\r\n\r\n\t\tz-index: 10;\r\n\r\n\t\t&.tabulator-frozen-left{\r\n\t\t\tborder-right:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t&.tabulator-frozen-right{\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-responsive-collapse{\r\n\t\tbox-sizing:border-box;\r\n\r\n\t\tpadding:5px;\r\n\r\n\t\tborder-top:1px solid $rowBorderColor;\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\t&:empty{\r\n\t\t\tdisplay:none;\r\n\t\t}\r\n\r\n\t\ttable{\r\n\t\t\tfont-size:$textSize;\r\n\r\n\t\t\ttr{\r\n\t\t\t\ttd{\r\n\t\t\t\t\tposition: relative;\r\n\r\n\t\t\t\t\t&:first-of-type{\r\n\t\t\t\t\t\tpadding-right:10px;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//cell element\r\n\t.tabulator-cell{\r\n\t\tdisplay:inline-block;\r\n\t\tposition: relative;\r\n\t\tbox-sizing:border-box;\r\n\t\tpadding:6px;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tvertical-align:middle;\r\n\t\twhite-space:nowrap;\r\n\t\toverflow:hidden;\r\n\t\ttext-overflow:ellipsis;\r\n\r\n\r\n\t\t&.tabulator-editing{\r\n\t\t\tborder:1px solid $editBoxColor;\r\n\t\t\tpadding: 0;\r\n\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-validation-fail{\r\n\t\t\tborder:1px solid $errorColor;\r\n\t\t\tinput, select{\r\n\t\t\t\tborder:1px;\r\n\t\t\t\tbackground:transparent;\r\n\r\n\t\t\t\tcolor: $errorColor;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//hide left resize handle on first column\r\n\t\t&:first-child{\r\n\t\t\t.tabulator-col-resize-handle.prev{\r\n\t\t\t\tdisplay: none;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//movable row handle\r\n\t\t&.tabulator-row-handle{\r\n\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\t//handle holder\r\n\t\t\t.tabulator-row-handle-box{\r\n\t\t\t\twidth:80%;\r\n\r\n\t\t\t\t//Hamburger element\r\n\t\t\t\t.tabulator-row-handle-bar{\r\n\t\t\t\t\twidth:100%;\r\n\t\t\t\t\theight:3px;\r\n\t\t\t\t\tmargin-top:2px;\r\n\t\t\t\t\tbackground:$sortArrowActive;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-branch{\r\n\t\t\tdisplay:inline-block;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:9px;\r\n\t\t\twidth:7px;\r\n\r\n\t\t\tmargin-top:-9px;\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder-bottom-left-radius:1px;\r\n\r\n\t\t\tborder-left:2px solid $rowBorderColor;\r\n\t\t\tborder-bottom:2px solid $rowBorderColor;\r\n\t\t}\r\n\r\n\t\t.tabulator-data-tree-control{\r\n\r\n\t\t\tdisplay:inline-flex;\r\n\t\t\tjustify-content:center;\r\n\t\t\talign-items:center;\r\n\t\t\tvertical-align:middle;\r\n\r\n\t\t\theight:11px;\r\n\t\t\twidth:11px;\r\n\r\n\t\t\tmargin-right:5px;\r\n\r\n\t\t\tborder:1px solid $rowTextColor;\r\n\t\t\tborder-radius:2px;\r\n\t\t\tbackground:rgba(0, 0, 0, .1);\r\n\r\n\t\t\toverflow:hidden;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\tcursor:pointer;\r\n\t\t\t\tbackground:rgba(0, 0, 0, .2);\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-collapse{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: transparent;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-data-tree-control-expand{\r\n\t\t\t\tdisplay:inline-block;\r\n\t\t\t\tposition: relative;\r\n\r\n\t\t\t\theight: 7px;\r\n\t\t\t\twidth: 1px;\r\n\r\n\t\t\t\tbackground: $rowTextColor;\r\n\r\n\t\t\t\t&:after {\r\n\t\t\t\t\tposition: absolute;\r\n\t\t\t\t\tcontent: \"\";\r\n\t\t\t\t\tleft: -3px;\r\n\t\t\t\t\ttop: 3px;\r\n\r\n\t\t\t\t\theight: 1px;\r\n\t\t\t\t\twidth: 7px;\r\n\r\n\t\t\t\t\tbackground: $rowTextColor;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\t.tabulator-responsive-collapse-toggle{\r\n\t\t\tdisplay: inline-flex;\r\n\t\t\talign-items:center;\r\n\t\t\tjustify-content:center;\r\n\r\n\t\t\t-moz-user-select: none;\r\n\t\t\t-khtml-user-select: none;\r\n\t\t\t-webkit-user-select: none;\r\n\t\t\t-o-user-select: none;\r\n\r\n\t\t\theight:15px;\r\n\t\t\twidth:15px;\r\n\r\n\t\t\tborder-radius:20px;\r\n\t\t\tbackground:#666;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tfont-weight:bold;\r\n\t\t\tfont-size:1.1em;\r\n\r\n\t\t\t&:hover{\r\n\t\t\t\topacity:.7;\r\n\t\t\t}\r\n\r\n\t\t\t&.open{\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\t\tdisplay:initial;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t.tabulator-responsive-collapse-toggle-open{\r\n\t\t\t\t\tdisplay:none;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t.tabulator-responsive-collapse-toggle-close{\r\n\t\t\t\tdisplay:none;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//row grouping element\r\n\t&.tabulator-group{\r\n\t\tbox-sizing:border-box;\r\n\t\tborder-right:1px solid $rowBorderColor;\r\n\t\tborder-top:1px solid #000;\r\n\t\tborder-bottom:2px solid $headerSeperatorColor;\r\n\t\tpadding:5px;\r\n\t\tpadding-left:10px;\r\n\t\tbackground:$headerBackgroundColor;\r\n\t\tcolor:$headerTextColor;\r\n\t\tfont-weight:bold;\r\n\r\n\t\tmin-width: 100%;\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\t\t\tbackground-color:darken($headerBackgroundColor, 10%);\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-visible{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-right:10px;\r\n\t\t\t\tborder-left: 6px solid transparent;\r\n\t\t\t\tborder-right: 6px solid transparent;\r\n\t\t\t\tborder-top: 6px solid $sortArrowActive;\r\n\t\t\t\tborder-bottom: 0;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-1{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:20px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-2{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:40px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-3{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:60px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-4{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:80px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t&.tabulator-group-level-5{\r\n\t\t\t.tabulator-arrow{\r\n\t\t\t\tmargin-left:100px;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//sorting arrow\r\n\t\t.tabulator-arrow{\r\n\t\t\tdisplay: inline-block;\r\n\t\t\twidth: 0;\r\n\t\t\theight: 0;\r\n\t\t\tmargin-right:16px;\r\n\t\t\tborder-top: 6px solid transparent;\r\n\t\t\tborder-bottom: 6px solid transparent;\r\n\t\t\tborder-right: 0;\r\n\t\t\tborder-left: 6px solid $sortArrowActive;\r\n\t\t\tvertical-align:middle;\r\n\t\t}\r\n\r\n\t\tspan{\r\n\t\t\tmargin-left:10px;\r\n\t\t\tcolor:$headerSeperatorColor;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\n.tabulator-edit-select-list{\r\n\tposition: absolute;\r\n\tdisplay:inline-block;\r\n\tbox-sizing:border-box;\r\n\r\n\tmax-height:200px;\r\n\r\n\tbackground:$rowBackgroundColor;\r\n\tborder:1px solid $rowBorderColor;\r\n\r\n\tfont-size:$textSize;\r\n\r\n\toverflow-y:auto;\r\n\t-webkit-overflow-scrolling: touch;\r\n\r\n\tz-index: 10000;\r\n\r\n\t.tabulator-edit-select-list-item{\r\n\t\tpadding:4px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\r\n\t\t&.active{\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\r\n\t\t&:hover{\r\n\t\t\tcursor:pointer;\r\n\r\n\t\t\tcolor:$rowBackgroundColor;\r\n\t\t\tbackground:$editBoxColor;\r\n\t\t}\r\n\t}\r\n\r\n\t.tabulator-edit-select-list-group{\r\n\t\tborder-bottom:1px solid $rowBorderColor;\r\n\r\n\t\tpadding:4px;\r\n\t\tpadding-top:6px;\r\n\r\n\t\tcolor:$rowTextColor;\r\n\t\tfont-weight:bold;\r\n\t}\r\n}"]} \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/jquery_wrapper.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/jquery_wrapper.js deleted file mode 100644 index cd36e31085..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/jquery_wrapper.js +++ /dev/null @@ -1,46 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -/* - * This file is part of the Tabulator package. - * - * (c) Oliver Folkerd - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - * Full Documentation & Demos can be found at: http://olifolkerd.github.io/tabulator/ - * - */ - -(function (factory) { - "use strict"; - - if (typeof define === 'function' && define.amd) { - define(['jquery'], factory); - } else if (typeof module !== 'undefined' && module.exports) { - module.exports = factory(require('jquery')); - } else { - factory(jQuery); - } -})(function ($, undefined) { - $.widget("ui.tabulator", { - _create: function _create() { - this.table = new Tabulator(this.element[0], this.options); - - //map tabulator functions to jquery wrapper - for (var key in Tabulator.prototype) { - if (typeof Tabulator.prototype[key] === "function" && key.charAt(0) !== "_") { - this[key] = this.table[key].bind(this.table); - } - } - }, - - _setOption: function _setOption(option, value) { - console.error("Tabulator jQuery wrapper does not support setting options after the table has been instantiated"); - }, - - _destroy: function _destroy(option, value) { - this.table.destroy(); - } - }); -}); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/jquery_wrapper.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/jquery_wrapper.min.js deleted file mode 100644 index 1d9922b9b5..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/jquery_wrapper.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):"undefined"!=typeof module&&module.exports?module.exports=t(require("jquery")):t(jQuery)}(function(t,e){t.widget("ui.tabulator",{_create:function(){this.table=new Tabulator(this.element[0],this.options);for(var t in Tabulator.prototype)"function"==typeof Tabulator.prototype[t]&&"_"!==t.charAt(0)&&(this[t]=this.table[t].bind(this.table))},_setOption:function(t,e){console.error("Tabulator jQuery wrapper does not support setting options after the table has been instantiated")},_destroy:function(t,e){this.table.destroy()}})}); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/accessor.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/accessor.js deleted file mode 100644 index 24899b54e3..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/accessor.js +++ /dev/null @@ -1,91 +0,0 @@ -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var Accessor = function Accessor(table) { - this.table = table; //hold Tabulator object - this.allowedTypes = ["", "data", "download", "clipboard"]; //list of accessor types -}; - -//initialize column accessor -Accessor.prototype.initializeColumn = function (column) { - var self = this, - match = false, - config = {}; - - this.allowedTypes.forEach(function (type) { - var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), - accessor; - - if (column.definition[key]) { - accessor = self.lookupAccessor(column.definition[key]); - - if (accessor) { - match = true; - - config[key] = { - accessor: accessor, - params: column.definition[key + "Params"] || {} - }; - } - } - }); - - if (match) { - column.modules.accessor = config; - } -}, Accessor.prototype.lookupAccessor = function (value) { - var accessor = false; - - //set column accessor - switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { - case "string": - if (this.accessors[value]) { - accessor = this.accessors[value]; - } else { - console.warn("Accessor Error - No such accessor found, ignoring: ", value); - } - break; - - case "function": - accessor = value; - break; - } - - return accessor; -}; - -//apply accessor to row -Accessor.prototype.transformRow = function (dataIn, type) { - var self = this, - key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)); - - //clone data object with deep copy to isolate internal data from returned result - var data = Tabulator.prototype.helpers.deepClone(dataIn || {}); - - self.table.columnManager.traverse(function (column) { - var value, accessor, params, component; - - if (column.modules.accessor) { - - accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false; - - if (accessor) { - value = column.getFieldValue(data); - - if (value != "undefined") { - component = column.getComponent(); - params = typeof accessor.params === "function" ? accessor.params(value, data, type, component) : accessor.params; - column.setFieldValue(data, accessor.accessor(value, data, type, params, component)); - } - } - } - }); - - return data; -}, - -//default accessors -Accessor.prototype.accessors = {}; - -Tabulator.prototype.registerModule("accessor", Accessor); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/accessor.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/accessor.min.js deleted file mode 100644 index f09aa24560..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/accessor.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},Accessor=function(o){this.table=o,this.allowedTypes=["","data","download","clipboard"]};Accessor.prototype.initializeColumn=function(o){var e=this,s=!1,r={};this.allowedTypes.forEach(function(c){var t,a="accessor"+(c.charAt(0).toUpperCase()+c.slice(1));o.definition[a]&&(t=e.lookupAccessor(o.definition[a]))&&(s=!0,r[a]={accessor:t,params:o.definition[a+"Params"]||{}})}),s&&(o.modules.accessor=r)},Accessor.prototype.lookupAccessor=function(o){var e=!1;switch(void 0===o?"undefined":_typeof(o)){case"string":this.accessors[o]?e=this.accessors[o]:console.warn("Accessor Error - No such accessor found, ignoring: ",o);break;case"function":e=o}return e},Accessor.prototype.transformRow=function(o,e){var s=this,r="accessor"+(e.charAt(0).toUpperCase()+e.slice(1)),c=Tabulator.prototype.helpers.deepClone(o||{});return s.table.columnManager.traverse(function(o){var s,t,a,n;o.modules.accessor&&(t=o.modules.accessor[r]||o.modules.accessor.accessor||!1)&&"undefined"!=(s=o.getFieldValue(c))&&(n=o.getComponent(),a="function"==typeof t.params?t.params(s,c,e,n):t.params,o.setFieldValue(c,t.accessor(s,c,e,a,n)))}),c},Accessor.prototype.accessors={},Tabulator.prototype.registerModule("accessor",Accessor); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/ajax.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/ajax.js deleted file mode 100644 index 692b4418c8..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/ajax.js +++ /dev/null @@ -1,429 +0,0 @@ -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var Ajax = function Ajax(table) { - - this.table = table; //hold Tabulator object - this.config = false; //hold config object for ajax request - this.url = ""; //request URL - this.urlGenerator = false; - this.params = false; //request parameters - - this.loaderElement = this.createLoaderElement(); //loader message div - this.msgElement = this.createMsgElement(); //message element - this.loadingElement = false; - this.errorElement = false; - this.loaderPromise = false; - - this.progressiveLoad = false; - this.loading = false; - - this.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request -}; - -//initialize setup options -Ajax.prototype.initialize = function () { - this.loaderElement.appendChild(this.msgElement); - - if (this.table.options.ajaxLoaderLoading) { - this.loadingElement = this.table.options.ajaxLoaderLoading; - } - - this.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise; - - this.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator; - - if (this.table.options.ajaxLoaderError) { - this.errorElement = this.table.options.ajaxLoaderError; - } - - if (this.table.options.ajaxParams) { - this.setParams(this.table.options.ajaxParams); - } - - if (this.table.options.ajaxConfig) { - this.setConfig(this.table.options.ajaxConfig); - } - - if (this.table.options.ajaxURL) { - this.setUrl(this.table.options.ajaxURL); - } - - if (this.table.options.ajaxProgressiveLoad) { - if (this.table.options.pagination) { - this.progressiveLoad = false; - console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"); - } else { - if (this.table.modExists("page")) { - this.progressiveLoad = this.table.options.ajaxProgressiveLoad; - this.table.modules.page.initializeProgressive(this.progressiveLoad); - } else { - console.error("Pagination plugin is required for progressive ajax loading"); - } - } - } -}; - -Ajax.prototype.createLoaderElement = function () { - var el = document.createElement("div"); - el.classList.add("tabulator-loader"); - return el; -}; - -Ajax.prototype.createMsgElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-loader-msg"); - el.setAttribute("role", "alert"); - - return el; -}; - -//set ajax params -Ajax.prototype.setParams = function (params, update) { - if (update) { - this.params = this.params || {}; - - for (var key in params) { - this.params[key] = params[key]; - } - } else { - this.params = params; - } -}; - -Ajax.prototype.getParams = function () { - return this.params || {}; -}; - -//load config object -Ajax.prototype.setConfig = function (config) { - this._loadDefaultConfig(); - - if (typeof config == "string") { - this.config.method = config; - } else { - for (var key in config) { - this.config[key] = config[key]; - } - } -}; - -//create config object from default -Ajax.prototype._loadDefaultConfig = function (force) { - var self = this; - if (!self.config || force) { - - self.config = {}; - - //load base config from defaults - for (var key in self.defaultConfig) { - self.config[key] = self.defaultConfig[key]; - } - } -}; - -//set request url -Ajax.prototype.setUrl = function (url) { - this.url = url; -}; - -//get request url -Ajax.prototype.getUrl = function () { - return this.url; -}; - -//lstandard loading function -Ajax.prototype.loadData = function (inPosition) { - var self = this; - - if (this.progressiveLoad) { - return this._loadDataProgressive(); - } else { - return this._loadDataStandard(inPosition); - } -}; - -Ajax.prototype.nextPage = function (diff) { - var margin; - - if (!this.loading) { - - margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2; - - if (diff < margin) { - this.table.modules.page.nextPage().then(function () {}).catch(function () {}); - } - } -}; - -Ajax.prototype.blockActiveRequest = function () { - this.requestOrder++; -}; - -Ajax.prototype._loadDataProgressive = function () { - this.table.rowManager.setData([]); - return this.table.modules.page.setPage(1); -}; - -Ajax.prototype._loadDataStandard = function (inPosition) { - var _this = this; - - return new Promise(function (resolve, reject) { - _this.sendRequest(inPosition).then(function (data) { - _this.table.rowManager.setData(data, inPosition); - resolve(); - }).catch(function (e) { - reject(); - }); - }); -}; - -Ajax.prototype.generateParamsList = function (data, prefix) { - var self = this, - output = []; - - prefix = prefix || ""; - - if (Array.isArray(data)) { - data.forEach(function (item, i) { - output = output.concat(self.generateParamsList(item, prefix ? prefix + "[" + i + "]" : i)); - }); - } else if ((typeof data === "undefined" ? "undefined" : _typeof(data)) === "object") { - for (var key in data) { - output = output.concat(self.generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key)); - } - } else { - output.push({ key: prefix, value: data }); - } - - return output; -}; - -Ajax.prototype.serializeParams = function (params) { - var output = this.generateParamsList(params), - encoded = []; - - output.forEach(function (item) { - encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value)); - }); - - return encoded.join("&"); -}; - -//send ajax request -Ajax.prototype.sendRequest = function (silent) { - var _this2 = this; - - var self = this, - url = self.url, - requestNo, - esc, - query; - - self.requestOrder++; - requestNo = self.requestOrder; - - self._loadDefaultConfig(); - - return new Promise(function (resolve, reject) { - if (self.table.options.ajaxRequesting.call(_this2.table, self.url, self.params) !== false) { - - self.loading = true; - - if (!silent) { - self.showLoader(); - } - - _this2.loaderPromise(url, self.config, self.params).then(function (data) { - if (requestNo === self.requestOrder) { - if (self.table.options.ajaxResponse) { - data = self.table.options.ajaxResponse.call(self.table, self.url, self.params, data); - } - resolve(data); - } else { - console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made"); - } - - self.hideLoader(); - - self.loading = false; - }).catch(function (error) { - console.error("Ajax Load Error: ", error); - self.table.options.ajaxError.call(self.table, error); - - self.showError(); - - setTimeout(function () { - self.hideLoader(); - }, 3000); - - self.loading = false; - - reject(); - }); - } else { - reject(); - } - }); -}; - -Ajax.prototype.showLoader = function () { - var shouldLoad = typeof this.table.options.ajaxLoader === "function" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader; - - if (shouldLoad) { - - this.hideLoader(); - - while (this.msgElement.firstChild) { - this.msgElement.removeChild(this.msgElement.firstChild); - }this.msgElement.classList.remove("tabulator-error"); - this.msgElement.classList.add("tabulator-loading"); - - if (this.loadingElement) { - this.msgElement.appendChild(this.loadingElement); - } else { - this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|loading"); - } - - this.table.element.appendChild(this.loaderElement); - } -}; - -Ajax.prototype.showError = function () { - this.hideLoader(); - - while (this.msgElement.firstChild) { - this.msgElement.removeChild(this.msgElement.firstChild); - }this.msgElement.classList.remove("tabulator-loading"); - this.msgElement.classList.add("tabulator-error"); - - if (this.errorElement) { - this.msgElement.appendChild(this.errorElement); - } else { - this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|error"); - } - - this.table.element.appendChild(this.loaderElement); -}; - -Ajax.prototype.hideLoader = function () { - if (this.loaderElement.parentNode) { - this.loaderElement.parentNode.removeChild(this.loaderElement); - } -}; - -//default ajax config object -Ajax.prototype.defaultConfig = { - method: "GET" -}; - -Ajax.prototype.defaultURLGenerator = function (url, config, params) { - if (params && Object.keys(params).length) { - if (!config.method || config.method.toLowerCase() == "get") { - config.method = "get"; - url += "?" + this.serializeParams(params); - } - } - - return url; -}; - -Ajax.prototype.defaultLoaderPromise = function (url, config, params) { - var self = this, - contentType; - - return new Promise(function (resolve, reject) { - - //set url - url = self.urlGenerator(url, config, params); - - //set body content if not GET request - if (config.method != "get") { - contentType = _typeof(self.table.options.ajaxContentType) === "object" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType]; - if (contentType) { - - for (var key in contentType.headers) { - if (!config.headers) { - config.headers = {}; - } - - if (typeof config.headers[key] === "undefined") { - config.headers[key] = contentType.headers[key]; - } - } - - config.body = contentType.body.call(self, url, config, params); - } else { - console.warn("Ajax Error - Invalid ajaxContentType value:", self.table.options.ajaxContentType); - } - } - - if (url) { - - //configure headers - if (typeof config.credentials === "undefined") { - config.credentials = 'include'; - } - - if (typeof config.headers === "undefined") { - config.headers = {}; - } - - if (typeof config.headers.Accept === "undefined") { - config.headers.Accept = "application/json"; - } - - if (typeof config.headers["X-Requested-With"] === "undefined") { - config.headers["X-Requested-With"] = "XMLHttpRequest"; - } - - //send request - fetch(url, config).then(function (response) { - if (response.ok) { - response.json().then(function (data) { - resolve(data); - }).catch(function (error) { - reject(error); - console.warn("Ajax Load Error - Invalid JSON returned", error); - }); - } else { - console.error("Ajax Load Error - Connection Error: " + response.status, response.statusText); - reject(response); - } - }).catch(function (error) { - console.error("Ajax Load Error - Connection Error: ", error); - reject(error); - }); - } else { - reject("No URL Set"); - } - }); -}; - -Ajax.prototype.contentTypeFormatters = { - "json": { - headers: { - 'Content-Type': 'application/json' - }, - body: function body(url, config, params) { - return JSON.stringify(params); - } - }, - "form": { - headers: {}, - body: function body(url, config, params) { - var output = this.generateParamsList(params), - form = new FormData(); - - output.forEach(function (item) { - form.append(item.key, item.value); - }); - - return form; - } - } -}; - -Tabulator.prototype.registerModule("ajax", Ajax); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/ajax.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/ajax.min.js deleted file mode 100644 index 33ba12c9c6..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/ajax.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ajax=function(e){this.table=e,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};Ajax.prototype.initialize=function(){this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&(this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&(this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},Ajax.prototype.createLoaderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader"),e},Ajax.prototype.createMsgElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-loader-msg"),e.setAttribute("role","alert"),e},Ajax.prototype.setParams=function(e,t){if(t){this.params=this.params||{};for(var o in e)this.params[o]=e[o]}else this.params=e},Ajax.prototype.getParams=function(){return this.params||{}},Ajax.prototype.setConfig=function(e){if(this._loadDefaultConfig(),"string"==typeof e)this.config.method=e;else for(var t in e)this.config[t]=e[t]},Ajax.prototype._loadDefaultConfig=function(e){var t=this;if(!t.config||e){t.config={};for(var o in t.defaultConfig)t.config[o]=t.defaultConfig[o]}},Ajax.prototype.setUrl=function(e){this.url=e},Ajax.prototype.getUrl=function(){return this.url},Ajax.prototype.loadData=function(e){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(e)},Ajax.prototype.nextPage=function(e){var t;this.loading||(t=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,e output || output === null) { - output = value; - } - }); - - return output !== null ? precision !== false ? output.toFixed(precision) : output : ""; - }, - "min": function min(values, data, calcParams) { - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function (value) { - - value = Number(value); - - if (value < output || output === null) { - output = value; - } - }); - - return output !== null ? precision !== false ? output.toFixed(precision) : output : ""; - }, - "sum": function sum(values, data, calcParams) { - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - if (values.length) { - values.forEach(function (value) { - value = Number(value); - - output += !isNaN(value) ? Number(value) : 0; - }); - } - - return precision !== false ? output.toFixed(precision) : output; - }, - "concat": function concat(values, data, calcParams) { - var output = 0; - - if (values.length) { - output = values.reduce(function (sum, value) { - return String(sum) + String(value); - }); - } - - return output; - }, - "count": function count(values, data, calcParams) { - var output = 0; - - if (values.length) { - values.forEach(function (value) { - if (value) { - output++; - } - }); - } - - return output; - } -}; - -Tabulator.prototype.registerModule("columnCalcs", ColumnCalcs); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/calculation_colums.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/calculation_colums.min.js deleted file mode 100644 index a6a3442887..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/calculation_colums.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ColumnCalcs=function(t){this.table=t,this.topCalcs=[],this.botCalcs=[],this.genColumn=!1,this.topElement=this.createElement(),this.botElement=this.createElement(),this.topRow=!1,this.botRow=!1,this.topInitialized=!1,this.botInitialized=!1,this.initialize()};ColumnCalcs.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-calcs-holder"),t},ColumnCalcs.prototype.initialize=function(){this.genColumn=new Column({field:"value"},this)},ColumnCalcs.prototype.registerColumnField=function(){},ColumnCalcs.prototype.initializeColumn=function(t){var o=t.definition,e={topCalcParams:o.topCalcParams||{},botCalcParams:o.bottomCalcParams||{}};if(o.topCalc){switch(_typeof(o.topCalc)){case"string":this.calculations[o.topCalc]?e.topCalc=this.calculations[o.topCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",o.topCalc);break;case"function":e.topCalc=o.topCalc}e.topCalc&&(t.modules.columnCalcs=e,this.topCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeTopRow())}if(o.bottomCalc){switch(_typeof(o.bottomCalc)){case"string":this.calculations[o.bottomCalc]?e.botCalc=this.calculations[o.bottomCalc]:console.warn("Column Calc Error - No such calculation found, ignoring: ",o.bottomCalc);break;case"function":e.botCalc=o.bottomCalc}e.botCalc&&(t.modules.columnCalcs=e,this.botCalcs.push(t),"group"!=this.table.options.columnCalcs&&this.initializeBottomRow())}},ColumnCalcs.prototype.removeCalcs=function(){var t=!1;this.topInitialized&&(this.topInitialized=!1,this.topElement.parentNode.removeChild(this.topElement),t=!0),this.botInitialized&&(this.botInitialized=!1,this.table.footerManager.remove(this.botElement),t=!0),t&&this.table.rowManager.adjustTableSize()},ColumnCalcs.prototype.initializeTopRow=function(){this.topInitialized||(this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling),this.topInitialized=!0)},ColumnCalcs.prototype.initializeBottomRow=function(){this.botInitialized||(this.table.footerManager.prepend(this.botElement),this.botInitialized=!0)},ColumnCalcs.prototype.scrollHorizontal=function(t){this.table.columnManager.getElement().scrollWidth,this.table.element.clientWidth;this.botInitialized&&(this.botRow.getElement().style.marginLeft=-t+"px")},ColumnCalcs.prototype.recalc=function(t){var o;if(this.topInitialized||this.botInitialized){if(this.rowsToData(t),this.topInitialized){for(o=this.generateRow("top",this.rowsToData(t)),this.topRow=o;this.topElement.firstChild;)this.topElement.removeChild(this.topElement.firstChild);this.topElement.appendChild(o.getElement()),o.initialize(!0)}if(this.botInitialized){for(o=this.generateRow("bottom",this.rowsToData(t)),this.botRow=o;this.botElement.firstChild;)this.botElement.removeChild(this.botElement.firstChild);this.botElement.appendChild(o.getElement()),o.initialize(!0)}this.table.rowManager.adjustTableSize(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()}},ColumnCalcs.prototype.recalcRowGroup=function(t){this.recalcGroup(this.table.modules.groupRows.getRowGroup(t))},ColumnCalcs.prototype.recalcGroup=function(t){var o,e;t&&t.calcs&&(t.calcs.bottom&&(o=this.rowsToData(t.rows),e=this.generateRowData("bottom",o),t.calcs.bottom.updateData(e),t.calcs.bottom.reinitialize()),t.calcs.top&&(o=this.rowsToData(t.rows),e=this.generateRowData("top",o),t.calcs.top.updateData(e),t.calcs.top.reinitialize()))},ColumnCalcs.prototype.generateTopRow=function(t){return this.generateRow("top",this.rowsToData(t))},ColumnCalcs.prototype.generateBottomRow=function(t){return this.generateRow("bottom",this.rowsToData(t))},ColumnCalcs.prototype.rowsToData=function(t){var o=[];return t.forEach(function(t){o.push(t.getData())}),o},ColumnCalcs.prototype.generateRow=function(t,o){var e,i=this,l=this.generateRowData(t,o);return i.table.modExists("mutator")&&i.table.modules.mutator.disable(),e=new Row(l,this),i.table.modExists("mutator")&&i.table.modules.mutator.enable(),e.getElement().classList.add("tabulator-calcs","tabulator-calcs-"+t),e.type="calc",e.generateCells=function(){var o=[];i.table.columnManager.columnsByIndex.forEach(function(l){if(l.visible){i.genColumn.setField(l.getField()),i.genColumn.hozAlign=l.hozAlign,l.definition[t+"CalcFormatter"]&&i.table.modExists("format")?i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter(l.definition[t+"CalcFormatter"]),params:l.definition[t+"CalcFormatterParams"]}:i.genColumn.modules.format={formatter:i.table.modules.format.getFormatter("plaintext"),params:{}};var a=new Cell(i.genColumn,e);a.column=l,a.setWidth(l.width),l.cells.push(a),o.push(a)}}),this.cells=o},e},ColumnCalcs.prototype.generateRowData=function(t,o){var e,i,l={},a="top"==t?this.topCalcs:this.botCalcs,n="top"==t?"topCalc":"botCalc";return a.forEach(function(t){var a=[];t.modules.columnCalcs&&t.modules.columnCalcs[n]&&(o.forEach(function(o){a.push(t.getFieldValue(o))}),i=n+"Params",e="function"==typeof t.modules.columnCalcs[i]?t.modules.columnCalcs[i](value,o):t.modules.columnCalcs[i],t.setFieldValue(l,t.modules.columnCalcs[n](a,o,e)))}),l},ColumnCalcs.prototype.hasTopCalcs=function(){return!!this.topCalcs.length},ColumnCalcs.prototype.hasBottomCalcs=function(){return!!this.botCalcs.length},ColumnCalcs.prototype.redraw=function(){this.topRow&&this.topRow.normalizeHeight(!0),this.botRow&&this.botRow.normalizeHeight(!0)},ColumnCalcs.prototype.getResults=function(){var t,o=this,e={};return this.table.options.groupBy&&this.table.modExists("groupRows")?(t=this.table.modules.groupRows.getGroups(!0),t.forEach(function(t){e[t.getKey()]=o.getGroupResults(t)})):e={top:this.topRow?this.topRow.getData():{},bottom:this.botRow?this.botRow.getData():{}},e},ColumnCalcs.prototype.getGroupResults=function(t){var o=this,e=t._getSelf(),i=t.getSubGroups(),l={};return i.forEach(function(t){l[t.getKey()]=o.getGroupResults(t)}),{top:e.calcs.top?e.calcs.top.getData():{},bottom:e.calcs.bottom?e.calcs.bottom.getData():{},groups:l}},ColumnCalcs.prototype.calculations={avg:function(t,o,e){var i=0,l=void 0!==e.precision?e.precision:2;return t.length&&(i=t.reduce(function(t,o){return o=Number(o),t+o}),i/=t.length,i=!1!==l?i.toFixed(l):i),parseFloat(i).toString()},max:function(t,o,e){var i=null,l=void 0!==e.precision&&e.precision;return t.forEach(function(t){((t=Number(t))>i||null===i)&&(i=t)}),null!==i?!1!==l?i.toFixed(l):i:""},min:function(t,o,e){var i=null,l=void 0!==e.precision&&e.precision;return t.forEach(function(t){((t=Number(t)) max) { - max = len; - } - }); - - headers.forEach(function (title) { - var len = title.length; - if (len < max) { - for (var i = len; i < max; i++) { - title.push(""); - } - } - }); - } - - columns.forEach(function (column) { - parseColumnGroup(column, 0); - }); - - return headers; -}; - -Clipboard.prototype.rowsToData = function (rows, config, params) { - var columns = this.table.columnManager.columnsByIndex, - data = []; - - rows.forEach(function (row) { - var rowArray = [], - rowData = row.getData("clipboard"); - - columns.forEach(function (column) { - var value = column.getFieldValue(rowData); - - switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { - case "object": - value = JSON.stringify(value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = value; - } - - rowArray.push(value); - }); - - data.push(rowArray); - }); - - return data; -}; - -Clipboard.prototype.buildComplexRows = function (config) { - var _this3 = this; - - var output = [], - groups = this.table.modules.groupRows.getGroups(); - - groups.forEach(function (group) { - output.push(_this3.processGroupData(group)); - }); - - return output; -}; - -Clipboard.prototype.processGroupData = function (group) { - var _this4 = this; - - var subGroups = group.getSubGroups(); - - var groupData = { - type: "group", - key: group.key - }; - - if (subGroups.length) { - groupData.subGroups = []; - - subGroups.forEach(function (subGroup) { - groupData.subGroups.push(_this4.processGroupData(subGroup)); - }); - } else { - groupData.rows = group.getRows(true); - } - - return groupData; -}; - -Clipboard.prototype.buildOutput = function (rows, config, params) { - var _this5 = this; - - var output = [], - columns = this.table.columnManager.columnsByIndex; - - if (config.columnHeaders) { - - if (config.columnHeaders == "groups") { - columns = this.generateColumnGroupHeaders(this.table.columnManager.columns); - - output = output.concat(this.groupHeadersToRows(columns)); - } else { - output.push(this.generateSimpleHeaders(columns)); - } - } - - //generate styled content - if (this.table.options.clipboardCopyStyled) { - this.generateHTML(rows, columns, config, params); - } - - //generate unstyled content - if (config.rowGroups) { - rows.forEach(function (row) { - output = output.concat(_this5.parseRowGroupData(row, config, params)); - }); - } else { - output = output.concat(this.rowsToData(rows, config, params)); - } - - return output; -}; - -Clipboard.prototype.parseRowGroupData = function (group, config, params) { - var _this6 = this; - - var groupData = []; - - groupData.push([group.key]); - - if (group.subGroups) { - group.subGroups.forEach(function (subGroup) { - groupData = groupData.concat(_this6.parseRowGroupData(subGroup, config, params)); - }); - } else { - - groupData = groupData.concat(this.rowsToData(group.rows, config, params)); - } - - return groupData; -}; - -Clipboard.prototype.generateHTML = function (rows, columns, config, params) { - var self = this, - data = [], - headers = [], - body, - oddRow, - evenRow, - firstRow, - firstCell, - firstGroup, - lastCell, - styleCells; - - //create table element - this.htmlElement = document.createElement("table"); - self.mapElementStyles(this.table.element, this.htmlElement, ["border-top", "border-left", "border-right", "border-bottom"]); - - function generateSimpleHeaders() { - var headerEl = document.createElement("tr"); - - columns.forEach(function (column) { - var columnEl = document.createElement("th"); - columnEl.innerHTML = column.definition.title; - - self.mapElementStyles(column.getElement(), columnEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - headerEl.appendChild(columnEl); - }); - - self.mapElementStyles(self.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - self.htmlElement.appendChild(document.createElement("thead").appendChild(headerEl)); - } - - function generateHeaders(headers) { - - var headerHolderEl = document.createElement("thead"); - - headers.forEach(function (columns) { - var headerEl = document.createElement("tr"); - - columns.forEach(function (column) { - var columnEl = document.createElement("th"); - - if (column.width > 1) { - columnEl.colSpan = column.width; - } - - if (column.height > 1) { - columnEl.rowSpan = column.height; - } - - columnEl.innerHTML = column.title; - - self.mapElementStyles(column.element, columnEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - headerEl.appendChild(columnEl); - }); - - self.mapElementStyles(self.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - headerHolderEl.appendChild(headerEl); - }); - - self.htmlElement.appendChild(headerHolderEl); - } - - function parseColumnGroup(column, level) { - - if (typeof headers[level] === "undefined") { - headers[level] = []; - } - - headers[level].push({ - title: column.title, - width: column.width, - height: 1, - children: !!column.subGroups, - element: column.column.getElement() - }); - - if (column.subGroups) { - column.subGroups.forEach(function (subGroup) { - parseColumnGroup(subGroup, level + 1); - }); - } - } - - function padVerticalColumnheaders() { - headers.forEach(function (row, index) { - row.forEach(function (header) { - if (!header.children) { - header.height = headers.length - index; - } - }); - }); - } - - //create headers if needed - if (config.columnHeaders) { - if (config.columnHeaders == "groups") { - columns.forEach(function (column) { - parseColumnGroup(column, 0); - }); - - padVerticalColumnheaders(); - generateHeaders(headers); - } else { - generateSimpleHeaders(); - } - } - - columns = this.table.columnManager.columnsByIndex; - - //create table body - body = document.createElement("tbody"); - - //lookup row styles - if (window.getComputedStyle) { - oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"); - evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"); - firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"); - firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0]; - - if (firstRow) { - styleCells = firstRow.getElementsByClassName("tabulator-cell"); - firstCell = styleCells[0]; - lastCell = styleCells[styleCells.length - 1]; - } - } - - function processRows(rowArray) { - //add rows to table - rowArray.forEach(function (row, i) { - var rowEl = document.createElement("tr"), - rowData = row.getData("clipboard"), - styleRow = firstRow; - - columns.forEach(function (column, j) { - var cellEl = document.createElement("td"), - value = column.getFieldValue(rowData); - - switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { - case "object": - value = JSON.stringify(value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = value; - } - - cellEl.innerHTML = value; - - if (column.definition.align) { - cellEl.style.textAlign = column.definition.align; - } - - if (j < columns.length - 1) { - if (firstCell) { - self.mapElementStyles(firstCell, cellEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]); - } - } else { - if (firstCell) { - self.mapElementStyles(firstCell, cellEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]); - } - } - - rowEl.appendChild(cellEl); - }); - - if (!(i % 2) && oddRow) { - styleRow = oddRow; - } - - if (i % 2 && evenRow) { - styleRow = evenRow; - } - - if (styleRow) { - self.mapElementStyles(styleRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - } - - body.appendChild(rowEl); - }); - } - - function processGroup(group) { - var groupEl = document.createElement("tr"), - groupCellEl = document.createElement("td"); - - groupCellEl.colSpan = columns.length; - - groupCellEl.innerHTML = group.key; - - groupEl.appendChild(groupCellEl); - body.appendChild(groupEl); - - self.mapElementStyles(firstGroup, groupEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - - if (group.subGroups) { - group.subGroups.forEach(function (subGroup) { - processGroup(subGroup); - }); - } else { - processRows(group.rows); - } - } - - if (config.rowGroups) { - rows.forEach(function (group) { - processGroup(group); - }); - } else { - processRows(rows); - } - - this.htmlElement.appendChild(body); -}; - -Clipboard.prototype.mapElementStyles = function (from, to, props) { - - var lookup = { - "background-color": "backgroundColor", - "color": "fontColor", - "font-weight": "fontWeight", - "font-family": "fontFamily", - "font-size": "fontSize", - "border-top": "borderTop", - "border-left": "borderLeft", - "border-right": "borderRight", - "border-bottom": "borderBottom" - }; - - if (window.getComputedStyle) { - var fromStyle = window.getComputedStyle(from); - - props.forEach(function (prop) { - to.style[lookup[prop]] = fromStyle.getPropertyValue(prop); - }); - } - - // return window.getComputedStyle ? window.getComputedStyle(element, null).getPropertyValue(property) : element.style[property.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); })]; -}; - -Clipboard.prototype.copySelectors = { - userSelection: function userSelection(config, params) { - return params; - }, - selected: function selected(config, params) { - var rows = []; - - if (this.table.modExists("selectRow", true)) { - rows = this.table.modules.selectRow.getSelectedRows(); - } - - if (config.rowGroups) { - console.warn("Clipboard Warning - select coptSelector does not support row groups"); - } - - return this.buildOutput(rows, config, params); - }, - table: function table(config, params) { - if (config.rowGroups) { - console.warn("Clipboard Warning - table coptSelector does not support row groups"); - } - - return this.buildOutput(this.table.rowManager.getComponents(), config, params); - }, - active: function active(config, params) { - var rows; - - if (config.rowGroups) { - rows = this.buildComplexRows(config); - } else { - rows = this.table.rowManager.getComponents(true); - } - - return this.buildOutput(rows, config, params); - } -}; - -Clipboard.prototype.copyFormatters = { - raw: function raw(data, params) { - return data; - }, - table: function table(data, params) { - var output = []; - - data.forEach(function (row) { - row.forEach(function (value) { - if (typeof value == "undefined") { - value = ""; - } - - value = typeof value == "undefined" || value === null ? "" : value.toString(); - - if (value.match(/\r|\n/)) { - value = value.split('"').join('""'); - value = '"' + value + '"'; - } - }); - - output.push(row.join("\t")); - }); - - return output.join("\n"); - } -}; - -Clipboard.prototype.pasteParsers = { - table: function table(clipboard) { - var data = [], - success = false, - headerFindSuccess = true, - columns = this.table.columnManager.columns, - columnMap = [], - rows = []; - - //get data from clipboard into array of columns and rows. - clipboard = clipboard.split("\n"); - - clipboard.forEach(function (row) { - data.push(row.split("\t")); - }); - - if (data.length && !(data.length === 1 && data[0].length < 2)) { - success = true; - - //check if headers are present by title - data[0].forEach(function (value) { - var column = columns.find(function (column) { - return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim(); - }); - - if (column) { - columnMap.push(column); - } else { - headerFindSuccess = false; - } - }); - - //check if column headers are present by field - if (!headerFindSuccess) { - headerFindSuccess = true; - columnMap = []; - - data[0].forEach(function (value) { - var column = columns.find(function (column) { - return value && column.field && value.trim() && column.field.trim() === value.trim(); - }); - - if (column) { - columnMap.push(column); - } else { - headerFindSuccess = false; - } - }); - - if (!headerFindSuccess) { - columnMap = this.table.columnManager.columnsByIndex; - } - } - - //remove header row if found - if (headerFindSuccess) { - data.shift(); - } - - data.forEach(function (item) { - var row = {}; - - item.forEach(function (value, i) { - if (columnMap[i]) { - row[columnMap[i].field] = value; - } - }); - - rows.push(row); - }); - - return rows; - } else { - return false; - } - } -}; - -Clipboard.prototype.pasteActions = { - replace: function replace(rows) { - return this.table.setData(rows); - }, - update: function update(rows) { - return this.table.updateOrAddData(rows); - }, - insert: function insert(rows) { - return this.table.addData(rows); - } -}; - -Tabulator.prototype.registerModule("clipboard", Clipboard); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/clipboard.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/clipboard.min.js deleted file mode 100644 index c96952168c..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/clipboard.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Clipboard=function(t){this.table=t,this.mode=!0,this.copySelector=!1,this.copySelectorParams={},this.copyFormatter=!1,this.copyFormatterParams={},this.pasteParser=function(){},this.pasteAction=function(){},this.htmlElement=!1,this.config={},this.blocked=!0};Clipboard.prototype.initialize=function(){var t=this;this.mode=this.table.options.clipboard,!0!==this.mode&&"copy"!==this.mode||this.table.element.addEventListener("copy",function(e){var o;t.processConfig(),t.blocked||(e.preventDefault(),o=t.generateContent(),window.clipboardData&&window.clipboardData.setData?window.clipboardData.setData("Text",o):e.clipboardData&&e.clipboardData.setData?(e.clipboardData.setData("text/plain",o),t.htmlElement&&e.clipboardData.setData("text/html",t.htmlElement.outerHTML)):e.originalEvent&&e.originalEvent.clipboardData.setData&&(e.originalEvent.clipboardData.setData("text/plain",o),t.htmlElement&&e.originalEvent.clipboardData.setData("text/html",t.htmlElement.outerHTML)),t.table.options.clipboardCopied.call(this.table,o),t.reset())}),!0!==this.mode&&"paste"!==this.mode||this.table.element.addEventListener("paste",function(e){t.paste(e)}),this.setPasteParser(this.table.options.clipboardPasteParser),this.setPasteAction(this.table.options.clipboardPasteAction)},Clipboard.prototype.processConfig=function(){var t={columnHeaders:"groups",rowGroups:!0};if(void 0!==this.table.options.clipboardCopyHeader&&(t.columnHeaders=this.table.options.clipboardCopyHeader,console.warn("DEPRECATION WANRING - clipboardCopyHeader option has been depricated, please use the columnHeaders property on the clipboardCopyConfig option")),this.table.options.clipboardCopyConfig)for(var e in this.table.options.clipboardCopyConfig)t[e]=this.table.options.clipboardCopyConfig[e];t.rowGroups&&this.table.options.groupBy&&this.table.modExists("groupRows")&&(this.config.rowGroups=!0),t.columnHeaders?"groups"!==t.columnHeaders&&!0!==t||this.table.columnManager.columns.length==this.table.columnManager.columnsByIndex.length?this.config.columnHeaders="columns":this.config.columnHeaders="groups":this.config.columnHeaders=!1},Clipboard.prototype.reset=function(){this.blocked=!1,this.originalSelectionText=""},Clipboard.prototype.setPasteAction=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteAction=this.pasteActions[t],this.pasteAction||console.warn("Clipboard Error - No such paste action found:",t);break;case"function":this.pasteAction=t}},Clipboard.prototype.setPasteParser=function(t){switch(void 0===t?"undefined":_typeof(t)){case"string":this.pasteParser=this.pasteParsers[t],this.pasteParser||console.warn("Clipboard Error - No such paste parser found:",t);break;case"function":this.pasteParser=t}},Clipboard.prototype.paste=function(t){var e,o,r;this.checkPaseOrigin(t)&&(e=this.getPasteData(t),o=this.pasteParser.call(this,e),o?(t.preventDefault(),this.table.modExists("mutator")&&(o=this.mutateData(o)),r=this.pasteAction.call(this,o),this.table.options.clipboardPasted.call(this.table,e,o,r)):this.table.options.clipboardPasteError.call(this.table,e))},Clipboard.prototype.mutateData=function(t){var e=this,o=[];return Array.isArray(t)?t.forEach(function(t){o.push(e.table.modules.mutator.transformRow(t,"clipboard"))}):o=t,o},Clipboard.prototype.checkPaseOrigin=function(t){var e=!0;return("DIV"!=t.target.tagName||this.table.modules.edit.currentCell)&&(e=!1),e},Clipboard.prototype.getPasteData=function(t){var e;return window.clipboardData&&window.clipboardData.getData?e=window.clipboardData.getData("Text"):t.clipboardData&&t.clipboardData.getData?e=t.clipboardData.getData("text/plain"):t.originalEvent&&t.originalEvent.clipboardData.getData&&(e=t.originalEvent.clipboardData.getData("text/plain")),e},Clipboard.prototype.copy=function(t,e,o,r,a){var n,i;this.blocked=!1,!0!==this.mode&&"copy"!==this.mode||(void 0!==window.getSelection&&void 0!==document.createRange?(n=document.createRange(),n.selectNodeContents(this.table.element),i=window.getSelection(),i.toString()&&a&&(t="userSelection",o="raw",e=i.toString()),i.removeAllRanges(),i.addRange(n)):void 0!==document.selection&&void 0!==document.body.createTextRange&&(textRange=document.body.createTextRange(),textRange.moveToElementText(this.table.element),textRange.select()),this.setSelector(t),this.copySelectorParams=void 0!==e&&null!=e?e:this.config.columnHeaders,this.setFormatter(o),this.copyFormatterParams=void 0!==r&&null!=r?r:{},document.execCommand("copy"),i&&i.removeAllRanges())},Clipboard.prototype.setSelector=function(t){switch(t=t||this.table.options.clipboardCopySelector,void 0===t?"undefined":_typeof(t)){case"string":this.copySelectors[t]?this.copySelector=this.copySelectors[t]:console.warn("Clipboard Error - No such selector found:",t);break;case"function":this.copySelector=t}},Clipboard.prototype.setFormatter=function(t){switch(t=t||this.table.options.clipboardCopyFormatter,void 0===t?"undefined":_typeof(t)){case"string":this.copyFormatters[t]?this.copyFormatter=this.copyFormatters[t]:console.warn("Clipboard Error - No such formatter found:",t);break;case"function":this.copyFormatter=t}},Clipboard.prototype.generateContent=function(){var t;return this.htmlElement=!1,t=this.copySelector.call(this,this.config,this.copySelectorParams),this.copyFormatter.call(this,t,this.config,this.copyFormatterParams)},Clipboard.prototype.generateSimpleHeaders=function(t){var e=[];return t.forEach(function(t){e.push(t.definition.title)}),e},Clipboard.prototype.generateColumnGroupHeaders=function(t){var e=this,o=[];return this.table.columnManager.columns.forEach(function(t){var r=e.processColumnGroup(t);r&&o.push(r)}),o},Clipboard.prototype.processColumnGroup=function(t){var e=this,o=t.columns,r={type:"group",title:t.definition.title,column:t};if(o.length){if(r.subGroups=[],r.width=0,o.forEach(function(t){var o=e.processColumnGroup(t);o&&(r.width+=o.width,r.subGroups.push(o))}),!r.width)return!1}else{if(!t.field||!t.visible)return!1;r.width=1}return r},Clipboard.prototype.groupHeadersToRows=function(t){function e(t,a){void 0===r[a]&&(r[a]=[]),r[a].push(t.title),t.subGroups?t.subGroups.forEach(function(t){e(t,a+1)}):o()}function o(){var t=0;r.forEach(function(e){var o=e.length;o>t&&(t=o)}),r.forEach(function(e){var o=e.length;if(o1&&(e.colSpan=t.width),t.height>1&&(e.rowSpan=t.height),e.innerHTML=t.title,b.mapElementStyles(t.element,e,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),o.appendChild(e)}),b.mapElementStyles(b.table.columnManager.getHeadersElement(),o,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.appendChild(o)}),b.htmlElement.appendChild(e)}(f)):function(){var t=document.createElement("tr");e.forEach(function(e){var o=document.createElement("th");o.innerHTML=e.definition.title,b.mapElementStyles(e.getElement(),o,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),t.appendChild(o)}),b.mapElementStyles(b.table.columnManager.getHeadersElement(),t,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),b.htmlElement.appendChild(document.createElement("thead").appendChild(t))}()),e=this.table.columnManager.columnsByIndex,l=document.createElement("tbody"),window.getComputedStyle&&(s=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),c=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),p=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),d=this.table.element.getElementsByClassName("tabulator-group")[0],p&&(h=p.getElementsByClassName("tabulator-cell"),u=h[0],h[h.length-1])),o.rowGroups?t.forEach(function(t){i(t)}):n(t),this.htmlElement.appendChild(l)},Clipboard.prototype.mapElementStyles=function(t,e,o){var r={"background-color":"backgroundColor",color:"fontColor","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom"};if(window.getComputedStyle){var a=window.getComputedStyle(t);o.forEach(function(t){e.style[r[t]]=a.getPropertyValue(t)})}},Clipboard.prototype.copySelectors={userSelection:function(t,e){return e},selected:function(t,e){var o=[];return this.table.modExists("selectRow",!0)&&(o=this.table.modules.selectRow.getSelectedRows()),t.rowGroups&&console.warn("Clipboard Warning - select coptSelector does not support row groups"),this.buildOutput(o,t,e)},table:function(t,e){return t.rowGroups&&console.warn("Clipboard Warning - table coptSelector does not support row groups"),this.buildOutput(this.table.rowManager.getComponents(),t,e)},active:function(t,e){var o;return o=t.rowGroups?this.buildComplexRows(t):this.table.rowManager.getComponents(!0),this.buildOutput(o,t,e)}},Clipboard.prototype.copyFormatters={raw:function(t,e){return t},table:function(t,e){var o=[];return t.forEach(function(t){t.forEach(function(t){void 0===t&&(t=""),t=void 0===t||null===t?"":t.toString(),t.match(/\r|\n/)&&(t=t.split('"').join('""'),t='"'+t+'"')}),o.push(t.join("\t"))}),o.join("\n")}},Clipboard.prototype.pasteParsers={table:function(t){var e=[],o=!0,r=this.table.columnManager.columns,a=[],n=[];return t=t.split("\n"),t.forEach(function(t){e.push(t.split("\t"))}),!(!e.length||1===e.length&&e[0].length<2)&&(!0,e[0].forEach(function(t){var e=r.find(function(e){return t&&e.definition.title&&t.trim()&&e.definition.title.trim()===t.trim()});e?a.push(e):o=!1}),o||(o=!0,a=[],e[0].forEach(function(t){var e=r.find(function(e){return t&&e.field&&t.trim()&&e.field.trim()===t.trim()});e?a.push(e):o=!1}),o||(a=this.table.columnManager.columnsByIndex)),o&&e.shift(),e.forEach(function(t){var e={};t.forEach(function(t,o){a[o]&&(e[a[o].field]=t)}),n.push(e)}),n)}},Clipboard.prototype.pasteActions={replace:function(t){return this.table.setData(t)},update:function(t){return this.table.updateOrAddData(t)},insert:function(t){return this.table.addData(t)}},Tabulator.prototype.registerModule("clipboard",Clipboard); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/data_tree.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/data_tree.js deleted file mode 100644 index c65efe312f..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/data_tree.js +++ /dev/null @@ -1,301 +0,0 @@ -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var DataTree = function DataTree(table) { - this.table = table; - this.indent = 10; - this.field = ""; - this.collapseEl = null; - this.expandEl = null; - this.branchEl = null; - - this.startOpen = function () {}; - - this.displayIndex = 0; -}; - -DataTree.prototype.initialize = function () { - var dummyEl = null, - options = this.table.options; - - this.field = options.dataTreeChildField; - this.indent = options.dataTreeChildIndent; - - if (options.dataTreeBranchElement) { - - if (options.dataTreeBranchElement === true) { - this.branchEl = document.createElement("div"); - this.branchEl.classList.add("tabulator-data-tree-branch"); - } else { - if (typeof options.dataTreeBranchElement === "string") { - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeBranchElement; - this.branchEl = dummyEl.firstChild; - } else { - this.branchEl = options.dataTreeBranchElement; - } - } - } - - if (options.dataTreeCollapseElement) { - if (typeof options.dataTreeCollapseElement === "string") { - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeCollapseElement; - this.collapseEl = dummyEl.firstChild; - } else { - this.collapseEl = options.dataTreeCollapseElement; - } - } else { - this.collapseEl = document.createElement("div"); - this.collapseEl.classList.add("tabulator-data-tree-control"); - this.collapseEl.innerHTML = "
"; - } - - if (options.dataTreeExpandElement) { - if (typeof options.dataTreeExpandElement === "string") { - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeExpandElement; - this.expandEl = dummyEl.firstChild; - } else { - this.expandEl = options.dataTreeExpandElement; - } - } else { - this.expandEl = document.createElement("div"); - this.expandEl.classList.add("tabulator-data-tree-control"); - this.expandEl.innerHTML = "
"; - } - - switch (_typeof(options.dataTreeStartExpanded)) { - case "boolean": - this.startOpen = function (row, index) { - return options.dataTreeStartExpanded; - }; - break; - - case "function": - this.startOpen = options.dataTreeStartExpanded; - break; - - default: - this.startOpen = function (row, index) { - return options.dataTreeStartExpanded[index]; - }; - break; - } -}; - -DataTree.prototype.initializeRow = function (row) { - - var children = typeof row.getData()[this.field] !== "undefined"; - - row.modules.dataTree = { - index: 0, - open: children ? this.startOpen(row.getComponent(), 0) : false, - controlEl: false, - branchEl: false, - parent: false, - children: children - }; -}; - -DataTree.prototype.layoutRow = function (row) { - var cell = row.getCells()[0], - el = cell.getElement(), - config = row.modules.dataTree; - - el.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + config.index * this.indent + "px"; - - if (config.branchEl) { - config.branchEl.parentNode.removeChild(config.branchEl); - } - - this.generateControlElement(row, el); - - if (config.index && this.branchEl) { - config.branchEl = this.branchEl.cloneNode(true); - el.insertBefore(config.branchEl, el.firstChild); - el.style.paddingLeft = parseInt(el.style.paddingLeft) + (config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1) + "px"; - } -}; - -DataTree.prototype.generateControlElement = function (row, el) { - var _this = this; - - var config = row.modules.dataTree, - el = el || row.getCells()[0].getElement(), - oldControl = config.controlEl; - - if (config.children !== false) { - - if (config.open) { - config.controlEl = this.collapseEl.cloneNode(true); - config.controlEl.addEventListener("click", function (e) { - e.stopPropagation(); - _this.collapseRow(row); - }); - } else { - config.controlEl = this.expandEl.cloneNode(true); - config.controlEl.addEventListener("click", function (e) { - e.stopPropagation(); - _this.expandRow(row); - }); - } - - config.controlEl.addEventListener("mousedown", function (e) { - e.stopPropagation(); - }); - - if (oldControl && oldControl.parentNode === el) { - oldControl.parentNode.replaceChild(config.controlEl, oldControl); - } else { - el.insertBefore(config.controlEl, el.firstChild); - } - } -}; - -DataTree.prototype.setDisplayIndex = function (index) { - this.displayIndex = index; -}; - -DataTree.prototype.getDisplayIndex = function () { - return this.displayIndex; -}; - -DataTree.prototype.getRows = function (rows) { - var _this2 = this; - - var output = []; - - rows.forEach(function (row, i) { - var config = row.modules.dataTree.children, - children; - - output.push(row); - - if (!config.index && config.children !== false) { - children = _this2.getChildren(row); - - children.forEach(function (child) { - output.push(child); - }); - } - }); - - return output; -}; - -DataTree.prototype.getChildren = function (row) { - var _this3 = this; - - var config = row.modules.dataTree, - output = []; - - if (config.children !== false && config.open) { - if (!Array.isArray(config.children)) { - config.children = this.generateChildren(row); - } - - config.children.forEach(function (child) { - output.push(child); - - var subChildren = _this3.getChildren(child); - - subChildren.forEach(function (sub) { - output.push(sub); - }); - }); - } - - return output; -}; - -DataTree.prototype.generateChildren = function (row) { - var _this4 = this; - - var children = []; - - row.getData()[this.field].forEach(function (childData) { - var childRow = new Row(childData || {}, _this4.table.rowManager); - childRow.modules.dataTree.index = row.modules.dataTree.index + 1; - childRow.modules.dataTree.parent = row; - childRow.modules.dataTree.open = _this4.startOpen(row, childRow.modules.dataTree.index); - children.push(childRow); - }); - - return children; -}; - -DataTree.prototype.expandRow = function (row, silent) { - var config = row.modules.dataTree; - - if (config.children !== false) { - config.open = true; - - row.reinitialize(); - - this.table.rowManager.refreshActiveData("tree", false, true); - - this.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index); - } -}; - -DataTree.prototype.collapseRow = function (row) { - var config = row.modules.dataTree; - - if (config.children !== false) { - config.open = false; - - row.reinitialize(); - - this.table.rowManager.refreshActiveData("tree", false, true); - - this.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index); - } -}; - -DataTree.prototype.toggleRow = function (row) { - var config = row.modules.dataTree; - - if (config.children !== false) { - if (config.open) { - this.collapseRow(row); - } else { - this.expandRow(row); - } - } -}; - -DataTree.prototype.getTreeParent = function (row) { - return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false; -}; - -DataTree.prototype.getTreeChildren = function (row) { - var config = row.modules.dataTree, - output = []; - - if (config.children) { - - if (!Array.isArray(config.children)) { - config.children = this.generateChildren(row); - } - - config.children.forEach(function (childRow) { - if (childRow instanceof Row) { - output.push(childRow.getComponent()); - } - }); - } - - return output; -}; - -DataTree.prototype.checkForRestyle = function (cell) { - if (!cell.row.cells.indexOf(cell)) { - if (cell.row.modules.dataTree.children !== false) { - cell.row.reinitialize(); - } - } -}; - -Tabulator.prototype.registerModule("dataTree", DataTree); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/data_tree.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/data_tree.min.js deleted file mode 100644 index 0cb62526c9..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/data_tree.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},DataTree=function(e){this.table=e,this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null,this.startOpen=function(){},this.displayIndex=0};DataTree.prototype.initialize=function(){var e=null,t=this.table.options;switch(this.field=t.dataTreeChildField,this.indent=t.dataTreeChildIndent,t.dataTreeBranchElement&&(!0===t.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof t.dataTreeBranchElement?(e=document.createElement("div"),e.innerHTML=t.dataTreeBranchElement,this.branchEl=e.firstChild):this.branchEl=t.dataTreeBranchElement),t.dataTreeCollapseElement?"string"==typeof t.dataTreeCollapseElement?(e=document.createElement("div"),e.innerHTML=t.dataTreeCollapseElement,this.collapseEl=e.firstChild):this.collapseEl=t.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.innerHTML="
"),t.dataTreeExpandElement?"string"==typeof t.dataTreeExpandElement?(e=document.createElement("div"),e.innerHTML=t.dataTreeExpandElement,this.expandEl=e.firstChild):this.expandEl=t.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.innerHTML="
"),_typeof(t.dataTreeStartExpanded)){case"boolean":this.startOpen=function(e,a){return t.dataTreeStartExpanded};break;case"function":this.startOpen=t.dataTreeStartExpanded;break;default:this.startOpen=function(e,a){return t.dataTreeStartExpanded[a]}}},DataTree.prototype.initializeRow=function(e){var t=void 0!==e.getData()[this.field];e.modules.dataTree={index:0,open:!!t&&this.startOpen(e.getComponent(),0),controlEl:!1,branchEl:!1,parent:!1,children:t}},DataTree.prototype.layoutRow=function(e){var t=e.getCells()[0],a=t.getElement(),n=e.modules.dataTree;a.style.paddingLeft=parseInt(window.getComputedStyle(a,null).getPropertyValue("padding-left"))+n.index*this.indent+"px",n.branchEl&&n.branchEl.parentNode.removeChild(n.branchEl),this.generateControlElement(e,a),n.index&&this.branchEl&&(n.branchEl=this.branchEl.cloneNode(!0),a.insertBefore(n.branchEl,a.firstChild),a.style.paddingLeft=parseInt(a.style.paddingLeft)+(n.branchEl.offsetWidth+n.branchEl.style.marginRight)*(n.index-1)+"px")},DataTree.prototype.generateControlElement=function(e,t){var a=this,n=e.modules.dataTree,t=t||e.getCells()[0].getElement(),r=n.controlEl;!1!==n.children&&(n.open?(n.controlEl=this.collapseEl.cloneNode(!0),n.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.collapseRow(e)})):(n.controlEl=this.expandEl.cloneNode(!0),n.controlEl.addEventListener("click",function(t){t.stopPropagation(),a.expandRow(e)})),n.controlEl.addEventListener("mousedown",function(e){e.stopPropagation()}),r&&r.parentNode===t?r.parentNode.replaceChild(n.controlEl,r):t.insertBefore(n.controlEl,t.firstChild))},DataTree.prototype.setDisplayIndex=function(e){this.displayIndex=e},DataTree.prototype.getDisplayIndex=function(){return this.displayIndex},DataTree.prototype.getRows=function(e){var t=this,a=[];return e.forEach(function(e,n){var r,o=e.modules.dataTree.children;a.push(e),o.index||!1===o.children||(r=t.getChildren(e),r.forEach(function(e){a.push(e)}))}),a},DataTree.prototype.getChildren=function(e){var t=this,a=e.modules.dataTree,n=[];return!1!==a.children&&a.open&&(Array.isArray(a.children)||(a.children=this.generateChildren(e)),a.children.forEach(function(e){n.push(e),t.getChildren(e).forEach(function(e){n.push(e)})})),n},DataTree.prototype.generateChildren=function(e){var t=this,a=[];return e.getData()[this.field].forEach(function(n){var r=new Row(n||{},t.table.rowManager);r.modules.dataTree.index=e.modules.dataTree.index+1,r.modules.dataTree.parent=e,r.modules.dataTree.open=t.startOpen(e,r.modules.dataTree.index),a.push(r)}),a},DataTree.prototype.expandRow=function(e,t){var a=e.modules.dataTree;!1!==a.children&&(a.open=!0,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(e.getComponent(),e.modules.dataTree.index))},DataTree.prototype.collapseRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open=!1,e.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(e.getComponent(),e.modules.dataTree.index))},DataTree.prototype.toggleRow=function(e){var t=e.modules.dataTree;!1!==t.children&&(t.open?this.collapseRow(e):this.expandRow(e))},DataTree.prototype.getTreeParent=function(e){return!!e.modules.dataTree.parent&&e.modules.dataTree.parent.getComponent()},DataTree.prototype.getTreeChildren=function(e){var t=e.modules.dataTree,a=[];return t.children&&(Array.isArray(t.children)||(t.children=this.generateChildren(e)),t.children.forEach(function(e){e instanceof Row&&a.push(e.getComponent())})),a},DataTree.prototype.checkForRestyle=function(e){e.row.cells.indexOf(e)||!1!==e.row.modules.dataTree.children&&e.row.reinitialize()},Tabulator.prototype.registerModule("dataTree",DataTree); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/download.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/download.js deleted file mode 100644 index f8af88236a..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/download.js +++ /dev/null @@ -1,736 +0,0 @@ -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var Download = function Download(table) { - this.table = table; //hold Tabulator object - this.fields = {}; //hold filed multi dimension arrays - this.columnsByIndex = []; //hold columns in their order in the table - this.columnsByField = {}; //hold columns with lookup by field name - this.config = {}; -}; - -//trigger file download -Download.prototype.download = function (type, filename, options, interceptCallback) { - var self = this, - downloadFunc = false; - this.processConfig(); - - function buildLink(data, mime) { - if (interceptCallback) { - interceptCallback(data); - } else { - self.triggerDownload(data, mime, type, filename); - } - } - - if (typeof type == "function") { - downloadFunc = type; - } else { - if (self.downloaders[type]) { - downloadFunc = self.downloaders[type]; - } else { - console.warn("Download Error - No such download type found: ", type); - } - } - - this.processColumns(); - - if (downloadFunc) { - downloadFunc.call(this, self.processDefinitions(), self.processData(), options || {}, buildLink, this.config); - } -}; - -Download.prototype.processConfig = function () { - var config = { //download config - columnGroups: true, - rowGroups: true - }; - - if (this.table.options.downloadConfig) { - for (var key in this.table.options.downloadConfig) { - config[key] = this.table.options.downloadConfig[key]; - } - } - - if (config.rowGroups && this.table.options.groupBy && this.table.modExists("groupRows")) { - this.config.rowGroups = true; - } - - if (config.columnGroups && this.table.columnManager.columns.length != this.table.columnManager.columnsByIndex.length) { - this.config.columnGroups = true; - } -}; - -Download.prototype.processColumns = function () { - var self = this; - - self.columnsByIndex = []; - self.columnsByField = {}; - - self.table.columnManager.columnsByIndex.forEach(function (column) { - - if (column.field && column.visible && column.definition.download !== false) { - self.columnsByIndex.push(column); - self.columnsByField[column.field] = column; - } - }); -}; - -Download.prototype.processDefinitions = function () { - var self = this, - processedDefinitions = []; - - if (this.config.columnGroups) { - self.table.columnManager.columns.forEach(function (column) { - var colData = self.processColumnGroup(column); - - if (colData) { - processedDefinitions.push(colData); - } - }); - } else { - self.columnsByIndex.forEach(function (column) { - if (column.download !== false) { - //isolate definiton from defintion object - processedDefinitions.push(self.processDefinition(column)); - } - }); - } - - return processedDefinitions; -}; - -Download.prototype.processColumnGroup = function (column) { - var _this = this; - - var subGroups = column.columns; - - var groupData = { - type: "group", - title: column.definition.title - }; - - if (subGroups.length) { - groupData.subGroups = []; - groupData.width = 0; - - subGroups.forEach(function (subGroup) { - var subGroupData = _this.processColumnGroup(subGroup); - - if (subGroupData) { - groupData.width += subGroupData.width; - groupData.subGroups.push(subGroupData); - } - }); - - if (!groupData.width) { - return false; - } - } else { - if (column.field && column.visible && column.definition.download !== false) { - groupData.width = 1; - groupData.definition = this.processDefinition(column); - } else { - return false; - } - } - - return groupData; -}; - -Download.prototype.processDefinition = function (column) { - var def = {}; - - for (var key in column.definition) { - def[key] = column.definition[key]; - } - - if (typeof column.definition.downloadTitle != "undefined") { - def.title = column.definition.downloadTitle; - } - - return def; -}; - -Download.prototype.processData = function () { - var _this2 = this; - - var self = this, - data = [], - groups = []; - - if (this.config.rowGroups) { - groups = this.table.modules.groupRows.getGroups(); - - groups.forEach(function (group) { - data.push(_this2.processGroupData(group)); - }); - } else { - data = self.table.rowManager.getData(true, "download"); - } - - //bulk data processing - if (typeof self.table.options.downloadDataFormatter == "function") { - data = self.table.options.downloadDataFormatter(data); - } - - return data; -}; - -Download.prototype.processGroupData = function (group) { - var _this3 = this; - - var subGroups = group.getSubGroups(); - - var groupData = { - type: "group", - key: group.key - }; - - if (subGroups.length) { - groupData.subGroups = []; - - subGroups.forEach(function (subGroup) { - groupData.subGroups.push(_this3.processGroupData(subGroup)); - }); - } else { - groupData.rows = group.getData(true, "download"); - } - - return groupData; -}; - -Download.prototype.triggerDownload = function (data, mime, type, filename) { - var element = document.createElement('a'), - blob = new Blob([data], { type: mime }), - filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type); - - blob = this.table.options.downloadReady.call(this.table, data, blob); - - if (blob) { - - if (navigator.msSaveOrOpenBlob) { - navigator.msSaveOrOpenBlob(blob, filename); - } else { - element.setAttribute('href', window.URL.createObjectURL(blob)); - - //set file title - element.setAttribute('download', filename); - - //trigger download - element.style.display = 'none'; - document.body.appendChild(element); - element.click(); - - //remove temporary link element - document.body.removeChild(element); - } - - if (this.table.options.downloadComplete) { - this.table.options.downloadComplete(); - } - } -}; - -//nested field lookup -Download.prototype.getFieldValue = function (field, data) { - var column = this.columnsByField[field]; - - if (column) { - return column.getFieldValue(data); - } - - return false; -}; - -Download.prototype.commsReceived = function (table, action, data) { - switch (action) { - case "intercept": - this.download(data.type, "", data.options, data.intercept); - break; - } -}; - -//downloaders -Download.prototype.downloaders = { - csv: function csv(columns, data, options, setFileContents, config) { - var self = this, - titles = [], - fields = [], - delimiter = options && options.delimiter ? options.delimiter : ",", - fileContents; - - //build column headers - function parseSimpleTitles() { - columns.forEach(function (column) { - titles.push('"' + String(column.title).split('"').join('""') + '"'); - fields.push(column.field); - }); - } - - function parseColumnGroup(column, level) { - if (column.subGroups) { - column.subGroups.forEach(function (subGroup) { - parseColumnGroup(subGroup, level + 1); - }); - } else { - titles.push('"' + String(column.title).split('"').join('""') + '"'); - fields.push(column.definition.field); - } - } - - if (config.columnGroups) { - console.warn("Download Warning - CSV downloader cannot process column groups"); - - columns.forEach(function (column) { - parseColumnGroup(column, 0); - }); - } else { - parseSimpleTitles(); - } - - //generate header row - fileContents = [titles.join(delimiter)]; - - function parseRows(data) { - //generate each row of the table - data.forEach(function (row) { - var rowData = []; - - fields.forEach(function (field) { - var value = self.getFieldValue(field, row); - - switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { - case "object": - value = JSON.stringify(value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = value; - } - - //escape quotation marks - rowData.push('"' + String(value).split('"').join('""') + '"'); - }); - - fileContents.push(rowData.join(delimiter)); - }); - } - - function parseGroup(group) { - if (group.subGroups) { - group.subGroups.forEach(function (subGroup) { - parseGroup(subGroup); - }); - } else { - parseRows(group.rows); - } - } - - if (config.rowGroups) { - console.warn("Download Warning - CSV downloader cannot process row groups"); - - data.forEach(function (group) { - parseGroup(group); - }); - } else { - parseRows(data); - } - - setFileContents(fileContents.join("\n"), "text/csv"); - }, - - json: function json(columns, data, options, setFileContents, config) { - var fileContents = JSON.stringify(data, null, '\t'); - - setFileContents(fileContents, "application/json"); - }, - - pdf: function pdf(columns, data, options, setFileContents, config) { - var self = this, - fields = [], - header = [], - body = [], - table = "", - groupRowIndexs = [], - autoTableParams = {}, - rowGroupStyles = {}, - jsPDFParams = options.jsPDF || {}, - title = options && options.title ? options.title : ""; - - if (!jsPDFParams.orientation) { - jsPDFParams.orientation = options.orientation || "landscape"; - } - - if (!jsPDFParams.unit) { - jsPDFParams.unit = "pt"; - } - - //build column headers - function parseSimpleTitles() { - columns.forEach(function (column) { - if (column.field) { - header.push(column.title || ""); - fields.push(column.field); - } - }); - } - - function parseColumnGroup(column, level) { - if (column.subGroups) { - column.subGroups.forEach(function (subGroup) { - parseColumnGroup(subGroup, level + 1); - }); - } else { - header.push(column.title || ""); - fields.push(column.definition.field); - } - } - - if (config.columnGroups) { - console.warn("Download Warning - PDF downloader cannot process column groups"); - - columns.forEach(function (column) { - parseColumnGroup(column, 0); - }); - } else { - parseSimpleTitles(); - } - - function parseValue(value) { - switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { - case "object": - value = JSON.stringify(value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = value; - } - - return value; - } - - function parseRows(data) { - //build table rows - data.forEach(function (row) { - var rowData = []; - - fields.forEach(function (field) { - var value = self.getFieldValue(field, row); - rowData.push(parseValue(value)); - }); - - body.push(rowData); - }); - } - - function parseGroup(group) { - var groupData = []; - - groupData.push(parseValue(group.key)); - - groupRowIndexs.push(body.length); - - body.push(groupData); - - if (group.subGroups) { - group.subGroups.forEach(function (subGroup) { - parseGroup(subGroup); - }); - } else { - parseRows(group.rows); - } - } - - if (config.rowGroups) { - data.forEach(function (group) { - parseGroup(group); - }); - } else { - parseRows(data); - } - - var doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables - - if (options && options.autoTable) { - if (typeof options.autoTable === "function") { - autoTableParams = options.autoTable(doc) || {}; - } else { - autoTableParams = options.autoTable; - } - } - - if (config.rowGroups) { - var createdCell = function createdCell(cell, data) { - if (groupRowIndexs.indexOf(data.row.index) > -1) { - for (var key in rowGroupStyles) { - cell.styles[key] = rowGroupStyles[key]; - } - } - }; - - rowGroupStyles = options.rowGroupStyles || { - fontStyle: "bold", - fontSize: 12, - cellPadding: 6, - fillColor: 220 - }; - - if (!autoTableParams.createdCell) { - autoTableParams.createdCell = createdCell; - } else { - var createdCellHolder = autoTableParams.createdCell; - - autoTableParams.createdCell = function (cell, data) { - createdCell(cell, data); - createdCellHolder(cell, data); - }; - } - } - - if (title) { - autoTableParams.addPageContent = function (data) { - doc.text(title, 40, 30); - }; - } - - doc.autoTable(header, body, autoTableParams); - - setFileContents(doc.output("arraybuffer"), "application/pdf"); - }, - - xlsx: function xlsx(columns, data, options, setFileContents, config) { - var self = this, - sheetName = options.sheetName || "Sheet1", - workbook = { SheetNames: [], Sheets: {} }, - groupRowIndexs = [], - groupColumnIndexs = [], - output; - - function generateSheet() { - var titles = [], - fields = [], - rows = [], - worksheet; - - //convert rows to worksheet - function rowsToSheet() { - var sheet = {}; - var range = { s: { c: 0, r: 0 }, e: { c: fields.length, r: rows.length } }; - - XLSX.utils.sheet_add_aoa(sheet, rows); - - sheet['!ref'] = XLSX.utils.encode_range(range); - - var merges = generateMerges(); - - if (merges.length) { - sheet["!merges"] = merges; - } - - return sheet; - } - - function parseSimpleTitles() { - //get field lists - columns.forEach(function (column) { - titles.push(column.title); - fields.push(column.field); - }); - - rows.push(titles); - } - - function parseColumnGroup(column, level) { - - if (typeof titles[level] === "undefined") { - titles[level] = []; - } - - if (typeof groupColumnIndexs[level] === "undefined") { - groupColumnIndexs[level] = []; - } - - if (column.width > 1) { - - groupColumnIndexs[level].push({ - type: "hoz", - start: titles[level].length, - end: titles[level].length + column.width - 1 - }); - } - - titles[level].push(column.title); - - if (column.subGroups) { - column.subGroups.forEach(function (subGroup) { - parseColumnGroup(subGroup, level + 1); - }); - } else { - fields.push(column.definition.field); - padColumnTitles(fields.length - 1, level); - - groupColumnIndexs[level].push({ - type: "vert", - start: fields.length - 1 - }); - } - } - - function padColumnTitles() { - var max = 0; - - titles.forEach(function (title) { - var len = title.length; - if (len > max) { - max = len; - } - }); - - titles.forEach(function (title) { - var len = title.length; - if (len < max) { - for (var i = len; i < max; i++) { - title.push(""); - } - } - }); - } - - if (config.columnGroups) { - columns.forEach(function (column) { - parseColumnGroup(column, 0); - }); - - titles.forEach(function (title) { - rows.push(title); - }); - } else { - parseSimpleTitles(); - } - - function generateMerges() { - var output = []; - - groupRowIndexs.forEach(function (index) { - output.push({ s: { r: index, c: 0 }, e: { r: index, c: fields.length - 1 } }); - }); - - groupColumnIndexs.forEach(function (merges, level) { - merges.forEach(function (merge) { - if (merge.type === "hoz") { - output.push({ s: { r: level, c: merge.start }, e: { r: level, c: merge.end } }); - } else { - if (level != titles.length - 1) { - output.push({ s: { r: level, c: merge.start }, e: { r: titles.length - 1, c: merge.start } }); - } - } - }); - }); - - return output; - } - - //generate each row of the table - function parseRows(data) { - data.forEach(function (row) { - var rowData = []; - - fields.forEach(function (field) { - var value = self.getFieldValue(field, row); - - rowData.push((typeof value === "undefined" ? "undefined" : _typeof(value)) === "object" ? JSON.stringify(value) : value); - }); - - rows.push(rowData); - }); - } - - function parseGroup(group) { - var groupData = []; - - groupData.push(group.key); - - groupRowIndexs.push(rows.length); - - rows.push(groupData); - - if (group.subGroups) { - group.subGroups.forEach(function (subGroup) { - parseGroup(subGroup); - }); - } else { - parseRows(group.rows); - } - } - - if (config.rowGroups) { - data.forEach(function (group) { - parseGroup(group); - }); - } else { - parseRows(data); - } - - worksheet = rowsToSheet(); - - return worksheet; - } - - if (options.sheetOnly) { - setFileContents(generateSheet()); - return; - } - - if (options.sheets) { - for (var sheet in options.sheets) { - - if (options.sheets[sheet] === true) { - workbook.SheetNames.push(sheet); - workbook.Sheets[sheet] = generateSheet(); - } else { - - workbook.SheetNames.push(sheet); - - this.table.modules.comms.send(options.sheets[sheet], "download", "intercept", { - type: "xlsx", - options: { sheetOnly: true }, - intercept: function intercept(data) { - workbook.Sheets[sheet] = data; - } - }); - } - } - } else { - workbook.SheetNames.push(sheetName); - workbook.Sheets[sheetName] = generateSheet(); - } - - //convert workbook to binary array - function s2ab(s) { - var buf = new ArrayBuffer(s.length); - var view = new Uint8Array(buf); - for (var i = 0; i != s.length; ++i) { - view[i] = s.charCodeAt(i) & 0xFF; - }return buf; - } - - output = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' }); - - setFileContents(s2ab(output), "application/octet-stream"); - } - -}; - -Tabulator.prototype.registerModule("download", Download); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/download.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/download.min.js deleted file mode 100644 index 3c10e672b4..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/download.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},Download=function(o){this.table=o,this.fields={},this.columnsByIndex=[],this.columnsByField={},this.config={}};Download.prototype.download=function(o,n,t,e){function i(t,i){e?e(t):r.triggerDownload(t,i,o,n)}var r=this,s=!1;this.processConfig(),"function"==typeof o?s=o:r.downloaders[o]?s=r.downloaders[o]:console.warn("Download Error - No such download type found: ",o),this.processColumns(),s&&s.call(this,r.processDefinitions(),r.processData(),t||{},i,this.config)},Download.prototype.processConfig=function(){var o={columnGroups:!0,rowGroups:!0};if(this.table.options.downloadConfig)for(var n in this.table.options.downloadConfig)o[n]=this.table.options.downloadConfig[n];o.rowGroups&&this.table.options.groupBy&&this.table.modExists("groupRows")&&(this.config.rowGroups=!0),o.columnGroups&&this.table.columnManager.columns.length!=this.table.columnManager.columnsByIndex.length&&(this.config.columnGroups=!0)},Download.prototype.processColumns=function(){var o=this;o.columnsByIndex=[],o.columnsByField={},o.table.columnManager.columnsByIndex.forEach(function(n){n.field&&n.visible&&!1!==n.definition.download&&(o.columnsByIndex.push(n),o.columnsByField[n.field]=n)})},Download.prototype.processDefinitions=function(){var o=this,n=[];return this.config.columnGroups?o.table.columnManager.columns.forEach(function(t){var e=o.processColumnGroup(t);e&&n.push(e)}):o.columnsByIndex.forEach(function(t){!1!==t.download&&n.push(o.processDefinition(t))}),n},Download.prototype.processColumnGroup=function(o){var n=this,t=o.columns,e={type:"group",title:o.definition.title};if(t.length){if(e.subGroups=[],e.width=0,t.forEach(function(o){var t=n.processColumnGroup(o);t&&(e.width+=t.width,e.subGroups.push(t))}),!e.width)return!1}else{if(!o.field||!o.visible||!1===o.definition.download)return!1;e.width=1,e.definition=this.processDefinition(o)}return e},Download.prototype.processDefinition=function(o){var n={};for(var t in o.definition)n[t]=o.definition[t];return void 0!==o.definition.downloadTitle&&(n.title=o.definition.downloadTitle),n},Download.prototype.processData=function(){var o=this,n=this,t=[],e=[];return this.config.rowGroups?(e=this.table.modules.groupRows.getGroups(),e.forEach(function(n){t.push(o.processGroupData(n))})):t=n.table.rowManager.getData(!0,"download"),"function"==typeof n.table.options.downloadDataFormatter&&(t=n.table.options.downloadDataFormatter(t)),t},Download.prototype.processGroupData=function(o){var n=this,t=o.getSubGroups(),e={type:"group",key:o.key};return t.length?(e.subGroups=[],t.forEach(function(o){e.subGroups.push(n.processGroupData(o))})):e.rows=o.getData(!0,"download"),e},Download.prototype.triggerDownload=function(o,n,t,e){var i=document.createElement("a"),r=new Blob([o],{type:n}),e=e||"Tabulator."+("function"==typeof t?"txt":t);(r=this.table.options.downloadReady.call(this.table,o,r))&&(navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(r,e):(i.setAttribute("href",window.URL.createObjectURL(r)),i.setAttribute("download",e),i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},Download.prototype.getFieldValue=function(o,n){var t=this.columnsByField[o];return!!t&&t.getFieldValue(n)},Download.prototype.commsReceived=function(o,n,t){switch(n){case"intercept":this.download(t.type,"",t.options,t.intercept)}},Download.prototype.downloaders={csv:function(o,n,t,e,i){function r(o,n){o.subGroups?o.subGroups.forEach(function(o){r(o,n+1)}):(c.push('"'+String(o.title).split('"').join('""')+'"'),f.push(o.definition.field))}function s(o){o.forEach(function(o){var n=[];f.forEach(function(t){var e=l.getFieldValue(t,o);switch(void 0===e?"undefined":_typeof(e)){case"object":e=JSON.stringify(e);break;case"undefined":case"null":e="";break;default:e=e}n.push('"'+String(e).split('"').join('""')+'"')}),a.push(n.join(p))})}function u(o){o.subGroups?o.subGroups.forEach(function(o){u(o)}):s(o.rows)}var a,l=this,c=[],f=[],p=t&&t.delimiter?t.delimiter:",";i.columnGroups?(console.warn("Download Warning - CSV downloader cannot process column groups"),o.forEach(function(o){r(o,0)})):function(){o.forEach(function(o){c.push('"'+String(o.title).split('"').join('""')+'"'),f.push(o.field)})}(),a=[c.join(p)],i.rowGroups?(console.warn("Download Warning - CSV downloader cannot process row groups"),n.forEach(function(o){u(o)})):s(n),e(a.join("\n"),"text/csv")},json:function(o,n,t,e,i){e(JSON.stringify(n,null,"\t"),"application/json")},pdf:function(o,n,t,e,i){function r(o,n){o.subGroups?o.subGroups.forEach(function(o){r(o,n+1)}):(f.push(o.title||""),c.push(o.definition.field))}function s(o){switch(void 0===o?"undefined":_typeof(o)){case"object":o=JSON.stringify(o);break;case"undefined":case"null":o="";break;default:o=o}return o}function u(o){o.forEach(function(o){var n=[];c.forEach(function(t){var e=l.getFieldValue(t,o);n.push(s(e))}),p.push(n)})}function a(o){var n=[];n.push(s(o.key)),d.push(p.length),p.push(n),o.subGroups?o.subGroups.forEach(function(o){a(o)}):u(o.rows)}var l=this,c=[],f=[],p=[],d=[],h={},w={},y=t.jsPDF||{},g=t&&t.title?t.title:"";y.orientation||(y.orientation=t.orientation||"landscape"),y.unit||(y.unit="pt"),i.columnGroups?(console.warn("Download Warning - PDF downloader cannot process column groups"),o.forEach(function(o){r(o,0)})):function(){o.forEach(function(o){o.field&&(f.push(o.title||""),c.push(o.field))})}(),i.rowGroups?n.forEach(function(o){a(o)}):u(n);var b=new jsPDF(y);if(t&&t.autoTable&&(h="function"==typeof t.autoTable?t.autoTable(b)||{}:t.autoTable),i.rowGroups){var m=function(o,n){if(d.indexOf(n.row.index)>-1)for(var t in w)o.styles[t]=w[t]};if(w=t.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},h.createdCell){var v=h.createdCell;h.createdCell=function(o,n){m(o,n),v(o,n)}}else h.createdCell=m}g&&(h.addPageContent=function(o){b.text(g,40,30)}),b.autoTable(f,p,h),e(b.output("arraybuffer"),"application/pdf")},xlsx:function(o,n,t,e,i){function r(){function t(o,n){void 0===l[n]&&(l[n]=[]),void 0===f[n]&&(f[n]=[]),o.width>1&&f[n].push({type:"hoz",start:l[n].length,end:l[n].length+o.width-1}),l[n].push(o.title),o.subGroups?o.subGroups.forEach(function(o){t(o,n+1)}):(p.push(o.definition.field),e(p.length),f[n].push({type:"vert",start:p.length-1}))}function e(){var o=0;l.forEach(function(n){var t=n.length;t>o&&(o=t)}),l.forEach(function(n){var t=n.length;if(t 0) { - setCurrentItem(dataItems[index - 1]); - } - break; - - case 40: - //down arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - - index = dataItems.indexOf(currentItem); - - if (index < dataItems.length - 1) { - if (index == -1) { - setCurrentItem(dataItems[0]); - } else { - setCurrentItem(dataItems[index + 1]); - } - } - break; - - case 13: - //enter - chooseItem(); - break; - - case 27: - //escape - cancelItem(); - break; - } - }); - - input.addEventListener("blur", function (e) { - if (blurable) { - cancelItem(); - } - }); - - input.addEventListener("focus", function (e) { - showList(); - }); - - //style list element - listEl = document.createElement("div"); - listEl.classList.add("tabulator-edit-select-list"); - - onRendered(function () { - input.style.height = "100%"; - input.focus(); - }); - - return input; - }, - - //autocomplete - autocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) { - var self = this, - cellEl = cell.getElement(), - initialValue = cell.getValue(), - input = document.createElement("input"), - listEl = document.createElement("div"), - allItems = [], - displayItems = [], - currentItem = {}, - blurable = true; - - function getUniqueColumnValues() { - var output = {}, - column = cell.getColumn()._getSelf(), - data = self.table.getData(); - - data.forEach(function (row) { - var val = column.getFieldValue(row); - - if (val !== null && typeof val !== "undefined" && val !== "") { - output[val] = true; - } - }); - - return Object.keys(output); - } - - function parseItems(inputValues, curentValue) { - var itemList = []; - - if (Array.isArray(inputValues)) { - inputValues.forEach(function (value) { - var item = { - title: editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value, - value: value, - element: false - }; - - if (item.value === curentValue) { - setCurrentItem(item); - } - - itemList.push(item); - }); - } else { - for (var key in inputValues) { - var item = { - title: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key], - value: key, - element: false - }; - - if (item.value === curentValue) { - setCurrentItem(item); - } - - itemList.push(item); - } - } - - allItems = itemList; - } - - function filterList(term) { - var matches = []; - - if (editorParams.searchFunc) { - matches = editorParams.searchFunc(term, values); - } else { - if (term === "") { - - if (editorParams.showListOnEmpty) { - allItems.forEach(function (item) { - matches.push(item); - }); - } - } else { - allItems.forEach(function (item) { - - if (item.value !== null || typeof item.value !== "undefined") { - if (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1) { - matches.push(item); - } - } - }); - } - } - - displayItems = matches; - - fillList(); - } - - function fillList() { - var current = false; - - while (listEl.firstChild) { - listEl.removeChild(listEl.firstChild); - }displayItems.forEach(function (item) { - var el = item.element; - - if (!el) { - el = document.createElement("div"); - el.classList.add("tabulator-edit-select-list-item"); - el.tabIndex = 0; - el.innerHTML = item.title; - - el.addEventListener("click", function () { - setCurrentItem(item); - chooseItem(); - }); - - el.addEventListener("mousedown", function () { - blurable = false; - - setTimeout(function () { - blurable = true; - }, 10); - }); - - item.element = el; - - if (item === currentItem) { - item.element.classList.add("active"); - current = true; - } - } - - listEl.appendChild(el); - }); - - if (!current) { - setCurrentItem(false); - } - } - - function setCurrentItem(item, showInputValue) { - if (currentItem && currentItem.element) { - currentItem.element.classList.remove("active"); - } - - currentItem = item; - - if (item && item.element) { - item.element.classList.add("active"); - } - } - - function chooseItem() { - hideList(); - - if (currentItem) { - if (initialValue !== currentItem.value) { - initialValue = currentItem.value; - input.value = currentItem.value; - success(input.value); - } else { - cancel(); - } - } else { - if (editorParams.freetext) { - initialValue = input.value; - success(input.value); - } else { - if (editorParams.allowEmpty && input.value === "") { - initialValue = input.value; - success(input.value); - } else { - cancel(); - } - } - } - } - - function cancelItem() { - hideList(); - cancel(); - } - - function showList() { - if (!listEl.parentNode) { - while (listEl.firstChild) { - listEl.removeChild(listEl.firstChild); - }if (editorParams.values === true) { - parseItems(getUniqueColumnValues(), initialValue); - } else { - parseItems(editorParams.values || [], initialValue); - } - - var offset = Tabulator.prototype.helpers.elOffset(cellEl); - - listEl.style.minWidth = cellEl.offsetWidth + "px"; - - listEl.style.top = offset.top + cellEl.offsetHeight + "px"; - listEl.style.left = offset.left + "px"; - document.body.appendChild(listEl); - } - } - - function hideList() { - if (listEl.parentNode) { - listEl.parentNode.removeChild(listEl); - } - } - - //style input - input.setAttribute("type", "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - //allow key based navigation - input.addEventListener("keydown", function (e) { - var index; - - switch (e.keyCode) { - case 38: - //up arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - - index = displayItems.indexOf(currentItem); - - if (index > 0) { - setCurrentItem(displayItems[index - 1]); - } else { - setCurrentItem(false); - } - break; - - case 40: - //down arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - - index = displayItems.indexOf(currentItem); - - if (index < displayItems.length - 1) { - if (index == -1) { - setCurrentItem(displayItems[0]); - } else { - setCurrentItem(displayItems[index + 1]); - } - } - break; - - case 13: - //enter - chooseItem(); - break; - - case 27: - //escape - cancelItem(); - break; - } - }); - - input.addEventListener("keyup", function (e) { - - switch (e.keyCode) { - case 38: //up arrow - case 37: //left arrow - case 39: //up arrow - case 40: //right arrow - case 13: //enter - case 27: - //escape - break; - - default: - filterList(input.value); - } - }); - - input.addEventListener("blur", function (e) { - if (blurable) { - chooseItem(); - } - }); - - input.addEventListener("focus", function (e) { - showList(); - input.value = initialValue; - filterList(initialValue); - }); - - //style list element - listEl = document.createElement("div"); - listEl.classList.add("tabulator-edit-select-list"); - - onRendered(function () { - input.style.height = "100%"; - input.focus(); - }); - - return input; - }, - - //start rating - star: function star(cell, onRendered, success, cancel, editorParams) { - var self = this, - element = cell.getElement(), - value = cell.getValue(), - maxStars = element.getElementsByTagName("svg").length || 5, - size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14, - stars = [], - starsHolder = document.createElement("div"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"); - - //change star type - function starChange(val) { - stars.forEach(function (star, i) { - if (i < val) { - if (self.table.browser == "ie") { - star.setAttribute("class", "tabulator-star-active"); - } else { - star.classList.replace("tabulator-star-inactive", "tabulator-star-active"); - } - - star.innerHTML = ''; - } else { - if (self.table.browser == "ie") { - star.setAttribute("class", "tabulator-star-inactive"); - } else { - star.classList.replace("tabulator-star-active", "tabulator-star-inactive"); - } - - star.innerHTML = ''; - } - }); - } - - //build stars - function buildStar(i) { - var nextStar = star.cloneNode(true); - - stars.push(nextStar); - - nextStar.addEventListener("mouseover", function (e) { - e.stopPropagation(); - starChange(i); - }); - - nextStar.addEventListener("click", function (e) { - e.stopPropagation(); - success(i); - }); - - starsHolder.appendChild(nextStar); - } - - //handle keyboard navigation value change - function changeValue(val) { - value = val; - starChange(val); - } - - //style cell - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - //style holding element - starsHolder.style.verticalAlign = "middle"; - starsHolder.style.display = "inline-block"; - starsHolder.style.padding = "4px"; - - //style star - star.setAttribute("width", size); - star.setAttribute("height", size); - star.setAttribute("viewBox", "0 0 512 512"); - star.setAttribute("xml:space", "preserve"); - star.style.padding = "0 1px"; - - //create correct number of stars - for (var i = 1; i <= maxStars; i++) { - buildStar(i); - } - - //ensure value does not exceed number of stars - value = Math.min(parseInt(value), maxStars); - - // set initial styling of stars - starChange(value); - - starsHolder.addEventListener("mouseover", function (e) { - starChange(0); - }); - - starsHolder.addEventListener("click", function (e) { - success(0); - }); - - element.addEventListener("blur", function (e) { - cancel(); - }); - - //allow key based navigation - element.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 39: - //right arrow - changeValue(value + 1); - break; - - case 37: - //left arrow - changeValue(value - 1); - break; - - case 13: - //enter - success(value); - break; - - case 27: - //escape - cancel(); - break; - } - }); - - return starsHolder; - }, - - //draggable progress bar - progress: function progress(cell, onRendered, success, cancel, editorParams) { - var element = cell.getElement(), - max = typeof editorParams.max === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("max") || 100 : editorParams.max, - min = typeof editorParams.min === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("min") || 0 : editorParams.min, - percent = (max - min) / 100, - value = cell.getValue() || 0, - handle = document.createElement("div"), - bar = document.createElement("div"), - mouseDrag, - mouseDragWidth; - - //set new value - function updateValue() { - var calcVal = percent * Math.round(bar.offsetWidth / (element.clientWidth / 100)) + min; - success(calcVal); - element.setAttribute("aria-valuenow", calcVal); - element.setAttribute("aria-label", value); - } - - //style handle - handle.style.position = "absolute"; - handle.style.right = "0"; - handle.style.top = "0"; - handle.style.bottom = "0"; - handle.style.width = "5px"; - handle.classList.add("tabulator-progress-handle"); - - //style bar - bar.style.display = "inline-block"; - bar.style.position = "absolute"; - bar.style.top = "8px"; - bar.style.bottom = "8px"; - bar.style.left = "4px"; - bar.style.marginRight = "4px"; - bar.style.backgroundColor = "#488CE9"; - bar.style.maxWidth = "100%"; - bar.style.minWidth = "0%"; - - //style cell - element.style.padding = "0 4px"; - - //make sure value is in range - value = Math.min(parseFloat(value), max); - value = Math.max(parseFloat(value), min); - - //workout percentage - value = 100 - Math.round((value - min) / percent); - bar.style.right = value + "%"; - - element.setAttribute("aria-valuemin", min); - element.setAttribute("aria-valuemax", max); - - bar.appendChild(handle); - - handle.addEventListener("mousedown", function (e) { - mouseDrag = e.screenX; - mouseDragWidth = bar.offsetWidth; - }); - - handle.addEventListener("mouseover", function () { - handle.style.cursor = "ew-resize"; - }); - - element.addEventListener("mousemove", function (e) { - if (mouseDrag) { - bar.style.width = mouseDragWidth + e.screenX - mouseDrag + "px"; - } - }); - - element.addEventListener("mouseup", function (e) { - if (mouseDrag) { - e.stopPropagation(); - e.stopImmediatePropagation(); - - mouseDrag = false; - mouseDragWidth = false; - - updateValue(); - } - }); - - //allow key based navigation - element.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 39: - //right arrow - bar.style.width = bar.clientWidth + element.clientWidth / 100 + "px"; - break; - - case 37: - //left arrow - bar.style.width = bar.clientWidth - element.clientWidth / 100 + "px"; - break; - - case 13: - //enter - updateValue(); - break; - - case 27: - //escape - cancel(); - break; - - } - }); - - element.addEventListener("blur", function () { - cancel(); - }); - - return bar; - }, - - //checkbox - tickCross: function tickCross(cell, onRendered, success, cancel, editorParams) { - var value = cell.getValue(), - input = document.createElement("input"), - tristate = editorParams.tristate, - indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue, - indetermState = false; - - input.setAttribute("type", "checkbox"); - input.style.marginTop = "5px"; - input.style.boxSizing = "border-box"; - - input.value = value; - - if (tristate && (typeof value === "undefined" || value === indetermValue || value === "")) { - indetermState = true; - input.indeterminate = true; - } - - if (this.table.browser != "firefox") { - //prevent blur issue on mac firefox - onRendered(function () { - input.focus(); - }); - } - - input.checked = value === true || value === "true" || value === "True" || value === 1; - - function setValue(blur) { - if (tristate) { - if (!blur) { - if (input.checked && !indetermState) { - input.checked = false; - input.indeterminate = true; - indetermState = true; - return indetermValue; - } else { - indetermState = false; - return input.checked; - } - } else { - if (indetermState) { - return indetermValue; - } else { - return input.checked; - } - } - } else { - return input.checked; - } - } - - //submit new value on blur - input.addEventListener("change", function (e) { - success(setValue()); - }); - - input.addEventListener("blur", function (e) { - success(setValue(true)); - }); - - //submit new value on enter - input.addEventListener("keydown", function (e) { - if (e.keyCode == 13) { - success(setValue()); - } - if (e.keyCode == 27) { - cancel(); - } - }); - - return input; - } -}; - -Tabulator.prototype.registerModule("edit", Edit); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/edit.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/edit.min.js deleted file mode 100644 index 0081276b77..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/edit.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Edit=function(e){this.table=e,this.currentCell=!1,this.mouseClick=!1,this.recursionBlock=!1,this.invalidEdit=!1};Edit.prototype.initializeColumn=function(e){var t=this,i={editor:!1,blocked:!1,check:e.definition.editable,params:e.definition.editorParams||{}};switch(_typeof(e.definition.editor)){case"string":"tick"===e.definition.editor&&(e.definition.editor="tickCross",console.warn("DEPRECATION WANRING - the tick editor has been depricated, please use the tickCross editor")),t.editors[e.definition.editor]?i.editor=t.editors[e.definition.editor]:console.warn("Editor Error - No such editor found: ",e.definition.editor);break;case"function":i.editor=e.definition.editor;break;case"boolean":!0===e.definition.editor&&("function"!=typeof e.definition.formatter?("tick"===e.definition.formatter&&(e.definition.formatter="tickCross",console.warn("DEPRECATION WANRING - the tick editor has been depricated, please use the tickCross editor")),t.editors[e.definition.formatter]?i.editor=t.editors[e.definition.formatter]:i.editor=t.editors.input):console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ",e.definition.formatter))}i.editor&&(e.modules.edit=i)},Edit.prototype.getCurrentCell=function(){return!!this.currentCell&&this.currentCell.getComponent()},Edit.prototype.clearEditor=function(){var e,t=this.currentCell;if(this.invalidEdit=!1,t){for(this.currentCell=!1,e=t.getElement(),e.classList.remove("tabulator-validation-fail"),e.classList.remove("tabulator-editing");e.firstChild;)e.removeChild(e.firstChild);t.row.getElement().classList.remove("tabulator-row-editing")}},Edit.prototype.cancelEdit=function(){if(this.currentCell){var e=this.currentCell,t=this.currentCell.getComponent();this.clearEditor(),e.setValueActual(e.getValue()),e.column.cellEvents.cellEditCancelled&&e.column.cellEvents.cellEditCancelled.call(this.table,t),this.table.options.cellEditCancelled.call(this.table,t)}},Edit.prototype.bindEditor=function(e){var t=this,i=e.getElement();i.setAttribute("tabindex",0),i.addEventListener("click",function(e){i.classList.contains("tabulator-editing")||i.focus()}),i.addEventListener("mousedown",function(e){t.mouseClick=!0}),i.addEventListener("focus",function(i){t.recursionBlock||t.edit(e,i,!1)})},Edit.prototype.focusCellNoEvent=function(e){this.recursionBlock=!0,e.getElement().focus(),this.recursionBlock=!1},Edit.prototype.editCell=function(e,t){this.focusCellNoEvent(e),this.edit(e,!1,t)},Edit.prototype.edit=function(e,t,i){function n(t){if(d.currentCell===e){var i=!0;e.column.modules.validate&&d.table.modExists("validate")&&(i=d.table.modules.validate.validate(e.column.modules.validate,e.getComponent(),t)),!0===i?(d.clearEditor(),e.setValue(t,!0),d.table.options.dataTree&&d.table.modExists("dataTree")&&d.table.modules.dataTree.checkForRestyle(e)):(d.invalidEdit=!0,m.classList.add("tabulator-validation-fail"),d.focusCellNoEvent(e),u(),d.table.options.validationFailed.call(d.table,e.getComponent(),t,i))}}function o(){d.currentCell===e&&(d.cancelEdit(),d.table.options.dataTree&&d.table.modExists("dataTree")&&d.table.modules.dataTree.checkForRestyle(e))}function a(e){u=e}var l,r,s,d=this,c=!0,u=function(){},m=e.getElement();if(this.currentCell)return void(this.invalidEdit||this.cancelEdit());if(e.column.modules.edit.blocked)return this.mouseClick=!1,m.blur(),!1;switch(t&&t.stopPropagation(),_typeof(e.column.modules.edit.check)){case"function":c=e.column.modules.edit.check(e.getComponent());break;case"boolean":c=e.column.modules.edit.check}if(c||i){if(d.cancelEdit(),d.currentCell=e,r=e.getComponent(),this.mouseClick&&(this.mouseClick=!1,e.column.cellEvents.cellClick&&e.column.cellEvents.cellClick.call(this.table,t,r)),e.column.cellEvents.cellEditing&&e.column.cellEvents.cellEditing.call(this.table,r),d.table.options.cellEditing.call(this.table,r),s="function"==typeof e.column.modules.edit.params?e.column.modules.edit.params(r):e.column.modules.edit.params,!1===(l=e.column.modules.edit.editor.call(d,r,a,n,o,s)))return m.blur(),!1;if(!(l instanceof Node))return console.warn("Edit Error - Editor should return an instance of Node, the editor returned:",l),m.blur(),!1;for(m.classList.add("tabulator-editing"),e.row.getElement().classList.add("tabulator-row-editing");m.firstChild;)m.removeChild(m.firstChild);m.appendChild(l),u();for(var f=m.children,v=0;v0&&s(y[t-1]);break;case 40:e.stopImmediatePropagation(),e.stopPropagation(),t=y.indexOf(g),t-1&&t.push(i)}),g=t,s()}function s(){for(var e=!1;y.firstChild;)y.removeChild(y.firstChild);g.forEach(function(t){var i=t.element;i||(i=document.createElement("div"),i.classList.add("tabulator-edit-select-list-item"),i.tabIndex=0,i.innerHTML=t.title,i.addEventListener("click",function(){d(t),c()}),i.addEventListener("mousedown",function(){C=!1,setTimeout(function(){C=!0},10)}),t.element=i,t===k&&(t.element.classList.add("active"),e=!0)),y.appendChild(i)}),e||d(!1)}function d(e,t){k&&k.element&&k.element.classList.remove("active"),k=e,e&&e.element&&e.element.classList.add("active")}function c(){f(),k?h!==k.value?(h=k.value,b.value=k.value,i(b.value)):n():o.freetext?(h=b.value,i(b.value)):o.allowEmpty&&""===b.value?(h=b.value,i(b.value)):n()}function u(){f(),n()}function m(){if(!y.parentNode){for(;y.firstChild;)y.removeChild(y.firstChild);!0===o.values?l(a(),h):l(o.values||[],h);var e=Tabulator.prototype.helpers.elOffset(p);y.style.minWidth=p.offsetWidth+"px",y.style.top=e.top+p.offsetHeight+"px",y.style.left=e.left+"px",document.body.appendChild(y)}}function f(){y.parentNode&&y.parentNode.removeChild(y)}var v=this,p=e.getElement(),h=e.getValue(),b=document.createElement("input"),y=document.createElement("div"),E=[],g=[],k={},C=!0;return b.setAttribute("type","text"),b.style.padding="4px",b.style.width="100%",b.style.boxSizing="border-box",b.addEventListener("keydown",function(e){var t;switch(e.keyCode){case 38:e.stopImmediatePropagation(),e.stopPropagation(),t=g.indexOf(k),d(t>0?g[t-1]:!1);break;case 40:e.stopImmediatePropagation(),e.stopPropagation(),t=g.indexOf(k),t'):("ie"==r.table.browser?t.setAttribute("class","tabulator-star-inactive"):t.classList.replace("tabulator-star-active","tabulator-star-inactive"),t.innerHTML='')})}function l(e){d=e,a(e)}var r=this,s=e.getElement(),d=e.getValue(),c=s.getElementsByTagName("svg").length||5,u=s.getElementsByTagName("svg")[0]?s.getElementsByTagName("svg")[0].getAttribute("width"):14,m=[],f=document.createElement("div"),v=document.createElementNS("http://www.w3.org/2000/svg","svg");s.style.whiteSpace="nowrap",s.style.overflow="hidden",s.style.textOverflow="ellipsis",f.style.verticalAlign="middle",f.style.display="inline-block",f.style.padding="4px",v.setAttribute("width",u),v.setAttribute("height",u),v.setAttribute("viewBox","0 0 512 512"),v.setAttribute("xml:space","preserve"),v.style.padding="0 1px";for(var p=1;p<=c;p++)!function(e){var t=v.cloneNode(!0);m.push(t),t.addEventListener("mouseover",function(t){t.stopPropagation(),a(e)}),t.addEventListener("click",function(t){t.stopPropagation(),i(e)}),f.appendChild(t)}(p);return d=Math.min(parseInt(d),c),a(d),f.addEventListener("mouseover",function(e){a(0)}),f.addEventListener("click",function(e){i(0)}),s.addEventListener("blur",function(e){n()}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:l(d+1);break;case 37:l(d-1);break;case 13:i(d);break;case 27:n()}}),f},progress:function(e,t,i,n,o){function a(){var e=u*Math.round(v.offsetWidth/(s.clientWidth/100))+c;i(e),s.setAttribute("aria-valuenow",e),s.setAttribute("aria-label",m)}var l,r,s=e.getElement(),d=void 0===o.max?s.getElementsByTagName("div")[0].getAttribute("max")||100:o.max,c=void 0===o.min?s.getElementsByTagName("div")[0].getAttribute("min")||0:o.min,u=(d-c)/100,m=e.getValue()||0,f=document.createElement("div"),v=document.createElement("div");return f.style.position="absolute",f.style.right="0",f.style.top="0",f.style.bottom="0",f.style.width="5px",f.classList.add("tabulator-progress-handle"),v.style.display="inline-block",v.style.position="absolute",v.style.top="8px",v.style.bottom="8px",v.style.left="4px",v.style.marginRight="4px",v.style.backgroundColor="#488CE9",v.style.maxWidth="100%",v.style.minWidth="0%",s.style.padding="0 4px",m=Math.min(parseFloat(m),d),m=Math.max(parseFloat(m),c),m=100-Math.round((m-c)/u),v.style.right=m+"%",s.setAttribute("aria-valuemin",c),s.setAttribute("aria-valuemax",d),v.appendChild(f),f.addEventListener("mousedown",function(e){l=e.screenX,r=v.offsetWidth}),f.addEventListener("mouseover",function(){f.style.cursor="ew-resize"}),s.addEventListener("mousemove",function(e){l&&(v.style.width=r+e.screenX-l+"px")}),s.addEventListener("mouseup",function(e){l&&(e.stopPropagation(),e.stopImmediatePropagation(),l=!1,r=!1,a())}),s.addEventListener("keydown",function(e){switch(e.keyCode){case 39:v.style.width=v.clientWidth+s.clientWidth/100+"px";break;case 37:v.style.width=v.clientWidth-s.clientWidth/100+"px";break;case 13:a();break;case 27:n()}}),s.addEventListener("blur",function(){n()}),v},tickCross:function(e,t,i,n,o){function a(e){return s?e?c?d:r.checked:r.checked&&!c?(r.checked=!1,r.indeterminate=!0,c=!0,d):(c=!1,r.checked):r.checked}var l=e.getValue(),r=document.createElement("input"),s=o.tristate,d=void 0===o.indeterminateValue?null:o.indeterminateValue,c=!1;return r.setAttribute("type","checkbox"),r.style.marginTop="5px",r.style.boxSizing="border-box",r.value=l,!s||void 0!==l&&l!==d&&""!==l||(c=!0,r.indeterminate=!0),"firefox"!=this.table.browser&&t(function(){r.focus()}),r.checked=!0===l||"true"===l||"True"===l||1===l,r.addEventListener("change",function(e){i(a())}),r.addEventListener("blur",function(e){i(a(!0))}),r.addEventListener("keydown",function(e){13==e.keyCode&&i(a()),27==e.keyCode&&n()}),r}},Tabulator.prototype.registerModule("edit",Edit); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/filter.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/filter.js deleted file mode 100644 index 1a9d5f4888..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/filter.js +++ /dev/null @@ -1,695 +0,0 @@ -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var Filter = function Filter(table) { - - this.table = table; //hold Tabulator object - - this.filterList = []; //hold filter list - this.headerFilters = {}; //hold column filters - this.headerFilterElements = []; //hold header filter elements for manipulation - this.headerFilterColumns = []; //hold columns that use header filters - - this.changed = false; //has filtering changed since last render -}; - -//initialize column header filter -Filter.prototype.initializeColumn = function (column, value) { - var self = this, - field = column.getField(), - prevSuccess, - params; - - //handle successfull value change - function success(value) { - var filterType = column.modules.filter.tagType == "input" && column.modules.filter.attrType == "text" || column.modules.filter.tagType == "textarea" ? "partial" : "match", - type = "", - filterFunc; - - if (typeof prevSuccess === "undefined" || prevSuccess !== value) { - - prevSuccess = value; - - if (!column.modules.filter.emptyFunc(value)) { - column.modules.filter.value = value; - - switch (_typeof(column.definition.headerFilterFunc)) { - case "string": - if (self.filters[column.definition.headerFilterFunc]) { - type = column.definition.headerFilterFunc; - filterFunc = function filterFunc(data) { - return self.filters[column.definition.headerFilterFunc](value, column.getFieldValue(data)); - }; - } else { - console.warn("Header Filter Error - Matching filter function not found: ", column.definition.headerFilterFunc); - } - break; - - case "function": - filterFunc = function filterFunc(data) { - var params = column.definition.headerFilterFuncParams || {}; - var fieldVal = column.getFieldValue(data); - - params = typeof params === "function" ? params(value, fieldVal, data) : params; - - return column.definition.headerFilterFunc(value, fieldVal, data, params); - }; - - type = filterFunc; - break; - } - - if (!filterFunc) { - switch (filterType) { - case "partial": - filterFunc = function filterFunc(data) { - return String(column.getFieldValue(data)).toLowerCase().indexOf(String(value).toLowerCase()) > -1; - }; - type = "like"; - break; - - default: - filterFunc = function filterFunc(data) { - return column.getFieldValue(data) == value; - }; - type = "="; - } - } - - self.headerFilters[field] = { value: value, func: filterFunc, type: type }; - } else { - delete self.headerFilters[field]; - } - - self.changed = true; - - self.table.rowManager.filterRefresh(); - } - } - - column.modules.filter = { - success: success, - attrType: false, - tagType: false, - emptyFunc: false - }; - - this.generateHeaderFilterElement(column); -}; - -Filter.prototype.generateHeaderFilterElement = function (column, initialValue) { - var self = this, - success = column.modules.filter.success, - field = column.getField(), - filterElement, - editor, - editorElement, - cellWrapper, - typingTimer, - searchTrigger, - params; - - //handle aborted edit - function cancel() {} - - if (column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode) { - column.modules.filter.headerElement.parentNode.removeChild(column.modules.filter.headerElement); - } - - if (field) { - - //set empty value function - column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) { - return !value && value !== "0"; - }; - - filterElement = document.createElement("div"); - filterElement.classList.add("tabulator-header-filter"); - - //set column editor - switch (_typeof(column.definition.headerFilter)) { - case "string": - if (self.table.modules.edit.editors[column.definition.headerFilter]) { - editor = self.table.modules.edit.editors[column.definition.headerFilter]; - - if ((column.definition.headerFilter === "tick" || column.definition.headerFilter === "tickCross") && !column.definition.headerFilterEmptyCheck) { - column.modules.filter.emptyFunc = function (value) { - return value !== true && value !== false; - }; - } - } else { - console.warn("Filter Error - Cannot build header filter, No such editor found: ", column.definition.editor); - } - break; - - case "function": - editor = column.definition.headerFilter; - break; - - case "boolean": - if (column.modules.edit && column.modules.edit.editor) { - editor = column.modules.edit.editor; - } else { - if (column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]) { - editor = self.table.modules.edit.editors[column.definition.formatter]; - - if ((column.definition.formatter === "tick" || column.definition.formatter === "tickCross") && !column.definition.headerFilterEmptyCheck) { - column.modules.filter.emptyFunc = function (value) { - return value !== true && value !== false; - }; - } - } else { - editor = self.table.modules.edit.editors["input"]; - } - } - break; - } - - if (editor) { - - cellWrapper = { - getValue: function getValue() { - return typeof initialValue !== "undefined" ? initialValue : ""; - }, - getField: function getField() { - return column.definition.field; - }, - getElement: function getElement() { - return filterElement; - }, - getColumn: function getColumn() { - return column.getComponent(); - }, - getRow: function getRow() { - return { - normalizeHeight: function normalizeHeight() {} - }; - } - }; - - params = column.definition.headerFilterParams || {}; - - params = typeof params === "function" ? params.call(self.table) : params; - - editorElement = editor.call(this.table.modules.edit, cellWrapper, function () {}, success, cancel, params); - - if (!editorElement) { - console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false"); - return; - } - - if (!(editorElement instanceof Node)) { - console.warn("Filter Error - Cannot add filter to " + field + " column, editor should return an instance of Node, the editor returned:", editorElement); - return; - } - - //set Placeholder Text - if (field) { - self.table.modules.localize.bind("headerFilters|columns|" + column.definition.field, function (value) { - editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : self.table.modules.localize.getText("headerFilters|default")); - }); - } else { - self.table.modules.localize.bind("headerFilters|default", function (value) { - editorElement.setAttribute("placeholder", typeof self.column.definition.headerFilterPlaceholder !== "undefined" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value); - }); - } - - //focus on element on click - editorElement.addEventListener("click", function (e) { - e.stopPropagation(); - editorElement.focus(); - }); - - //live update filters as user types - typingTimer = false; - - searchTrigger = function searchTrigger(e) { - if (typingTimer) { - clearTimeout(typingTimer); - } - - typingTimer = setTimeout(function () { - success(editorElement.value); - }, 300); - }; - - column.modules.filter.headerElement = editorElement; - column.modules.filter.attrType = editorElement.hasAttribute("type") ? editorElement.getAttribute("type").toLowerCase() : ""; - column.modules.filter.tagType = editorElement.tagName.toLowerCase(); - - if (column.definition.headerFilterLiveFilter !== false) { - - if (!(column.definition.headerFilter === "autocomplete" || column.definition.editor === "autocomplete" && column.definition.headerFilter === true)) { - editorElement.addEventListener("keyup", searchTrigger); - editorElement.addEventListener("search", searchTrigger); - - //update number filtered columns on change - if (column.modules.filter.attrType == "number") { - editorElement.addEventListener("change", function (e) { - success(editorElement.value); - }); - } - - //change text inputs to search inputs to allow for clearing of field - if (column.modules.filter.attrType == "text" && this.table.browser !== "ie") { - editorElement.setAttribute("type", "search"); - // editorElement.off("change blur"); //prevent blur from triggering filter and preventing selection click - } - } - - //prevent input and select elements from propegating click to column sorters etc - if (column.modules.filter.tagType == "input" || column.modules.filter.tagType == "select" || column.modules.filter.tagType == "textarea") { - editorElement.addEventListener("mousedown", function (e) { - e.stopPropagation(); - }); - } - } - - filterElement.appendChild(editorElement); - - column.contentElement.appendChild(filterElement); - - self.headerFilterElements.push(editorElement); - self.headerFilterColumns.push(column); - } - } else { - console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title); - } -}; - -//hide all header filter elements (used to ensure correct column widths in "fitData" layout mode) -Filter.prototype.hideHeaderFilterElements = function () { - this.headerFilterElements.forEach(function (element) { - element.style.display = 'none'; - }); -}; - -//show all header filter elements (used to ensure correct column widths in "fitData" layout mode) -Filter.prototype.showHeaderFilterElements = function () { - this.headerFilterElements.forEach(function (element) { - element.style.display = ''; - }); -}; - -//programatically set value of header filter -Filter.prototype.setHeaderFilterFocus = function (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - column.modules.filter.headerElement.focus(); - } else { - console.warn("Column Filter Focus Error - No header filter set on column:", column.getField()); - } -}; - -//programatically set value of header filter -Filter.prototype.setHeaderFilterValue = function (column, value) { - if (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - this.generateHeaderFilterElement(column, value); - column.modules.filter.success(value); - } else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } -}; - -Filter.prototype.reloadHeaderFilter = function (column) { - if (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - this.generateHeaderFilterElement(column, column.modules.filter.value); - } else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } -}; - -//check if the filters has changed since last use -Filter.prototype.hasChanged = function () { - var changed = this.changed; - this.changed = false; - return changed; -}; - -//set standard filters -Filter.prototype.setFilter = function (field, type, value) { - var self = this; - - self.filterList = []; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value }]; - } - - self.addFilter(field); -}; - -//add filter to array -Filter.prototype.addFilter = function (field, type, value) { - var self = this; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value }]; - } - - field.forEach(function (filter) { - - filter = self.findFilter(filter); - - if (filter) { - self.filterList.push(filter); - - self.changed = true; - } - }); - - if (this.table.options.persistentFilter && this.table.modExists("persistence", true)) { - this.table.modules.persistence.save("filter"); - } -}; - -Filter.prototype.findFilter = function (filter) { - var self = this, - column; - - if (Array.isArray(filter)) { - return this.findSubFilters(filter); - } - - var filterFunc = false; - - if (typeof filter.field == "function") { - filterFunc = function filterFunc(data) { - return filter.field(data, filter.type || {}); // pass params to custom filter function - }; - } else { - - if (self.filters[filter.type]) { - - column = self.table.columnManager.getColumnByField(filter.field); - - if (column) { - filterFunc = function filterFunc(data) { - return self.filters[filter.type](filter.value, column.getFieldValue(data)); - }; - } else { - filterFunc = function filterFunc(data) { - return self.filters[filter.type](filter.value, data[filter.field]); - }; - } - } else { - console.warn("Filter Error - No such filter type found, ignoring: ", filter.type); - } - } - - filter.func = filterFunc; - - return filter.func ? filter : false; -}; - -Filter.prototype.findSubFilters = function (filters) { - var self = this, - output = []; - - filters.forEach(function (filter) { - filter = self.findFilter(filter); - - if (filter) { - output.push(filter); - } - }); - - return output.length ? output : false; -}; - -//get all filters -Filter.prototype.getFilters = function (all, ajax) { - var self = this, - output = []; - - if (all) { - output = self.getHeaderFilters(); - } - - self.filterList.forEach(function (filter) { - output.push({ field: filter.field, type: filter.type, value: filter.value }); - }); - - if (ajax) { - output.forEach(function (item) { - if (typeof item.type == "function") { - item.type = "function"; - } - }); - } - - return output; -}; - -//get all filters -Filter.prototype.getHeaderFilters = function () { - var self = this, - output = []; - - for (var key in this.headerFilters) { - output.push({ field: key, type: this.headerFilters[key].type, value: this.headerFilters[key].value }); - } - - return output; -}; - -//remove filter from array -Filter.prototype.removeFilter = function (field, type, value) { - var self = this; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value }]; - } - - field.forEach(function (filter) { - var index = -1; - - if (_typeof(filter.field) == "object") { - index = self.filterList.findIndex(function (element) { - return filter === element; - }); - } else { - index = self.filterList.findIndex(function (element) { - return filter.field === element.field && filter.type === element.type && filter.value === element.value; - }); - } - - if (index > -1) { - self.filterList.splice(index, 1); - self.changed = true; - } else { - console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type); - } - }); - - if (this.table.options.persistentFilter && this.table.modExists("persistence", true)) { - this.table.modules.persistence.save("filter"); - } -}; - -//clear filters -Filter.prototype.clearFilter = function (all) { - this.filterList = []; - - if (all) { - this.clearHeaderFilter(); - } - - this.changed = true; - - if (this.table.options.persistentFilter && this.table.modExists("persistence", true)) { - this.table.modules.persistence.save("filter"); - } -}; - -//clear header filters -Filter.prototype.clearHeaderFilter = function () { - var self = this; - - this.headerFilters = {}; - - this.headerFilterColumns.forEach(function (column) { - column.modules.filter.value = null; - self.reloadHeaderFilter(column); - }); - - this.changed = true; -}; - -//search data and return matching rows -Filter.prototype.search = function (searchType, field, type, value) { - var self = this, - activeRows = [], - filterList = []; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value }]; - } - - field.forEach(function (filter) { - filter = self.findFilter(filter); - - if (filter) { - filterList.push(filter); - } - }); - - this.table.rowManager.rows.forEach(function (row) { - var match = true; - - filterList.forEach(function (filter) { - if (!self.filterRecurse(filter, row.getData())) { - match = false; - } - }); - - if (match) { - activeRows.push(searchType === "data" ? row.getData("data") : row.getComponent()); - } - }); - - return activeRows; -}; - -//filter row array -Filter.prototype.filter = function (rowList, filters) { - var self = this, - activeRows = [], - activeRowComponents = []; - - if (self.table.options.dataFiltering) { - self.table.options.dataFiltering.call(self.table, self.getFilters()); - } - - if (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) { - - rowList.forEach(function (row) { - if (self.filterRow(row)) { - activeRows.push(row); - } - }); - } else { - activeRows = rowList.slice(0); - } - - if (self.table.options.dataFiltered) { - - activeRows.forEach(function (row) { - activeRowComponents.push(row.getComponent()); - }); - - self.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents); - } - - return activeRows; -}; - -//filter individual row -Filter.prototype.filterRow = function (row, filters) { - var self = this, - match = true, - data = row.getData(); - - self.filterList.forEach(function (filter) { - if (!self.filterRecurse(filter, data)) { - match = false; - } - }); - - for (var field in self.headerFilters) { - if (!self.headerFilters[field].func(data)) { - match = false; - } - } - - return match; -}; - -Filter.prototype.filterRecurse = function (filter, data) { - var self = this, - match = false; - - if (Array.isArray(filter)) { - filter.forEach(function (subFilter) { - if (self.filterRecurse(subFilter, data)) { - match = true; - } - }); - } else { - match = filter.func(data); - } - - return match; -}; - -//list of available filters -Filter.prototype.filters = { - - //equal to - "=": function _(filterVal, rowVal) { - return rowVal == filterVal ? true : false; - }, - - //less than - "<": function _(filterVal, rowVal) { - return rowVal < filterVal ? true : false; - }, - - //less than or equal to - "<=": function _(filterVal, rowVal) { - return rowVal <= filterVal ? true : false; - }, - - //greater than - ">": function _(filterVal, rowVal) { - return rowVal > filterVal ? true : false; - }, - - //greater than or equal to - ">=": function _(filterVal, rowVal) { - return rowVal >= filterVal ? true : false; - }, - - //not equal to - "!=": function _(filterVal, rowVal) { - return rowVal != filterVal ? true : false; - }, - - "regex": function regex(filterVal, rowVal) { - - if (typeof filterVal == "string") { - filterVal = new RegExp(filterVal); - } - - return filterVal.test(rowVal); - }, - - //contains the string - "like": function like(filterVal, rowVal) { - if (filterVal === null || typeof filterVal === "undefined") { - return rowVal === filterVal ? true : false; - } else { - if (typeof rowVal !== 'undefined' && rowVal !== null) { - return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1 ? true : false; - } else { - return false; - } - } - }, - - //in array - "in": function _in(filterVal, rowVal) { - if (Array.isArray(filterVal)) { - return filterVal.indexOf(rowVal) > -1; - } else { - console.warn("Filter Error - filter value is not an array:", filterVal); - return false; - } - } -}; - -Tabulator.prototype.registerModule("filter", Filter); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/filter.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/filter.min.js deleted file mode 100644 index 919f5309c0..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/filter.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Filter=function(e){this.table=e,this.filterList=[],this.headerFilters={},this.headerFilterElements=[],this.headerFilterColumns=[],this.changed=!1};Filter.prototype.initializeColumn=function(e,t){function i(t){var i,o="input"==e.modules.filter.tagType&&"text"==e.modules.filter.attrType||"textarea"==e.modules.filter.tagType?"partial":"match",a="";if(void 0===r||r!==t){if(r=t,e.modules.filter.emptyFunc(t))delete n.headerFilters[l];else{switch(e.modules.filter.value=t,_typeof(e.definition.headerFilterFunc)){case"string":n.filters[e.definition.headerFilterFunc]?(a=e.definition.headerFilterFunc,i=function(i){return n.filters[e.definition.headerFilterFunc](t,e.getFieldValue(i))}):console.warn("Header Filter Error - Matching filter function not found: ",e.definition.headerFilterFunc);break;case"function":i=function(i){var r=e.definition.headerFilterFuncParams||{},n=e.getFieldValue(i);return r="function"==typeof r?r(t,n,i):r,e.definition.headerFilterFunc(t,n,i,r)},a=i}if(!i)switch(o){case"partial":i=function(i){return String(e.getFieldValue(i)).toLowerCase().indexOf(String(t).toLowerCase())>-1},a="like";break;default:i=function(i){return e.getFieldValue(i)==t},a="="}n.headerFilters[l]={value:t,func:i,type:a}}n.changed=!0,n.table.rowManager.filterRefresh()}}var r,n=this,l=e.getField();e.modules.filter={success:i,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(e)},Filter.prototype.generateHeaderFilterElement=function(e,t){function i(){}var r,n,l,o,a,d,s,u=this,f=e.modules.filter.success,c=e.getField();if(e.modules.filter.headerElement&&e.modules.filter.headerElement.parentNode&&e.modules.filter.headerElement.parentNode.removeChild(e.modules.filter.headerElement),c){switch(e.modules.filter.emptyFunc=e.definition.headerFilterEmptyCheck||function(e){return!e&&"0"!==e},r=document.createElement("div"),r.classList.add("tabulator-header-filter"),_typeof(e.definition.headerFilter)){case"string":u.table.modules.edit.editors[e.definition.headerFilter]?(n=u.table.modules.edit.editors[e.definition.headerFilter],"tick"!==e.definition.headerFilter&&"tickCross"!==e.definition.headerFilter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",e.definition.editor);break;case"function":n=e.definition.headerFilter;break;case"boolean":e.modules.edit&&e.modules.edit.editor?n=e.modules.edit.editor:e.definition.formatter&&u.table.modules.edit.editors[e.definition.formatter]?(n=u.table.modules.edit.editors[e.definition.formatter],"tick"!==e.definition.formatter&&"tickCross"!==e.definition.formatter||e.definition.headerFilterEmptyCheck||(e.modules.filter.emptyFunc=function(e){return!0!==e&&!1!==e})):n=u.table.modules.edit.editors.input}if(n){if(o={getValue:function(){return void 0!==t?t:""},getField:function(){return e.definition.field},getElement:function(){return r},getColumn:function(){return e.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},s=e.definition.headerFilterParams||{},s="function"==typeof s?s.call(u.table):s,!(l=n.call(this.table.modules.edit,o,function(){},f,i,s)))return void console.warn("Filter Error - Cannot add filter to "+c+" column, editor returned a value of false");if(!(l instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+c+" column, editor should return an instance of Node, the editor returned:",l);c?u.table.modules.localize.bind("headerFilters|columns|"+e.definition.field,function(e){l.setAttribute("placeholder",void 0!==e&&e?e:u.table.modules.localize.getText("headerFilters|default"))}):u.table.modules.localize.bind("headerFilters|default",function(e){l.setAttribute("placeholder",void 0!==u.column.definition.headerFilterPlaceholder&&u.column.definition.headerFilterPlaceholder?u.column.definition.headerFilterPlaceholder:e)}),l.addEventListener("click",function(e){e.stopPropagation(),l.focus()}),a=!1,d=function(e){a&&clearTimeout(a),a=setTimeout(function(){f(l.value)},300)},e.modules.filter.headerElement=l,e.modules.filter.attrType=l.hasAttribute("type")?l.getAttribute("type").toLowerCase():"",e.modules.filter.tagType=l.tagName.toLowerCase(),!1!==e.definition.headerFilterLiveFilter&&("autocomplete"===e.definition.headerFilter||"autocomplete"===e.definition.editor&&!0===e.definition.headerFilter||(l.addEventListener("keyup",d),l.addEventListener("search",d),"number"==e.modules.filter.attrType&&l.addEventListener("change",function(e){f(l.value)}),"text"==e.modules.filter.attrType&&"ie"!==this.table.browser&&l.setAttribute("type","search")),"input"!=e.modules.filter.tagType&&"select"!=e.modules.filter.tagType&&"textarea"!=e.modules.filter.tagType||l.addEventListener("mousedown",function(e){e.stopPropagation()})),r.appendChild(l),e.contentElement.appendChild(r),u.headerFilterElements.push(l),u.headerFilterColumns.push(e)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",e.definition.title)},Filter.prototype.hideHeaderFilterElements=function(){this.headerFilterElements.forEach(function(e){e.style.display="none"})},Filter.prototype.showHeaderFilterElements=function(){this.headerFilterElements.forEach(function(e){e.style.display=""})},Filter.prototype.setHeaderFilterFocus=function(e){e.modules.filter&&e.modules.filter.headerElement?e.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",e.getField())},Filter.prototype.setHeaderFilterValue=function(e,t){e&&(e.modules.filter&&e.modules.filter.headerElement?(this.generateHeaderFilterElement(e,t),e.modules.filter.success(t)):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.reloadHeaderFilter=function(e){e&&(e.modules.filter&&e.modules.filter.headerElement?this.generateHeaderFilterElement(e,e.modules.filter.value):console.warn("Column Filter Error - No header filter set on column:",e.getField()))},Filter.prototype.hasChanged=function(){var e=this.changed;return this.changed=!1,e},Filter.prototype.setFilter=function(e,t,i){var r=this;r.filterList=[],Array.isArray(e)||(e=[{field:e,type:t,value:i}]),r.addFilter(e)},Filter.prototype.addFilter=function(e,t,i){var r=this;Array.isArray(e)||(e=[{field:e,type:t,value:i}]),e.forEach(function(e){(e=r.findFilter(e))&&(r.filterList.push(e),r.changed=!0)}),this.table.options.persistentFilter&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.save("filter")},Filter.prototype.findFilter=function(e){var t,i=this;if(Array.isArray(e))return this.findSubFilters(e);var r=!1;return"function"==typeof e.field?r=function(t){return e.field(t,e.type||{})}:i.filters[e.type]?(t=i.table.columnManager.getColumnByField(e.field),r=t?function(r){return i.filters[e.type](e.value,t.getFieldValue(r))}:function(t){return i.filters[e.type](e.value,t[e.field])}):console.warn("Filter Error - No such filter type found, ignoring: ",e.type),e.func=r,!!e.func&&e},Filter.prototype.findSubFilters=function(e){var t=this,i=[];return e.forEach(function(e){(e=t.findFilter(e))&&i.push(e)}),!!i.length&&i},Filter.prototype.getFilters=function(e,t){var i=this,r=[];return e&&(r=i.getHeaderFilters()),i.filterList.forEach(function(e){r.push({field:e.field,type:e.type,value:e.value})}),t&&r.forEach(function(e){"function"==typeof e.type&&(e.type="function")}),r},Filter.prototype.getHeaderFilters=function(){var e=[];for(var t in this.headerFilters)e.push({field:t,type:this.headerFilters[t].type,value:this.headerFilters[t].value});return e},Filter.prototype.removeFilter=function(e,t,i){var r=this;Array.isArray(e)||(e=[{field:e,type:t,value:i}]),e.forEach(function(e){var t=-1;t="object"==_typeof(e.field)?r.filterList.findIndex(function(t){return e===t}):r.filterList.findIndex(function(t){return e.field===t.field&&e.type===t.type&&e.value===t.value}),t>-1?(r.filterList.splice(t,1),r.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",e.type)}),this.table.options.persistentFilter&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.save("filter")},Filter.prototype.clearFilter=function(e){this.filterList=[],e&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistentFilter&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.save("filter")},Filter.prototype.clearHeaderFilter=function(){var e=this;this.headerFilters={},this.headerFilterColumns.forEach(function(t){t.modules.filter.value=null,e.reloadHeaderFilter(t)}),this.changed=!0},Filter.prototype.search=function(e,t,i,r){var n=this,l=[],o=[];return Array.isArray(t)||(t=[{field:t,type:i,value:r}]),t.forEach(function(e){(e=n.findFilter(e))&&o.push(e)}),this.table.rowManager.rows.forEach(function(t){var i=!0;o.forEach(function(e){n.filterRecurse(e,t.getData())||(i=!1)}),i&&l.push("data"===e?t.getData("data"):t.getComponent())}),l},Filter.prototype.filter=function(e,t){var i=this,r=[],n=[];return i.table.options.dataFiltering&&i.table.options.dataFiltering.call(i.table,i.getFilters()),i.table.options.ajaxFiltering||!i.filterList.length&&!Object.keys(i.headerFilters).length?r=e.slice(0):e.forEach(function(e){i.filterRow(e)&&r.push(e)}),i.table.options.dataFiltered&&(r.forEach(function(e){n.push(e.getComponent())}),i.table.options.dataFiltered.call(i.table,i.getFilters(),n)),r},Filter.prototype.filterRow=function(e,t){var i=this,r=!0,n=e.getData();i.filterList.forEach(function(e){i.filterRecurse(e,n)||(r=!1)});for(var l in i.headerFilters)i.headerFilters[l].func(n)||(r=!1);return r},Filter.prototype.filterRecurse=function(e,t){var i=this,r=!1;return Array.isArray(e)?e.forEach(function(e){i.filterRecurse(e,t)&&(r=!0)}):r=e.func(t),r},Filter.prototype.filters={"=":function(e,t){return t==e},"<":function(e,t){return t":function(e,t){return t>e},">=":function(e,t){return t>=e},"!=":function(e,t){return t!=e},regex:function(e,t){return"string"==typeof e&&(e=new RegExp(e)),e.test(t)},like:function(e,t){return null===e||void 0===e?t===e:void 0!==t&&null!==t&&String(t).toLowerCase().indexOf(e.toLowerCase())>-1},in:function(e,t){return Array.isArray(e)?e.indexOf(t)>-1:(console.warn("Filter Error - filter value is not an array:",e),!1)}},Tabulator.prototype.registerModule("filter",Filter); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/format.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/format.js deleted file mode 100644 index eb6f096636..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/format.js +++ /dev/null @@ -1,539 +0,0 @@ -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var Format = function Format(table) { - this.table = table; //hold Tabulator object -}; - -//initialize column formatter -Format.prototype.initializeColumn = function (column) { - var self = this, - config = { params: column.definition.formatterParams || {} }; - - //set column formatter - switch (_typeof(column.definition.formatter)) { - case "string": - - if (column.definition.formatter === "tick") { - column.definition.formatter = "tickCross"; - - if (typeof config.params.crossElement == "undefined") { - config.params.crossElement = false; - } - - console.warn("DEPRECATION WANRING - the tick formatter has been depricated, please use the tickCross formatter with the crossElement param set to false"); - } - - if (self.formatters[column.definition.formatter]) { - config.formatter = self.formatters[column.definition.formatter]; - } else { - console.warn("Formatter Error - No such formatter found: ", column.definition.formatter); - config.formatter = self.formatters.plaintext; - } - break; - - case "function": - config.formatter = column.definition.formatter; - break; - - default: - config.formatter = self.formatters.plaintext; - break; - } - - column.modules.format = config; -}; - -Format.prototype.cellRendered = function (cell) { - if (cell.column.modules.format.renderedCallback) { - cell.column.modules.format.renderedCallback(); - } -}; - -//return a formatted value for a cell -Format.prototype.formatValue = function (cell) { - var component = cell.getComponent(), - params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params; - - function onRendered(callback) { - cell.column.modules.format.renderedCallback = callback; - } - - return cell.column.modules.format.formatter.call(this, component, params, onRendered); -}; - -Format.prototype.sanitizeHTML = function (value) { - if (value) { - var entityMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '/': '/', - '`': '`', - '=': '=' - }; - - return String(value).replace(/[&<>"'`=\/]/g, function (s) { - return entityMap[s]; - }); - } else { - return value; - } -}; - -Format.prototype.emptyToSpace = function (value) { - return value === null || typeof value === "undefined" ? " " : value; -}; - -//get formatter for cell -Format.prototype.getFormatter = function (formatter) { - var formatter; - - switch (typeof formatter === "undefined" ? "undefined" : _typeof(formatter)) { - case "string": - if (this.formatters[formatter]) { - formatter = this.formatters[formatter]; - } else { - console.warn("Formatter Error - No such formatter found: ", formatter); - formatter = this.formatters.plaintext; - } - break; - - case "function": - formatter = formatter; - break; - - default: - formatter = this.formatters.plaintext; - break; - } - - return formatter; -}; - -//default data formatters -Format.prototype.formatters = { - //plain text value - plaintext: function plaintext(cell, formatterParams, onRendered) { - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - }, - - //html text value - html: function html(cell, formatterParams, onRendered) { - return cell.getValue(); - }, - - //multiline text area - textarea: function textarea(cell, formatterParams, onRendered) { - cell.getElement().style.whiteSpace = "pre-wrap"; - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - }, - - //currency formatting - money: function money(cell, formatterParams, onRendered) { - var floatVal = parseFloat(cell.getValue()), - number, - integer, - decimal, - rgx; - - var decimalSym = formatterParams.decimal || "."; - var thousandSym = formatterParams.thousand || ","; - var symbol = formatterParams.symbol || ""; - var after = !!formatterParams.symbolAfter; - var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2; - - if (isNaN(floatVal)) { - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - } - - number = precision !== false ? floatVal.toFixed(precision) : floatVal; - number = String(number).split("."); - - integer = number[0]; - decimal = number.length > 1 ? decimalSym + number[1] : ""; - - rgx = /(\d+)(\d{3})/; - - while (rgx.test(integer)) { - integer = integer.replace(rgx, "$1" + thousandSym + "$2"); - } - - return after ? integer + decimal + symbol : symbol + integer + decimal; - }, - - //clickable anchor tag - link: function link(cell, formatterParams, onRendered) { - var value = this.sanitizeHTML(cell.getValue()), - urlPrefix = formatterParams.urlPrefix || "", - label = this.emptyToSpace(value), - el = document.createElement("a"), - data; - - if (formatterParams.labelField) { - data = cell.getData(); - label = data[formatterParams.labelField]; - } - - if (formatterParams.label) { - switch (_typeof(formatterParams.label)) { - case "string": - label = formatterParams.label; - break; - - case "function": - label = formatterParams.label(cell); - break; - } - } - - if (formatterParams.urlField) { - data = cell.getData(); - value = data[formatterParams.urlField]; - } - - if (formatterParams.url) { - switch (_typeof(formatterParams.url)) { - case "string": - value = formatterParams.url; - break; - - case "function": - value = formatterParams.url(cell); - break; - } - } - - el.setAttribute("href", urlPrefix + value); - - if (formatterParams.target) { - el.setAttribute("target", formatterParams.target); - } - - el.innerHTML = this.emptyToSpace(label); - - return el; - }, - - //image element - image: function image(cell, formatterParams, onRendered) { - var el = document.createElement("img"); - el.setAttribute("src", cell.getValue()); - - switch (_typeof(formatterParams.height)) { - case "number": - element.style.height = formatterParams.height + "px"; - break; - - case "string": - element.style.height = formatterParams.height; - break; - } - - switch (_typeof(formatterParams.width)) { - case "number": - element.style.width = formatterParams.width + "px"; - break; - - case "string": - element.style.width = formatterParams.width; - break; - } - - el.addEventListener("load", function () { - cell.getRow().normalizeHeight(); - }); - - return el; - }, - - //tick or cross - tickCross: function tickCross(cell, formatterParams, onRendered) { - var value = cell.getValue(), - element = cell.getElement(), - empty = formatterParams.allowEmpty, - truthy = formatterParams.allowTruthy, - tick = typeof formatterParams.tickElement !== "undefined" ? formatterParams.tickElement : '', - cross = typeof formatterParams.crossElement !== "undefined" ? formatterParams.crossElement : ''; - - if (truthy && value || value === true || value === "true" || value === "True" || value === 1 || value === "1") { - element.setAttribute("aria-checked", true); - return tick || ""; - } else { - if (empty && (value === "null" || value === "" || value === null || typeof value === "undefined")) { - element.setAttribute("aria-checked", "mixed"); - return ""; - } else { - element.setAttribute("aria-checked", false); - return cross || ""; - } - } - }, - - datetime: function datetime(cell, formatterParams, onRendered) { - var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss"; - var outputFormat = formatterParams.outputFormat || "DD/MM/YYYY hh:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var value = cell.getValue(); - - var newDatetime = moment(value, inputFormat); - - if (newDatetime.isValid()) { - return newDatetime.format(outputFormat); - } else { - - if (invalid === true) { - return value; - } else if (typeof invalid === "function") { - return invalid(value); - } else { - return invalid; - } - } - }, - - datetimediff: function datetime(cell, formatterParams, onRendered) { - var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false; - var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : undefined; - var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false; - var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : moment(); - var value = cell.getValue(); - - var newDatetime = moment(value, inputFormat); - - if (newDatetime.isValid()) { - if (humanize) { - return moment.duration(newDatetime.diff(date)).humanize(suffix); - } else { - return newDatetime.diff(date, unit) + (suffix ? " " + suffix : ""); - } - } else { - - if (invalid === true) { - return value; - } else if (typeof invalid === "function") { - return invalid(value); - } else { - return invalid; - } - } - }, - - //select - lookup: function lookup(cell, formatterParams, onRendered) { - var value = cell.getValue(); - - if (typeof formatterParams[value] === "undefined") { - console.warn('Missing display value for ' + value); - return value; - } - - return formatterParams[value]; - }, - - //star rating - star: function star(cell, formatterParams, onRendered) { - var value = cell.getValue(), - element = cell.getElement(), - maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5, - stars = document.createElement("span"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"), - starActive = '', - starInactive = ''; - - //style stars holder - stars.style.verticalAlign = "middle"; - - //style star - star.setAttribute("width", "14"); - star.setAttribute("height", "14"); - star.setAttribute("viewBox", "0 0 512 512"); - star.setAttribute("xml:space", "preserve"); - star.style.padding = "0 1px"; - - value = parseInt(value) < maxStars ? parseInt(value) : maxStars; - - for (var i = 1; i <= maxStars; i++) { - var nextStar = star.cloneNode(true); - nextStar.innerHTML = i <= value ? starActive : starInactive; - - stars.appendChild(nextStar); - } - - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - element.setAttribute("aria-label", value); - - return stars; - }, - - //progress bar - progress: function progress(cell, formatterParams, onRendered) { - //progress bar - var value = this.sanitizeHTML(cell.getValue()) || 0, - element = cell.getElement(), - max = formatterParams && formatterParams.max ? formatterParams.max : 100, - min = formatterParams && formatterParams.min ? formatterParams.min : 0, - legendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : "center", - percent, - percentValue, - color, - legend, - legendColor, - top, - left, - right, - bottom; - - //make sure value is in range - percentValue = parseFloat(value) <= max ? parseFloat(value) : max; - percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min; - - //workout percentage - percent = (max - min) / 100; - percentValue = Math.round((percentValue - min) / percent); - - //set bar color - switch (_typeof(formatterParams.color)) { - case "string": - color = formatterParams.color; - break; - case "function": - color = formatterParams.color(value); - break; - case "object": - if (Array.isArray(formatterParams.color)) { - var unit = 100 / formatterParams.color.length; - var index = Math.floor(percentValue / unit); - - index = Math.min(index, formatterParams.color.length - 1); - index = Math.max(index, 0); - color = formatterParams.color[index]; - break; - } - default: - color = "#2DC214"; - } - - //generate legend - switch (_typeof(formatterParams.legend)) { - case "string": - legend = formatterParams.legend; - break; - case "function": - legend = formatterParams.legend(value); - break; - case "boolean": - legend = value; - break; - default: - legend = false; - } - - //set legend color - switch (_typeof(formatterParams.legendColor)) { - case "string": - legendColor = formatterParams.legendColor; - break; - case "function": - legendColor = formatterParams.legendColor(value); - break; - case "object": - if (Array.isArray(formatterParams.legendColor)) { - var unit = 100 / formatterParams.legendColor.length; - var index = Math.floor(percentValue / unit); - - index = Math.min(index, formatterParams.legendColor.length - 1); - index = Math.max(index, 0); - legendColor = formatterParams.legendColor[index]; - } - break; - default: - legendColor = "#000"; - } - - element.style.minWidth = "30px"; - element.style.position = "relative"; - - element.setAttribute("aria-label", percentValue); - - return "
" + (legend ? "
" + legend + "
" : ""); - }, - - //background color - color: function color(cell, formatterParams, onRendered) { - cell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue()); - return ""; - }, - - //tick icon - buttonTick: function buttonTick(cell, formatterParams, onRendered) { - return ''; - }, - - //cross icon - buttonCross: function buttonCross(cell, formatterParams, onRendered) { - return ''; - }, - - //current row number - rownum: function rownum(cell, formatterParams, onRendered) { - return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1; - }, - - //row handle - handle: function handle(cell, formatterParams, onRendered) { - cell.getElement().classList.add("tabulator-row-handle"); - return "
"; - }, - - responsiveCollapse: function responsiveCollapse(cell, formatterParams, onRendered) { - var self = this, - open = false, - el = document.createElement("div"); - - function toggleList(isOpen) { - var collapse = cell.getRow().getElement().getElementsByClassName("tabulator-responsive-collapse")[0]; - - open = isOpen; - - if (open) { - el.classList.add("open"); - if (collapse) { - collapse.style.display = ''; - } - } else { - el.classList.remove("open"); - if (collapse) { - collapse.style.display = 'none'; - } - } - } - - el.classList.add("tabulator-responsive-collapse-toggle"); - el.innerHTML = "+-"; - - cell.getElement().classList.add("tabulator-row-handle"); - - if (self.table.options.responsiveLayoutCollapseStartOpen) { - open = true; - } - - el.addEventListener("click", function () { - toggleList(!open); - }); - - toggleList(open); - - return el; - } -}; - -Tabulator.prototype.registerModule("format", Format); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/format.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/format.min.js deleted file mode 100644 index d625e4344c..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/format.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Format=function(e){this.table=e};Format.prototype.initializeColumn=function(e){var t=this,r={params:e.definition.formatterParams||{}};switch(_typeof(e.definition.formatter)){case"string":"tick"===e.definition.formatter&&(e.definition.formatter="tickCross",void 0===r.params.crossElement&&(r.params.crossElement=!1),console.warn("DEPRECATION WANRING - the tick formatter has been depricated, please use the tickCross formatter with the crossElement param set to false")),t.formatters[e.definition.formatter]?r.formatter=t.formatters[e.definition.formatter]:(console.warn("Formatter Error - No such formatter found: ",e.definition.formatter),r.formatter=t.formatters.plaintext);break;case"function":r.formatter=e.definition.formatter;break;default:r.formatter=t.formatters.plaintext}e.modules.format=r},Format.prototype.cellRendered=function(e){e.column.modules.format.renderedCallback&&e.column.modules.format.renderedCallback()},Format.prototype.formatValue=function(e){function t(t){e.column.modules.format.renderedCallback=t}var r=e.getComponent(),o="function"==typeof e.column.modules.format.params?e.column.modules.format.params(r):e.column.modules.format.params;return e.column.modules.format.formatter.call(this,r,o,t)},Format.prototype.sanitizeHTML=function(e){if(e){var t={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(e).replace(/[&<>"'`=\/]/g,function(e){return t[e]})}return e},Format.prototype.emptyToSpace=function(e){return null===e||void 0===e?" ":e},Format.prototype.getFormatter=function(e){var e;switch(void 0===e?"undefined":_typeof(e)){case"string":this.formatters[e]?e=this.formatters[e]:(console.warn("Formatter Error - No such formatter found: ",e),e=this.formatters.plaintext);break;case"function":e=e;break;default:e=this.formatters.plaintext}return e},Format.prototype.formatters={plaintext:function(e,t,r){return this.emptyToSpace(this.sanitizeHTML(e.getValue()))},html:function(e,t,r){return e.getValue()},textarea:function(e,t,r){return e.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(e.getValue()))},money:function(e,t,r){var o,a,i,l,n=parseFloat(e.getValue()),s=t.decimal||".",c=t.thousand||",",u=t.symbol||"",d=!!t.symbolAfter,m=void 0!==t.precision?t.precision:2;if(isNaN(n))return this.emptyToSpace(this.sanitizeHTML(e.getValue()));for(o=!1!==m?n.toFixed(m):n,o=String(o).split("."),a=o[0],i=o.length>1?s+o[1]:"",l=/(\d+)(\d{3})/;l.test(a);)a=a.replace(l,"$1"+c+"$2");return d?a+i+u:u+a+i},link:function(e,t,r){var o,a=this.sanitizeHTML(e.getValue()),i=t.urlPrefix||"",l=this.emptyToSpace(a),n=document.createElement("a");if(t.labelField&&(o=e.getData(),l=o[t.labelField]),t.label)switch(_typeof(t.label)){case"string":l=t.label;break;case"function":l=t.label(e)}if(t.urlField&&(o=e.getData(),a=o[t.urlField]),t.url)switch(_typeof(t.url)){case"string":a=t.url;break;case"function":a=t.url(e)}return n.setAttribute("href",i+a),t.target&&n.setAttribute("target",t.target),n.innerHTML=this.emptyToSpace(l),n},image:function(e,t,r){var o=document.createElement("img");switch(o.setAttribute("src",e.getValue()),_typeof(t.height)){case"number":element.style.height=t.height+"px";break;case"string":element.style.height=t.height}switch(_typeof(t.width)){case"number":element.style.width=t.width+"px";break;case"string":element.style.width=t.width}return o.addEventListener("load",function(){e.getRow().normalizeHeight()}),o},tickCross:function(e,t,r){var o=e.getValue(),a=e.getElement(),i=t.allowEmpty,l=t.allowTruthy,n=void 0!==t.tickElement?t.tickElement:'',s=void 0!==t.crossElement?t.crossElement:'';return l&&o||!0===o||"true"===o||"True"===o||1===o||"1"===o?(a.setAttribute("aria-checked",!0),n||""):!i||"null"!==o&&""!==o&&null!==o&&void 0!==o?(a.setAttribute("aria-checked",!1),s||""):(a.setAttribute("aria-checked","mixed"),"")},datetime:function(e,t,r){var o=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=t.outputFormat||"DD/MM/YYYY hh:mm:ss",i=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",l=e.getValue(),n=moment(l,o);return n.isValid()?n.format(a):!0===i?l:"function"==typeof i?i(l):i},datetimediff:function(e,t,r){var o=t.inputFormat||"YYYY-MM-DD hh:mm:ss",a=void 0!==t.invalidPlaceholder?t.invalidPlaceholder:"",i=void 0!==t.suffix&&t.suffix,l=void 0!==t.unit?t.unit:void 0,n=void 0!==t.humanize&&t.humanize,s=void 0!==t.date?t.date:moment(),c=e.getValue(),u=moment(c,o);return u.isValid()?n?moment.duration(u.diff(s)).humanize(i):u.diff(s,l)+(i?" "+i:""):!0===a?c:"function"==typeof a?a(c):a},lookup:function(e,t,r){var o=e.getValue();return void 0===t[o]?(console.warn("Missing display value for "+o),o):t[o]},star:function(e,t,r){var o=e.getValue(),a=e.getElement(),i=t&&t.stars?t.stars:5,l=document.createElement("span"),n=document.createElementNS("http://www.w3.org/2000/svg","svg");l.style.verticalAlign="middle",n.setAttribute("width","14"),n.setAttribute("height","14"),n.setAttribute("viewBox","0 0 512 512"),n.setAttribute("xml:space","preserve"),n.style.padding="0 1px",o=parseInt(o)':'',l.appendChild(c)}return a.style.whiteSpace="nowrap",a.style.overflow="hidden",a.style.textOverflow="ellipsis",a.setAttribute("aria-label",o),l},progress:function(e,t,r){var o,a,i,l,n,s=this.sanitizeHTML(e.getValue())||0,c=e.getElement(),u=t&&t.max?t.max:100,d=t&&t.min?t.min:0,m=t&&t.legendAlign?t.legendAlign:"center";switch(a=parseFloat(s)<=u?parseFloat(s):u,a=parseFloat(a)>=d?parseFloat(a):d,o=(u-d)/100,a=Math.round((a-d)/o),_typeof(t.color)){case"string":i=t.color;break;case"function":i=t.color(s);break;case"object":if(Array.isArray(t.color)){var p=100/t.color.length,f=Math.floor(a/p);f=Math.min(f,t.color.length-1),f=Math.max(f,0),i=t.color[f];break}default:i="#2DC214"}switch(_typeof(t.legend)){case"string":l=t.legend;break;case"function":l=t.legend(s);break;case"boolean":l=s;break;default:l=!1}switch(_typeof(t.legendColor)){case"string":n=t.legendColor;break;case"function":n=t.legendColor(s);break;case"object":if(Array.isArray(t.legendColor)){var p=100/t.legendColor.length,f=Math.floor(a/p);f=Math.min(f,t.legendColor.length-1),f=Math.max(f,0),n=t.legendColor[f]}break;default:n="#000"}return c.style.minWidth="30px",c.style.position="relative",c.setAttribute("aria-label",a),"
"+(l?"
"+l+"
":"")},color:function(e,t,r){return e.getElement().style.backgroundColor=this.sanitizeHTML(e.getValue()),""},buttonTick:function(e,t,r){return''},buttonCross:function(e,t,r){return''},rownum:function(e,t,r){return this.table.rowManager.activeRows.indexOf(e.getRow()._getSelf())+1},handle:function(e,t,r){return e.getElement().classList.add("tabulator-row-handle"),"
"},responsiveCollapse:function(e,t,r){function o(t){var r=e.getRow().getElement().getElementsByClassName("tabulator-responsive-collapse")[0];i=t,i?(l.classList.add("open"),r&&(r.style.display="")):(l.classList.remove("open"),r&&(r.style.display="none"))}var a=this,i=!1,l=document.createElement("div");return l.classList.add("tabulator-responsive-collapse-toggle"),l.innerHTML="+-",e.getElement().classList.add("tabulator-row-handle"),a.table.options.responsiveLayoutCollapseStartOpen&&(i=!0),l.addEventListener("click",function(){o(!i)}),o(i),l}},Tabulator.prototype.registerModule("format",Format); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/frozen_columns.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/frozen_columns.js deleted file mode 100644 index d3acbe5d2d..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/frozen_columns.js +++ /dev/null @@ -1,160 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var FrozenColumns = function FrozenColumns(table) { - this.table = table; //hold Tabulator object - this.leftColumns = []; - this.rightColumns = []; - this.leftMargin = 0; - this.rightMargin = 0; - this.initializationMode = "left"; - this.active = false; -}; - -//reset initial state -FrozenColumns.prototype.reset = function () { - this.initializationMode = "left"; - this.leftColumns = []; - this.rightColumns = []; - this.active = false; -}; - -//initialize specific column -FrozenColumns.prototype.initializeColumn = function (column) { - var config = { margin: 0, edge: false }; - - if (column.definition.frozen) { - - if (!column.parent.isGroup) { - - if (!column.isGroup) { - config.position = this.initializationMode; - - if (this.initializationMode == "left") { - this.leftColumns.push(column); - } else { - this.rightColumns.unshift(column); - } - - this.active = true; - - column.modules.frozen = config; - } else { - console.warn("Frozen Column Error - Column Groups cannot be frozen"); - } - } else { - console.warn("Frozen Column Error - Grouped columns cannot be frozen"); - } - } else { - this.initializationMode = "right"; - } -}; - -//layout columns appropropriatly -FrozenColumns.prototype.layout = function () { - var self = this, - tableHolder = this.table.rowManager.element, - rightMargin = 0; - - if (self.active) { - - //calculate row padding - - self.leftMargin = self._calcSpace(self.leftColumns, self.leftColumns.length); - self.table.columnManager.headersElement.style.marginLeft = self.leftMargin + "px"; - - self.rightMargin = self._calcSpace(self.rightColumns, self.rightColumns.length); - self.table.columnManager.element.style.paddingRight = self.rightMargin + "px"; - - self.table.rowManager.activeRows.forEach(function (row) { - self.layoutRow(row); - }); - - if (self.table.modExists("columnCalcs")) { - if (self.table.modules.columnCalcs.topInitialized && self.table.modules.columnCalcs.topRow) { - self.layoutRow(self.table.modules.columnCalcs.topRow); - } - if (self.table.modules.columnCalcs.botInitialized && self.table.modules.columnCalcs.botRow) { - self.layoutRow(self.table.modules.columnCalcs.botRow); - } - } - - //calculate left columns - self.leftColumns.forEach(function (column, i) { - column.modules.frozen.margin = self._calcSpace(self.leftColumns, i) + self.table.columnManager.scrollLeft; - - if (i == self.leftColumns.length - 1) { - column.modules.frozen.edge = true; - } else { - column.modules.frozen.edge = false; - } - - self.layoutColumn(column); - }); - - //calculate right frozen columns - rightMargin = self.table.rowManager.element.clientWidth + self.table.columnManager.scrollLeft; - - // if(tableHolder.scrollHeight > tableHolder.clientHeight){ - // rightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth; - // } - - self.rightColumns.forEach(function (column, i) { - column.modules.frozen.margin = rightMargin - self._calcSpace(self.rightColumns, i + 1); - - if (i == self.rightColumns.length - 1) { - column.modules.frozen.edge = true; - } else { - column.modules.frozen.edge = false; - } - - self.layoutColumn(column); - }); - - this.table.rowManager.tableElement.style.marginRight = this.rightMargin + "px"; - } -}; - -FrozenColumns.prototype.layoutColumn = function (column) { - var self = this; - - self.layoutElement(column.getElement(), column); - - column.cells.forEach(function (cell) { - self.layoutElement(cell.getElement(), column); - }); -}; - -FrozenColumns.prototype.layoutRow = function (row) { - var rowEl = row.getElement(); - - rowEl.style.paddingLeft = this.leftMargin + "px"; - // rowEl.style.paddingRight = this.rightMargin + "px"; -}; - -FrozenColumns.prototype.layoutElement = function (element, column) { - - if (column.modules.frozen) { - element.style.position = "absolute"; - element.style.left = column.modules.frozen.margin + "px"; - - element.classList.add("tabulator-frozen"); - - if (column.modules.frozen.edge) { - element.classList.add("tabulator-frozen-" + column.modules.frozen.position); - } - } -}; - -FrozenColumns.prototype._calcSpace = function (columns, index) { - var width = 0; - - for (var i = 0; i < index; i++) { - if (columns[i].visible) { - width += columns[i].getWidth(); - } - } - - return width; -}; - -Tabulator.prototype.registerModule("frozenColumns", FrozenColumns); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/frozen_columns.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/frozen_columns.min.js deleted file mode 100644 index 0c3f1faecc..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/frozen_columns.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var FrozenColumns=function(o){this.table=o,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.initializationMode="left",this.active=!1};FrozenColumns.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.active=!1},FrozenColumns.prototype.initializeColumn=function(o){var e={margin:0,edge:!1};o.definition.frozen?o.parent.isGroup?console.warn("Frozen Column Error - Grouped columns cannot be frozen"):o.isGroup?console.warn("Frozen Column Error - Column Groups cannot be frozen"):(e.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(o):this.rightColumns.unshift(o),this.active=!0,o.modules.frozen=e):this.initializationMode="right"},FrozenColumns.prototype.layout=function(){var o=this,e=(this.table.rowManager.element,0);o.active&&(o.leftMargin=o._calcSpace(o.leftColumns,o.leftColumns.length),o.table.columnManager.headersElement.style.marginLeft=o.leftMargin+"px",o.rightMargin=o._calcSpace(o.rightColumns,o.rightColumns.length),o.table.columnManager.element.style.paddingRight=o.rightMargin+"px",o.table.rowManager.activeRows.forEach(function(e){o.layoutRow(e)}),o.table.modExists("columnCalcs")&&(o.table.modules.columnCalcs.topInitialized&&o.table.modules.columnCalcs.topRow&&o.layoutRow(o.table.modules.columnCalcs.topRow),o.table.modules.columnCalcs.botInitialized&&o.table.modules.columnCalcs.botRow&&o.layoutRow(o.table.modules.columnCalcs.botRow)),o.leftColumns.forEach(function(e,t){e.modules.frozen.margin=o._calcSpace(o.leftColumns,t)+o.table.columnManager.scrollLeft,t==o.leftColumns.length-1?e.modules.frozen.edge=!0:e.modules.frozen.edge=!1,o.layoutColumn(e)}),e=o.table.rowManager.element.clientWidth+o.table.columnManager.scrollLeft,o.rightColumns.forEach(function(t,n){t.modules.frozen.margin=e-o._calcSpace(o.rightColumns,n+1),n==o.rightColumns.length-1?t.modules.frozen.edge=!0:t.modules.frozen.edge=!1,o.layoutColumn(t)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin+"px")},FrozenColumns.prototype.layoutColumn=function(o){var e=this;e.layoutElement(o.getElement(),o),o.cells.forEach(function(t){e.layoutElement(t.getElement(),o)})},FrozenColumns.prototype.layoutRow=function(o){o.getElement().style.paddingLeft=this.leftMargin+"px"},FrozenColumns.prototype.layoutElement=function(o,e){e.modules.frozen&&(o.style.position="absolute",o.style.left=e.modules.frozen.margin+"px",o.classList.add("tabulator-frozen"),e.modules.frozen.edge&&o.classList.add("tabulator-frozen-"+e.modules.frozen.position))},FrozenColumns.prototype._calcSpace=function(o,e){for(var t=0,n=0;n -1) { - output.splice(index, 1); - } - }); - - return output; -}; - -FrozenRows.prototype.freezeRow = function (row) { - if (!row.modules.frozen) { - row.modules.frozen = true; - this.topElement.appendChild(row.getElement()); - row.initialize(); - row.normalizeHeight(); - this.table.rowManager.adjustTableSize(); - - this.rows.push(row); - - this.table.rowManager.refreshActiveData("display"); - - this.styleRows(); - } else { - console.warn("Freeze Error - Row is already frozen"); - } -}; - -FrozenRows.prototype.unfreezeRow = function (row) { - var index = this.rows.indexOf(row); - - if (row.modules.frozen) { - - row.modules.frozen = false; - - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - - this.table.rowManager.adjustTableSize(); - - this.rows.splice(index, 1); - - this.table.rowManager.refreshActiveData("display"); - - if (this.rows.length) { - this.styleRows(); - } - } else { - console.warn("Freeze Error - Row is already unfrozen"); - } -}; - -FrozenRows.prototype.styleRows = function (row) { - var self = this; - - this.rows.forEach(function (row, i) { - self.table.rowManager.styleRow(row, i); - }); -}; - -Tabulator.prototype.registerModule("frozenRows", FrozenRows); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/frozen_rows.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/frozen_rows.min.js deleted file mode 100644 index 844367a167..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/frozen_rows.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var FrozenRows=function(e){this.table=e,this.topElement=document.createElement("div"),this.rows=[],this.displayIndex=0};FrozenRows.prototype.initialize=function(){this.rows=[],this.topElement.classList.add("tabulator-frozen-rows-holder"),this.table.columnManager.getElement().insertBefore(this.topElement,this.table.columnManager.headersElement.nextSibling)},FrozenRows.prototype.setDisplayIndex=function(e){this.displayIndex=e},FrozenRows.prototype.getDisplayIndex=function(){return this.displayIndex},FrozenRows.prototype.isFrozen=function(){return!!this.rows.length},FrozenRows.prototype.getRows=function(e){var o=e.slice(0);return this.rows.forEach(function(e){var t=o.indexOf(e);t>-1&&o.splice(t,1)}),o},FrozenRows.prototype.freezeRow=function(e){e.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(e.modules.frozen=!0,this.topElement.appendChild(e.getElement()),e.initialize(),e.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(e),this.table.rowManager.refreshActiveData("display"),this.styleRows())},FrozenRows.prototype.unfreezeRow=function(e){var o=this.rows.indexOf(e);if(e.modules.frozen){e.modules.frozen=!1;var t=e.getElement();t.parentNode.removeChild(t),this.table.rowManager.adjustTableSize(),this.rows.splice(o,1),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()}else console.warn("Freeze Error - Row is already unfrozen")},FrozenRows.prototype.styleRows=function(e){var o=this;this.rows.forEach(function(e,t){o.table.rowManager.styleRow(e,t)})},Tabulator.prototype.registerModule("frozenRows",FrozenRows); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/group_rows.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/group_rows.js deleted file mode 100644 index 463098ebb1..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/group_rows.js +++ /dev/null @@ -1,975 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -//public group object -var GroupComponent = function GroupComponent(group) { - this._group = group; - this.type = "GroupComponent"; -}; - -GroupComponent.prototype.getKey = function () { - return this._group.key; -}; - -GroupComponent.prototype.getElement = function () { - return this._group.element; -}; - -GroupComponent.prototype.getRows = function () { - return this._group.getRows(true); -}; - -GroupComponent.prototype.getSubGroups = function () { - return this._group.getSubGroups(true); -}; - -GroupComponent.prototype.getParentGroup = function () { - return this._group.parent ? this._group.parent.getComponent() : false; -}; - -GroupComponent.prototype.getVisibility = function () { - return this._group.visible; -}; - -GroupComponent.prototype.show = function () { - this._group.show(); -}; - -GroupComponent.prototype.hide = function () { - this._group.hide(); -}; - -GroupComponent.prototype.toggle = function () { - this._group.toggleVisibility(); -}; - -GroupComponent.prototype._getSelf = function () { - return this._group; -}; - -GroupComponent.prototype.getTable = function () { - return this._group.table; -}; - -////////////////////////////////////////////////// -//////////////// Group Functions ///////////////// -////////////////////////////////////////////////// - -var Group = function Group(groupManager, parent, level, key, field, generator, oldGroup) { - - this.groupManager = groupManager; - this.parent = parent; - this.key = key; - this.level = level; - this.field = field; - this.hasSubGroups = level < groupManager.groupIDLookups.length - 1; - this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow; - this.type = "group"; //type of element - this.old = oldGroup; - this.rows = []; - this.groups = []; - this.groupList = []; - this.generator = generator; - this.elementContents = false; - this.height = 0; - this.outerHeight = 0; - this.initialized = false; - this.calcs = {}; - this.initialized = false; - this.modules = {}; - - this.visible = oldGroup ? oldGroup.visible : typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0]; - - this.createElements(); - this.addBindings(); - - this.createValueGroups(); -}; - -Group.prototype.createElements = function () { - this.element = document.createElement("div"); - this.element.classList.add("tabulator-row"); - this.element.classList.add("tabulator-group"); - this.element.classList.add("tabulator-group-level-" + this.level); - this.element.setAttribute("role", "rowgroup"); - - this.arrowElement = document.createElement("div"); - this.arrowElement.classList.add("tabulator-arrow"); -}; - -Group.prototype.createValueGroups = function () { - var _this = this; - - var level = this.level + 1; - if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) { - this.groupManager.allowedValues[level].forEach(function (value) { - _this._createGroup(value, level); - }); - } -}; - -Group.prototype.addBindings = function () { - var self = this, - dblTap, - tapHold, - tap, - toggleElement; - - //handle group click events - if (self.groupManager.table.options.groupClick) { - self.element.addEventListener("click", function (e) { - self.groupManager.table.options.groupClick(e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupDblClick) { - self.element.addEventListener("dblclick", function (e) { - self.groupManager.table.options.groupDblClick(e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupContext) { - self.element.addEventListener("contextmenu", function (e) { - self.groupManager.table.options.groupContext(e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupTap) { - - tap = false; - - self.element.addEventListener("touchstart", function (e) { - tap = true; - }); - - self.element.addEventListener("touchend", function (e) { - if (tap) { - self.groupManager.table.options.groupTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (self.groupManager.table.options.groupDblTap) { - - dblTap = null; - - self.element.addEventListener("touchend", function (e) { - - if (dblTap) { - clearTimeout(dblTap); - dblTap = null; - - self.groupManager.table.options.groupDblTap(e, self.getComponent()); - } else { - - dblTap = setTimeout(function () { - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - }); - } - - if (self.groupManager.table.options.groupTapHold) { - - tapHold = null; - - self.element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - tap = false; - self.groupManager.table.options.groupTapHold(e, self.getComponent()); - }, 1000); - }); - - self.element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; - }); - } - - if (self.groupManager.table.options.groupToggleElement) { - toggleElement = self.groupManager.table.options.groupToggleElement == "arrow" ? self.arrowElement : self.element; - - toggleElement.addEventListener("click", function (e) { - e.stopPropagation(); - e.stopImmediatePropagation(); - self.toggleVisibility(); - }); - } -}; - -Group.prototype._createGroup = function (groupID, level) { - var groupKey = level + "_" + groupID; - var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false); - - this.groups[groupKey] = group; - this.groupList.push(group); -}; - -Group.prototype._addRowToGroup = function (row) { - - var level = this.level + 1; - - if (this.hasSubGroups) { - var groupID = this.groupManager.groupIDLookups[level].func(row.getData()), - groupKey = level + "_" + groupID; - - if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) { - if (this.groups[groupKey]) { - this.groups[groupKey].addRow(row); - } - } else { - if (!this.groups[groupKey]) { - this._createGroup(groupID, level); - } - - this.groups[groupKey].addRow(row); - } - } -}; - -Group.prototype._addRow = function (row) { - this.rows.push(row); - row.modules.group = this; -}; - -Group.prototype.insertRow = function (row, to, after) { - var data = this.conformRowData({}); - - row.updateData(data); - - var toIndex = this.rows.indexOf(to); - - if (toIndex > -1) { - if (after) { - this.rows.splice(toIndex + 1, 0, row); - } else { - this.rows.splice(toIndex, 0, row); - } - } else { - if (after) { - this.rows.push(row); - } else { - this.rows.unshift(row); - } - } - - row.modules.group = this; - - this.generateGroupHeaderContents(); - - if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") { - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } -}; - -Group.prototype.getRowIndex = function (row) {}; - -//update row data to match grouping contraints -Group.prototype.conformRowData = function (data) { - if (this.field) { - data[this.field] = this.key; - } else { - console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"); - } - - if (this.parent) { - data = this.parent.conformRowData(data); - } - - return data; -}; - -Group.prototype.removeRow = function (row) { - var index = this.rows.indexOf(row); - - if (index > -1) { - this.rows.splice(index, 1); - } - - if (!this.rows.length) { - if (this.parent) { - this.parent.removeGroup(this); - } else { - this.groupManager.removeGroup(this); - } - - this.groupManager.updateGroupRows(true); - } else { - this.generateGroupHeaderContents(); - if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") { - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - } -}; - -Group.prototype.removeGroup = function (group) { - var groupKey = group.level + "_" + group.key, - index; - - if (this.groups[groupKey]) { - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if (index > -1) { - this.groupList.splice(index, 1); - } - - if (!this.groupList.length) { - if (this.parent) { - this.parent.removeGroup(this); - } else { - this.groupManager.removeGroup(this); - } - } - } -}; - -Group.prototype.getHeadersAndRows = function () { - var output = []; - - output.push(this); - - this._visSet(); - - if (this.visible) { - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - output = output.concat(group.getHeadersAndRows()); - }); - } else { - if (this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) { - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - - output = output.concat(this.rows); - - if (this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) { - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - } else { - if (!this.groupList.length && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.options.groupClosedShowCalcs) { - if (this.groupManager.table.modExists("columnCalcs")) { - if (this.groupManager.table.modules.columnCalcs.hasTopCalcs()) { - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - - if (this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) { - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - } - } - - return output; -}; - -Group.prototype.getData = function (visible, transform) { - var self = this, - output = []; - - this._visSet(); - - if (!visible || visible && this.visible) { - this.rows.forEach(function (row) { - output.push(row.getData(transform || "data")); - }); - } - - return output; -}; - -// Group.prototype.getRows = function(){ -// this._visSet(); - -// return this.visible ? this.rows : []; -// }; - -Group.prototype.getRowCount = function () { - var count = 0; - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - count += group.getRowCount(); - }); - } else { - count = this.rows.length; - } - return count; -}; - -Group.prototype.toggleVisibility = function () { - if (this.visible) { - this.hide(); - } else { - this.show(); - } -}; - -Group.prototype.hide = function () { - this.visible = false; - - if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) { - - this.element.classList.remove("tabulator-group-visible"); - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - - var el; - - if (group.calcs.top) { - el = group.calcs.top.getElement(); - el.parentNode.removeChild(el); - } - - if (group.calcs.bottom) { - el = group.calcs.bottom.getElement(); - el.parentNode.removeChild(el); - } - - var rows = group.getHeadersAndRows(); - - rows.forEach(function (row) { - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - }); - }); - } else { - this.rows.forEach(function (row) { - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - }); - } - - this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex()); - } else { - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false); -}; - -Group.prototype.show = function () { - var self = this; - - self.visible = true; - - if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) { - - this.element.classList.add("tabulator-group-visible"); - - var prev = self.getElement(); - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - var rows = group.getHeadersAndRows(); - - rows.forEach(function (row) { - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - }); - } else { - self.rows.forEach(function (row) { - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - } - - this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex()); - } else { - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true); -}; - -Group.prototype._visSet = function () { - var data = []; - - if (typeof this.visible == "function") { - - this.rows.forEach(function (row) { - data.push(row.getData()); - }); - - this.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent()); - } -}; - -Group.prototype.getRowGroup = function (row) { - var match = false; - if (this.groupList.length) { - this.groupList.forEach(function (group) { - var result = group.getRowGroup(row); - - if (result) { - match = result; - } - }); - } else { - if (this.rows.find(function (item) { - return item === row; - })) { - match = this; - } - } - - return match; -}; - -Group.prototype.getSubGroups = function (component) { - var output = []; - - this.groupList.forEach(function (child) { - output.push(component ? child.getComponent() : child); - }); - - return output; -}; - -Group.prototype.getRows = function (compoment) { - var output = []; - - this.rows.forEach(function (row) { - output.push(compoment ? row.getComponent() : row); - }); - - return output; -}; - -Group.prototype.generateGroupHeaderContents = function () { - var data = []; - - this.rows.forEach(function (row) { - data.push(row.getData()); - }); - - this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent()); - - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); - }if (typeof this.elementContents === "string") { - this.element.innerHTML = this.elementContents; - } else { - this.element.appendChild(this.elementContents); - } - - this.element.insertBefore(this.arrowElement, this.element.firstChild); -}; - -////////////// Standard Row Functions ////////////// - -Group.prototype.getElement = function () { - this.addBindingsd = false; - - this._visSet(); - - if (this.visible) { - this.element.classList.add("tabulator-group-visible"); - } else { - this.element.classList.remove("tabulator-group-visible"); - } - - this.element.childNodes.forEach(function (child) { - child.parentNode.removeChild(child); - }); - - this.generateGroupHeaderContents(); - - // this.addBindings(); - - return this.element; -}; - -//normalize the height of elements in the row -Group.prototype.normalizeHeight = function () { - this.setHeight(this.element.clientHeight); -}; - -Group.prototype.initialize = function (force) { - if (!this.initialized || force) { - this.normalizeHeight(); - this.initialized = true; - } -}; - -Group.prototype.reinitialize = function () { - this.initialized = false; - this.height = 0; - - if (Tabulator.prototype.helpers.elVisible(this.element)) { - this.initialize(true); - } -}; - -Group.prototype.setHeight = function (height) { - if (this.height != height) { - this.height = height; - this.outerHeight = this.element.offsetHeight; - } -}; - -//return rows outer height -Group.prototype.getHeight = function () { - return this.outerHeight; -}; - -Group.prototype.getGroup = function () { - return this; -}; - -Group.prototype.reinitializeHeight = function () {}; -Group.prototype.calcHeight = function () {}; -Group.prototype.setCellHeight = function () {}; -Group.prototype.clearCellHeight = function () {}; - -//////////////// Object Generation ///////////////// -Group.prototype.getComponent = function () { - return new GroupComponent(this); -}; - -////////////////////////////////////////////////// -////////////// Group Row Extension /////////////// -////////////////////////////////////////////////// - -var GroupRows = function GroupRows(table) { - - this.table = table; //hold Tabulator object - - this.groupIDLookups = false; //enable table grouping and set field to group by - this.startOpen = [function () { - return false; - }]; //starting state of group - this.headerGenerator = [function () { - return ""; - }]; - this.groupList = []; //ordered list of groups - this.allowedValues = false; - this.groups = {}; //hold row groups - this.displayIndex = 0; //index in display pipeline -}; - -//initialize group configuration -GroupRows.prototype.initialize = function () { - var self = this, - groupBy = self.table.options.groupBy, - startOpen = self.table.options.groupStartOpen, - groupHeader = self.table.options.groupHeader; - - this.allowedValues = self.table.options.groupValues; - - self.headerGenerator = [function () { - return ""; - }]; - this.startOpen = [function () { - return false; - }]; //starting state of group - - self.table.modules.localize.bind("groups|item", function (langValue, lang) { - self.headerGenerator[0] = function (value, count, data) { - //header layout function - return (typeof value === "undefined" ? "" : value) + "(" + count + " " + (count === 1 ? langValue : lang.groups.items) + ")"; - }; - }); - - this.groupIDLookups = []; - - if (Array.isArray(groupBy) || groupBy) { - if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both") { - this.table.modules.columnCalcs.removeCalcs(); - } - } else { - if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group") { - - var cols = this.table.columnManager.getRealColumns(); - - cols.forEach(function (col) { - if (col.definition.topCalc) { - self.table.modules.columnCalcs.initializeTopRow(); - } - - if (col.definition.bottomCalc) { - self.table.modules.columnCalcs.initializeBottomRow(); - } - }); - } - } - - if (!Array.isArray(groupBy)) { - groupBy = [groupBy]; - } - - groupBy.forEach(function (group, i) { - var lookupFunc, column; - - if (typeof group == "function") { - lookupFunc = group; - } else { - column = self.table.columnManager.getColumnByField(group); - - if (column) { - lookupFunc = function lookupFunc(data) { - return column.getFieldValue(data); - }; - } else { - lookupFunc = function lookupFunc(data) { - return data[group]; - }; - } - } - - self.groupIDLookups.push({ - field: typeof group === "function" ? false : group, - func: lookupFunc, - values: self.allowedValues ? self.allowedValues[i] : false - }); - }); - - if (startOpen) { - - if (!Array.isArray(startOpen)) { - startOpen = [startOpen]; - } - - startOpen.forEach(function (level) { - level = typeof level == "function" ? level : function () { - return true; - }; - }); - - self.startOpen = startOpen; - } - - if (groupHeader) { - self.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader]; - } - - this.initialized = true; -}; - -GroupRows.prototype.setDisplayIndex = function (index) { - this.displayIndex = index; -}; - -GroupRows.prototype.getDisplayIndex = function () { - return this.displayIndex; -}; - -//return appropriate rows with group headers -GroupRows.prototype.getRows = function (rows) { - if (this.groupIDLookups.length) { - - this.table.options.dataGrouping.call(this.table); - - this.generateGroups(rows); - - if (this.table.options.dataGrouped) { - this.table.options.dataGrouped.call(this.table, this.getGroups(true)); - } - - return this.updateGroupRows(); - } else { - return rows.slice(0); - } -}; - -GroupRows.prototype.getGroups = function (compoment) { - var groupComponents = []; - - this.groupList.forEach(function (group) { - groupComponents.push(compoment ? group.getComponent() : group); - }); - - return groupComponents; -}; - -GroupRows.prototype.pullGroupListData = function (groupList) { - var self = this; - var groupListData = []; - - groupList.forEach(function (group) { - var groupHeader = {}; - groupHeader.level = 0; - groupHeader.rowCount = 0; - groupHeader.headerContent = ""; - var childData = []; - - if (group.hasSubGroups) { - childData = self.pullGroupListData(group.groupList); - - groupHeader.level = group.level; - groupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers - groupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group); - - groupListData.push(groupHeader); - groupListData = groupListData.concat(childData); - } else { - groupHeader.level = group.level; - groupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group); - groupHeader.rowCount = group.getRows().length; - - groupListData.push(groupHeader); - - group.getRows().forEach(function (row) { - groupListData.push(row.getData("data")); - }); - } - }); - - return groupListData; -}; - -GroupRows.prototype.getGroupedData = function () { - - return this.pullGroupListData(this.groupList); -}; - -GroupRows.prototype.getRowGroup = function (row) { - var match = false; - - this.groupList.forEach(function (group) { - var result = group.getRowGroup(row); - - if (result) { - match = result; - } - }); - - return match; -}; - -GroupRows.prototype.countGroups = function () { - return this.groupList.length; -}; - -GroupRows.prototype.generateGroups = function (rows) { - var self = this, - oldGroups = self.groups; - - self.groups = {}; - self.groupList = []; - - if (this.allowedValues && this.allowedValues[0]) { - this.allowedValues[0].forEach(function (value) { - self.createGroup(value, 0, oldGroups); - }); - - rows.forEach(function (row) { - self.assignRowToExistingGroup(row, oldGroups); - }); - } else { - rows.forEach(function (row) { - self.assignRowToGroup(row, oldGroups); - }); - } -}; - -GroupRows.prototype.createGroup = function (groupID, level, oldGroups) { - var groupKey = level + "_" + groupID, - group; - - oldGroups = oldGroups || []; - - group = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]); - - this.groups[groupKey] = group; - this.groupList.push(group); -}; - -GroupRows.prototype.assignRowToGroup = function (row, oldGroups) { - var groupID = this.groupIDLookups[0].func(row.getData()), - groupKey = "0_" + groupID; - - if (!this.groups[groupKey]) { - this.createGroup(groupID, 0, oldGroups); - } - - this.groups[groupKey].addRow(row); -}; - -GroupRows.prototype.assignRowToExistingGroup = function (row, oldGroups) { - var groupID = this.groupIDLookups[0].func(row.getData()), - groupKey = "0_" + groupID; - - if (this.groups[groupKey]) { - this.groups[groupKey].addRow(row); - } -}; - -GroupRows.prototype.assignRowToGroup = function (row, oldGroups) { - var groupID = this.groupIDLookups[0].func(row.getData()), - newGroupNeeded = !this.groups["0_" + groupID]; - - if (newGroupNeeded) { - this.createGroup(groupID, 0, oldGroups); - } - - this.groups["0_" + groupID].addRow(row); - - return !newGroupNeeded; -}; - -GroupRows.prototype.updateGroupRows = function (force) { - var self = this, - output = [], - oldRowCount; - - self.groupList.forEach(function (group) { - output = output.concat(group.getHeadersAndRows()); - }); - - //force update of table display - if (force) { - - var displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex()); - - if (displayIndex !== true) { - this.setDisplayIndex(displayIndex); - } - - self.table.rowManager.refreshActiveData("group", true, true); - } - - return output; -}; - -GroupRows.prototype.scrollHeaders = function (left) { - this.groupList.forEach(function (group) { - group.arrowElement.style.marginLeft = left + "px"; - }); -}; - -GroupRows.prototype.removeGroup = function (group) { - var groupKey = group.level + "_" + group.key, - index; - - if (this.groups[groupKey]) { - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if (index > -1) { - this.groupList.splice(index, 1); - } - } -}; - -Tabulator.prototype.registerModule("groupRows", GroupRows); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/group_rows.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/group_rows.min.js deleted file mode 100644 index 2bf081296a..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/group_rows.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var GroupComponent=function(t){this._group=t,this.type="GroupComponent"};GroupComponent.prototype.getKey=function(){return this._group.key},GroupComponent.prototype.getElement=function(){return this._group.element},GroupComponent.prototype.getRows=function(){return this._group.getRows(!0)},GroupComponent.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},GroupComponent.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},GroupComponent.prototype.getVisibility=function(){return this._group.visible},GroupComponent.prototype.show=function(){this._group.show()},GroupComponent.prototype.hide=function(){this._group.hide()},GroupComponent.prototype.toggle=function(){this._group.toggleVisibility()},GroupComponent.prototype._getSelf=function(){return this._group},GroupComponent.prototype.getTable=function(){return this._group.table};var Group=function(t,o,e,r,i,s,n){this.groupManager=t,this.parent=o,this.key=r,this.level=e,this.field=i,this.hasSubGroups=e-1?e?this.rows.splice(i+1,0,t):this.rows.splice(i,0,t):e?this.rows.push(t):this.rows.unshift(t),t.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)},Group.prototype.getRowIndex=function(t){},Group.prototype.conformRowData=function(t){return this.field?t[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(t=this.parent.conformRowData(t)),t},Group.prototype.removeRow=function(t){var o=this.rows.indexOf(t);o>-1&&this.rows.splice(o,1),this.rows.length?(this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},Group.prototype.removeGroup=function(t){var o,e=t.level+"_"+t.key;this.groups[e]&&(delete this.groups[e],o=this.groupList.indexOf(t),o>-1&&this.groupList.splice(o,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},Group.prototype.getHeadersAndRows=function(){var t=[];return t.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(o){t=t.concat(o.getHeadersAndRows())}):("table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),t=t.concat(this.rows),"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))):!this.groupList.length&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.options.groupClosedShowCalcs&&this.groupManager.table.modExists("columnCalcs")&&(this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))),t},Group.prototype.getData=function(t,o){var e=[];return this._visSet(),(!t||t&&this.visible)&&this.rows.forEach(function(t){e.push(t.getData(o||"data"))}),e},Group.prototype.getRowCount=function(){var t=0;return this.groupList.length?this.groupList.forEach(function(o){t+=o.getRowCount()}):t=this.rows.length,t},Group.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},Group.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(t){var o;t.calcs.top&&(o=t.calcs.top.getElement(),o.parentNode.removeChild(o)),t.calcs.bottom&&(o=t.calcs.bottom.getElement(),o.parentNode.removeChild(o)),t.getHeadersAndRows().forEach(function(t){var o=t.getElement();o.parentNode.removeChild(o)})}):this.rows.forEach(function(t){var o=t.getElement();o.parentNode.removeChild(o)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex())),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},Group.prototype.show=function(){var t=this;if(t.visible=!0,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var o=t.getElement();this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){var e=t.getElement();o.parentNode.insertBefore(e,o.nextSibling),t.initialize(),o=e})}):t.rows.forEach(function(t){var e=t.getElement();o.parentNode.insertBefore(e,o.nextSibling),t.initialize(),o=e}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex())}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},Group.prototype._visSet=function(){var t=[];"function"==typeof this.visible&&(this.rows.forEach(function(o){t.push(o.getData())}),this.visible=this.visible(this.key,this.getRowCount(),t,this.getComponent()))},Group.prototype.getRowGroup=function(t){var o=!1;return this.groupList.length?this.groupList.forEach(function(e){var r=e.getRowGroup(t);r&&(o=r)}):this.rows.find(function(o){return o===t})&&(o=this),o},Group.prototype.getSubGroups=function(t){var o=[];return this.groupList.forEach(function(e){o.push(t?e.getComponent():e)}),o},Group.prototype.getRows=function(t){var o=[];return this.rows.forEach(function(e){o.push(t?e.getComponent():e)}),o},Group.prototype.generateGroupHeaderContents=function(){var t=[];for(this.rows.forEach(function(o){t.push(o.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),t,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},Group.prototype.getElement=function(){return this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible"),this.element.childNodes.forEach(function(t){t.parentNode.removeChild(t)}),this.generateGroupHeaderContents(),this.element},Group.prototype.normalizeHeight=function(){this.setHeight(this.element.clientHeight)},Group.prototype.initialize=function(t){this.initialized&&!t||(this.normalizeHeight(),this.initialized=!0)},Group.prototype.reinitialize=function(){this.initialized=!1,this.height=0,Tabulator.prototype.helpers.elVisible(this.element)&&this.initialize(!0)},Group.prototype.setHeight=function(t){this.height!=t&&(this.height=t,this.outerHeight=this.element.offsetHeight)},Group.prototype.getHeight=function(){return this.outerHeight},Group.prototype.getGroup=function(){return this},Group.prototype.reinitializeHeight=function(){},Group.prototype.calcHeight=function(){},Group.prototype.setCellHeight=function(){},Group.prototype.clearCellHeight=function(){},Group.prototype.getComponent=function(){return new GroupComponent(this)};var GroupRows=function(t){this.table=t,this.groupIDLookups=!1,this.startOpen=[function(){return!1}],this.headerGenerator=[function(){return""}],this.groupList=[],this.allowedValues=!1,this.groups={},this.displayIndex=0};GroupRows.prototype.initialize=function(){var t=this,o=t.table.options.groupBy,e=t.table.options.groupStartOpen,r=t.table.options.groupHeader;if(this.allowedValues=t.table.options.groupValues,t.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],t.table.modules.localize.bind("groups|item",function(o,e){t.headerGenerator[0]=function(t,r,i){return(void 0===t?"":t)+"("+r+" "+(1===r?o:e.groups.items)+")"}}),this.groupIDLookups=[],Array.isArray(o)||o)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var i=this.table.columnManager.getRealColumns();i.forEach(function(o){o.definition.topCalc&&t.table.modules.columnCalcs.initializeTopRow(),o.definition.bottomCalc&&t.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(o)||(o=[o]),o.forEach(function(o,e){var r,i;"function"==typeof o?r=o:(i=t.table.columnManager.getColumnByField(o),r=i?function(t){return i.getFieldValue(t)}:function(t){return t[o]}),t.groupIDLookups.push({field:"function"!=typeof o&&o,func:r,values:!!t.allowedValues&&t.allowedValues[e]})}),e&&(Array.isArray(e)||(e=[e]),e.forEach(function(t){t="function"==typeof t?t:function(){return!0}}),t.startOpen=e),r&&(t.headerGenerator=Array.isArray(r)?r:[r]),this.initialized=!0},GroupRows.prototype.setDisplayIndex=function(t){this.displayIndex=t},GroupRows.prototype.getDisplayIndex=function(){return this.displayIndex},GroupRows.prototype.getRows=function(t){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(t),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):t.slice(0)},GroupRows.prototype.getGroups=function(t){var o=[];return this.groupList.forEach(function(e){o.push(t?e.getComponent():e)}),o},GroupRows.prototype.pullGroupListData=function(t){var o=this,e=[];return t.forEach(function(t){var r={};r.level=0,r.rowCount=0,r.headerContent="";var i=[];t.hasSubGroups?(i=o.pullGroupListData(t.groupList),r.level=t.level,r.rowCount=i.length-t.groupList.length,r.headerContent=t.generator(t.key,r.rowCount,t.rows,t),e.push(r),e=e.concat(i)):(r.level=t.level,r.headerContent=t.generator(t.key,t.rows.length,t.rows,t),r.rowCount=t.getRows().length,e.push(r),t.getRows().forEach(function(t){e.push(t.getData("data"))}))}),e},GroupRows.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},GroupRows.prototype.getRowGroup=function(t){var o=!1;return this.groupList.forEach(function(e){var r=e.getRowGroup(t);r&&(o=r)}),o},GroupRows.prototype.countGroups=function(){return this.groupList.length},GroupRows.prototype.generateGroups=function(t){var o=this,e=o.groups;o.groups={},o.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(t){o.createGroup(t,0,e)}),t.forEach(function(t){o.assignRowToExistingGroup(t,e)})):t.forEach(function(t){o.assignRowToGroup(t,e)})},GroupRows.prototype.createGroup=function(t,o,e){var r,i=o+"_"+t;e=e||[],r=new Group(this,!1,o,t,this.groupIDLookups[0].field,this.headerGenerator[0],e[i]),this.groups[i]=r,this.groupList.push(r)},GroupRows.prototype.assignRowToGroup=function(t,o){var e=this.groupIDLookups[0].func(t.getData()),r="0_"+e;this.groups[r]||this.createGroup(e,0,o),this.groups[r].addRow(t)},GroupRows.prototype.assignRowToExistingGroup=function(t,o){var e=this.groupIDLookups[0].func(t.getData()),r="0_"+e;this.groups[r]&&this.groups[r].addRow(t)},GroupRows.prototype.assignRowToGroup=function(t,o){var e=this.groupIDLookups[0].func(t.getData()),r=!this.groups["0_"+e];return r&&this.createGroup(e,0,o),this.groups["0_"+e].addRow(t),!r},GroupRows.prototype.updateGroupRows=function(t){var o=this,e=[];if(o.groupList.forEach(function(t){e=e.concat(t.getHeadersAndRows())}),t){var r=o.table.rowManager.setDisplayRows(e,this.getDisplayIndex());!0!==r&&this.setDisplayIndex(r),o.table.rowManager.refreshActiveData("group",!0,!0)}return e},GroupRows.prototype.scrollHeaders=function(t){this.groupList.forEach(function(o){o.arrowElement.style.marginLeft=t+"px"})},GroupRows.prototype.removeGroup=function(t){var o,e=t.level+"_"+t.key;this.groups[e]&&(delete this.groups[e],(o=this.groupList.indexOf(t))>-1&&this.groupList.splice(o,1))},Tabulator.prototype.registerModule("groupRows",GroupRows); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/history.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/history.js deleted file mode 100644 index eaf836fbb3..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/history.js +++ /dev/null @@ -1,133 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var History = function History(table) { - this.table = table; //hold Tabulator object - - this.history = []; - this.index = -1; -}; - -History.prototype.clear = function () { - this.history = []; - this.index = -1; -}; - -History.prototype.action = function (type, component, data) { - - this.history = this.history.slice(0, this.index + 1); - - this.history.push({ - type: type, - component: component, - data: data - }); - - this.index++; -}; - -History.prototype.getHistoryUndoSize = function () { - return this.index + 1; -}; - -History.prototype.getHistoryRedoSize = function () { - return this.history.length - (this.index + 1); -}; - -History.prototype.undo = function () { - - if (this.index > -1) { - var action = this.history[this.index]; - - this.undoers[action.type].call(this, action); - - this.index--; - - this.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data); - - return true; - } else { - console.warn("History Undo Error - No more history to undo"); - return false; - } -}; - -History.prototype.redo = function () { - if (this.history.length - 1 > this.index) { - - this.index++; - - var action = this.history[this.index]; - - this.redoers[action.type].call(this, action); - - this.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data); - - return true; - } else { - console.warn("History Redo Error - No more history to redo"); - return false; - } -}; - -History.prototype.undoers = { - cellEdit: function cellEdit(action) { - action.component.setValueProcessData(action.data.oldValue); - }, - - rowAdd: function rowAdd(action) { - action.component.deleteActual(); - }, - - rowDelete: function rowDelete(action) { - var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index); - - this._rebindRow(action.component, newRow); - }, - - rowMove: function rowMove(action) { - this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.pos], false); - this.table.rowManager.redraw(); - } -}; - -History.prototype.redoers = { - cellEdit: function cellEdit(action) { - action.component.setValueProcessData(action.data.newValue); - }, - - rowAdd: function rowAdd(action) { - var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index); - - this._rebindRow(action.component, newRow); - }, - - rowDelete: function rowDelete(action) { - action.component.deleteActual(); - }, - - rowMove: function rowMove(action) { - this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.pos], false); - this.table.rowManager.redraw(); - } -}; - -//rebind rows to new element after deletion -History.prototype._rebindRow = function (oldRow, newRow) { - this.history.forEach(function (action) { - if (action.component instanceof Row) { - if (action.component === oldRow) { - action.component = newRow; - } - } else if (action.component instanceof Cell) { - if (action.component.row === oldRow) { - var field = action.component.column.getField(); - - if (field) { - action.component = newRow.getCell(field); - } - } - } - }); -}; - -Tabulator.prototype.registerModule("history", History); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/history.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/history.min.js deleted file mode 100644 index 5a32bd6a02..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/history.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var History=function(t){this.table=t,this.history=[],this.index=-1};History.prototype.clear=function(){this.history=[],this.index=-1},History.prototype.action=function(t,o,e){this.history=this.history.slice(0,this.index+1),this.history.push({type:t,component:o,data:e}),this.index++},History.prototype.getHistoryUndoSize=function(){return this.index+1},History.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},History.prototype.undo=function(){if(this.index>-1){var t=this.history[this.index];return this.undoers[t.type].call(this,t),this.index--,this.table.options.historyUndo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},History.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var t=this.history[this.index];return this.redoers[t.type].call(this,t),this.table.options.historyRedo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},History.prototype.undoers={cellEdit:function(t){t.component.setValueProcessData(t.data.oldValue)},rowAdd:function(t){t.component.deleteActual()},rowDelete:function(t){var o=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this._rebindRow(t.component,o)},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.pos],!1),this.table.rowManager.redraw()}},History.prototype.redoers={cellEdit:function(t){t.component.setValueProcessData(t.data.newValue)},rowAdd:function(t){var o=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this._rebindRow(t.component,o)},rowDelete:function(t){t.component.deleteActual()},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.pos],!1),this.table.rowManager.redraw()}},History.prototype._rebindRow=function(t,o){this.history.forEach(function(e){if(e.component instanceof Row)e.component===t&&(e.component=o);else if(e.component instanceof Cell&&e.component.row===t){var n=e.component.column.getField();n&&(e.component=o.getCell(n))}})},Tabulator.prototype.registerModule("history",History); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/html_table_import.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/html_table_import.js deleted file mode 100644 index 3235c6a79b..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/html_table_import.js +++ /dev/null @@ -1,199 +0,0 @@ -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var HtmlTableImport = function HtmlTableImport(table) { - this.table = table; //hold Tabulator object - this.fieldIndex = []; - this.hasIndex = false; -}; - -HtmlTableImport.prototype.parseTable = function () { - var self = this, - element = self.table.element, - options = self.table.options, - columns = options.columns, - headers = element.getElementsByTagName("th"), - rows = element.getElementsByTagName("tbody")[0], - data = [], - newTable; - - self.hasIndex = false; - - self.table.options.htmlImporting.call(this.table); - - rows = rows ? rows.getElementsByTagName("tr") : []; - - //check for tablator inline options - self._extractOptions(element, options); - - if (headers.length) { - self._extractHeaders(headers, rows); - } else { - self._generateBlankHeaders(headers, rows); - } - - //iterate through table rows and build data set - for (var index = 0; index < rows.length; index++) { - var row = rows[index], - cells = row.getElementsByTagName("td"), - item = {}; - - //create index if the dont exist in table - if (!self.hasIndex) { - item[options.index] = index; - } - - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - if (typeof this.fieldIndex[i] !== "undefined") { - item[this.fieldIndex[i]] = cell.innerHTML; - } - } - - //add row data to item - data.push(item); - } - - //create new element - var newElement = document.createElement("div"); - - //transfer attributes to new element - var attributes = element.attributes; - - // loop through attributes and apply them on div - - for (var i in attributes) { - if (_typeof(attributes[i]) == "object") { - newElement.setAttribute(attributes[i].name, attributes[i].value); - } - } - - // replace table with div element - element.parentNode.replaceChild(newElement, element); - - options.data = data; - - self.table.options.htmlImported.call(this.table); - - // // newElement.tabulator(options); - - this.table.element = newElement; -}; - -//extract tabulator attribute options -HtmlTableImport.prototype._extractOptions = function (element, options) { - var attributes = element.attributes; - - for (var index in attributes) { - var attrib = attributes[index]; - var name; - - if ((typeof attrib === "undefined" ? "undefined" : _typeof(attrib)) == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0) { - name = attrib.name.replace("tabulator-", ""); - - for (var key in options) { - if (key.toLowerCase() == name) { - options[key] = this._attribValue(attrib.value); - } - } - } - } -}; - -//get value of attribute -HtmlTableImport.prototype._attribValue = function (value) { - if (value === "true") { - return true; - } - - if (value === "false") { - return false; - } - - return value; -}; - -//find column if it has already been defined -HtmlTableImport.prototype._findCol = function (title) { - var match = this.table.options.columns.find(function (column) { - return column.title === title; - }); - - return match || false; -}; - -//extract column from headers -HtmlTableImport.prototype._extractHeaders = function (headers, rows) { - for (var index = 0; index < headers.length; index++) { - var header = headers[index], - exists = false, - col = this._findCol(header.textContent), - width, - attributes; - - if (col) { - exists = true; - } else { - col = { title: header.textContent.trim() }; - } - - if (!col.field) { - col.field = header.textContent.trim().toLowerCase().replace(" ", "_"); - } - - width = header.getAttribute("width"); - - if (width && !col.width) { - col.width = width; - } - - //check for tablator inline options - attributes = header.attributes; - - // //check for tablator inline options - this._extractOptions(header, col); - - for (var i in attributes) { - var attrib = attributes[i], - name; - - if ((typeof attrib === "undefined" ? "undefined" : _typeof(attrib)) == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0) { - - name = attrib.name.replace("tabulator-", ""); - - col[name] = this._attribValue(attrib.value); - } - } - - this.fieldIndex[index] = col.field; - - if (col.field == this.table.options.index) { - this.hasIndex = true; - } - - if (!exists) { - this.table.options.columns.push(col); - } - } -}; - -//generate blank headers -HtmlTableImport.prototype._generateBlankHeaders = function (headers, rows) { - for (var index = 0; index < headers.length; index++) { - var header = headers[index], - col = { title: "", field: "col" + index }; - - this.fieldIndex[index] = col.field; - - var width = header.getAttribute("width"); - - if (width) { - col.width = width; - } - - this.table.options.columns.push(col); - } -}; - -Tabulator.prototype.registerModule("htmlTableImport", HtmlTableImport); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/html_table_import.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/html_table_import.min.js deleted file mode 100644 index ceac6ad5e5..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/html_table_import.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},HtmlTableImport=function(t){this.table=t,this.fieldIndex=[],this.hasIndex=!1};HtmlTableImport.prototype.parseTable=function(){var t=this,e=t.table.element,o=t.table.options,a=(o.columns,e.getElementsByTagName("th")),n=e.getElementsByTagName("tbody")[0],r=[];t.hasIndex=!1,t.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],t._extractOptions(e,o),a.length?t._extractHeaders(a,n):t._generateBlankHeaders(a,n);for(var l=0;l -1) { - self.pressedKeys.splice(index, 1); - } - } - }; - - this.table.element.addEventListener("keydown", this.keyupBinding); - - this.table.element.addEventListener("keyup", this.keydownBinding); -}; - -Keybindings.prototype.clearBindings = function () { - if (this.keyupBinding) { - this.table.element.removeEventListener("keydown", this.keyupBinding); - } - - if (this.keydownBinding) { - this.table.element.removeEventListener("keyup", this.keydownBinding); - } -}; - -Keybindings.prototype.checkBinding = function (e, binding) { - var self = this, - match = true; - - if (e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift) { - binding.keys.forEach(function (key) { - var index = self.pressedKeys.indexOf(key); - - if (index == -1) { - match = false; - } - }); - - if (match) { - binding.action.call(self, e); - } - - return true; - } - - return false; -}; - -//default bindings -Keybindings.prototype.bindings = { - navPrev: "shift + 9", - navNext: 9, - navUp: 38, - navDown: 40, - scrollPageUp: 33, - scrollPageDown: 34, - scrollToStart: 36, - scrollToEnd: 35, - undo: "ctrl + 90", - redo: "ctrl + 89", - copyToClipboard: "ctrl + 67" -}; - -//default actions -Keybindings.prototype.actions = { - keyBlock: function keyBlock(e) { - e.stopPropagation(); - e.preventDefault(); - }, - scrollPageUp: function scrollPageUp(e) { - var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop - rowManager.height, - scrollMax = rowManager.element.scrollHeight; - - e.preventDefault(); - - if (rowManager.displayRowsCount) { - if (newPos >= 0) { - rowManager.element.scrollTop = newPos; - } else { - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - } - - this.table.element.focus(); - }, - scrollPageDown: function scrollPageDown(e) { - var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop + rowManager.height, - scrollMax = rowManager.element.scrollHeight; - - e.preventDefault(); - - if (rowManager.displayRowsCount) { - if (newPos <= scrollMax) { - rowManager.element.scrollTop = newPos; - } else { - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - } - - this.table.element.focus(); - }, - scrollToStart: function scrollToStart(e) { - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if (rowManager.displayRowsCount) { - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - - this.table.element.focus(); - }, - scrollToEnd: function scrollToEnd(e) { - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if (rowManager.displayRowsCount) { - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - - this.table.element.focus(); - }, - navPrev: function navPrev(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().prev(); - } - } - }, - - navNext: function navNext(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().next(); - } - } - }, - - navLeft: function navLeft(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().left(); - } - } - }, - - navRight: function navRight(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().right(); - } - } - }, - - navUp: function navUp(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().up(); - } - } - }, - - navDown: function navDown(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().down(); - } - } - }, - - undo: function undo(e) { - var cell = false; - if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) { - - cell = this.table.modules.edit.currentCell; - - if (!cell) { - e.preventDefault(); - this.table.modules.history.undo(); - } - } - }, - - redo: function redo(e) { - var cell = false; - if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) { - - cell = this.table.modules.edit.currentCell; - - if (!cell) { - e.preventDefault(); - this.table.modules.history.redo(); - } - } - }, - - copyToClipboard: function copyToClipboard(e) { - if (!this.table.modules.edit.currentCell) { - if (this.table.modExists("clipboard", true)) { - this.table.modules.clipboard.copy(!this.table.options.selectable || this.table.options.selectable == "highlight" ? "active" : "selected", null, null, null, true); - } - } - } -}; - -Tabulator.prototype.registerModule("keybindings", Keybindings); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/keybindings.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/keybindings.min.js deleted file mode 100644 index 837370baba..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/keybindings.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Keybindings=function(t){this.table=t,this.watchKeys=null,this.pressedKeys=null,this.keyupBinding=!1,this.keydownBinding=!1};Keybindings.prototype.initialize=function(){var t=this.table.options.keybindings,e={};if(this.watchKeys={},this.pressedKeys=[],!1!==t){for(var i in this.bindings)e[i]=this.bindings[i];if(Object.keys(t).length)for(var n in t)e[n]=t[n];this.mapBindings(e),this.bindEvents()}},Keybindings.prototype.mapBindings=function(t){var e=this,i=this;for(var n in t)!function(n){e.actions[n]?t[n]&&("object"!==_typeof(t[n])&&(t[n]=[t[n]]),t[n].forEach(function(t){i.mapBinding(n,t)})):console.warn("Key Binding Error - no such action:",n)}(n)},Keybindings.prototype.mapBinding=function(t,e){var i=this,n={action:this.actions[t],keys:[],ctrl:!1,shift:!1};e.toString().toLowerCase().split(" ").join("").split("+").forEach(function(t){switch(t){case"ctrl":n.ctrl=!0;break;case"shift":n.shift=!0;break;default:t=parseInt(t),n.keys.push(t),i.watchKeys[t]||(i.watchKeys[t]=[]),i.watchKeys[t].push(n)}})},Keybindings.prototype.bindEvents=function(){var t=this;this.keyupBinding=function(e){var i=e.keyCode,n=t.watchKeys[i];n&&(t.pressedKeys.push(i),n.forEach(function(i){t.checkBinding(e,i)}))},this.keydownBinding=function(e){var i=e.keyCode;if(t.watchKeys[i]){var n=t.pressedKeys.indexOf(i);n>-1&&t.pressedKeys.splice(n,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},Keybindings.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},Keybindings.prototype.checkBinding=function(t,e){var i=this,n=!0;return t.ctrlKey==e.ctrl&&t.shiftKey==e.shift&&(e.keys.forEach(function(t){-1==i.pressedKeys.indexOf(t)&&(n=!1)}),n&&e.action.call(i,t),!0)},Keybindings.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},Keybindings.prototype.actions={keyBlock:function(t){t.stopPropagation(),t.preventDefault()},scrollPageUp:function(t){var e=this.table.rowManager,i=e.scrollTop-e.height;e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(i>=0?e.element.scrollTop=i:e.scrollToRow(e.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(t){var e=this.table.rowManager,i=e.scrollTop+e.height,n=e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(i<=n?e.element.scrollTop=i:e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1]),this.table.element.focus()},navPrev:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().prev())},navNext:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().next())},navLeft:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().left())},navRight:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().right())},navUp:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().up())},navDown:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().down())},undo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.undo()))},redo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(t){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(this.table.options.selectable&&"highlight"!=this.table.options.selectable?"selected":"active",null,null,null,!0)}},Tabulator.prototype.registerModule("keybindings",Keybindings); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/moveable_columns.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/moveable_columns.js deleted file mode 100644 index ddfb57795d..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/moveable_columns.js +++ /dev/null @@ -1,196 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var MoveColumns = function MoveColumns(table) { - this.table = table; //hold Tabulator object - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating column header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving column - this.toCol = false; //destination column - this.toColAfter = false; //position of moving column relative to the desitnation column - this.startX = 0; //starting position within header element - this.autoScrollMargin = 40; //auto scroll on edge when within margin - this.autoScrollStep = 5; //auto scroll distance in pixels - this.autoScrollTimeout = false; //auto scroll timeout - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); -}; - -MoveColumns.prototype.createPlaceholderElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.classList.add("tabulator-col-placeholder"); - - return el; -}; - -MoveColumns.prototype.initializeColumn = function (column) { - var self = this, - config = {}, - colEl; - - if (!column.modules.frozen) { - - colEl = column.getElement(); - - config.mousemove = function (e) { - if (column.parent === self.moving.parent) { - if (e.pageX - Tabulator.prototype.helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) { - if (self.toCol !== column || !self.toColAfter) { - colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling); - self.moveColumn(column, true); - } - } else { - if (self.toCol !== column || self.toColAfter) { - colEl.parentNode.insertBefore(self.placeholderElement, colEl); - self.moveColumn(column, false); - } - } - } - }.bind(self); - - colEl.addEventListener("mousedown", function (e) { - if (e.which === 1) { - self.checkTimeout = setTimeout(function () { - self.startMove(e, column); - }, self.checkPeriod); - } - }); - - colEl.addEventListener("mouseup", function (e) { - if (e.which === 1) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - } - }); - } - - column.modules.moveColumn = config; -}; - -MoveColumns.prototype.startMove = function (e, column) { - var element = column.getElement(); - - this.moving = column; - this.startX = e.pageX - Tabulator.prototype.helpers.elOffset(element).left; - - this.table.element.classList.add("tabulator-block-select"); - - //create placeholder - - this.placeholderElement.style.width = column.getWidth() + "px"; - this.placeholderElement.style.height = column.getHeight() + "px"; - - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - this.table.columnManager.getElement().appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.bottom = "0"; - - this._bindMouseMove(); - - document.body.addEventListener("mousemove", this.moveHover); - document.body.addEventListener("mouseup", this.endMove); - - this.moveHover(e); -}; - -MoveColumns.prototype._bindMouseMove = function () { - this.table.columnManager.columnsByIndex.forEach(function (column) { - if (column.modules.moveColumn.mousemove) { - column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); -}; - -MoveColumns.prototype._unbindMouseMove = function () { - this.table.columnManager.columnsByIndex.forEach(function (column) { - if (column.modules.moveColumn.mousemove) { - column.getElement().removeEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); -}; - -MoveColumns.prototype.moveColumn = function (column, after) { - var movingCells = this.moving.getCells(); - - this.toCol = column; - this.toColAfter = after; - - if (after) { - column.getCells().forEach(function (cell, i) { - var cellEl = cell.getElement(); - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling); - }); - } else { - column.getCells().forEach(function (cell, i) { - var cellEl = cell.getElement(); - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl); - }); - } -}; - -MoveColumns.prototype.endMove = function (e) { - if (e.which === 1) { - this._unbindMouseMove(); - - this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling); - this.placeholderElement.parentNode.removeChild(this.placeholderElement); - this.hoverElement.parentNode.removeChild(this.hoverElement); - - this.table.element.classList.remove("tabulator-block-select"); - - if (this.toCol) { - this.table.columnManager.moveColumn(this.moving, this.toCol, this.toColAfter); - } - - this.moving = false; - this.toCol = false; - this.toColAfter = false; - - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - } -}; - -MoveColumns.prototype.moveHover = function (e) { - var self = this, - columnHolder = self.table.columnManager.getElement(), - scrollLeft = columnHolder.scrollLeft, - xPos = e.pageX - Tabulator.prototype.helpers.elOffset(columnHolder).left + scrollLeft, - scrollPos; - - self.hoverElement.style.left = xPos - self.startX + "px"; - - if (xPos - scrollLeft < self.autoScrollMargin) { - if (!self.autoScrollTimeout) { - self.autoScrollTimeout = setTimeout(function () { - scrollPos = Math.max(0, scrollLeft - 5); - self.table.rowManager.getElement().scrollLeft = scrollPos; - self.autoScrollTimeout = false; - }, 1); - } - } - - if (scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin) { - if (!self.autoScrollTimeout) { - self.autoScrollTimeout = setTimeout(function () { - scrollPos = Math.min(columnHolder.clientWidth, scrollLeft + 5); - self.table.rowManager.getElement().scrollLeft = scrollPos; - self.autoScrollTimeout = false; - }, 1); - } - } -}; - -Tabulator.prototype.registerModule("moveColumn", MoveColumns); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/moveable_columns.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/moveable_columns.min.js deleted file mode 100644 index fbcaac7067..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/moveable_columns.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var MoveColumns=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};MoveColumns.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-col"),e.classList.add("tabulator-col-placeholder"),e},MoveColumns.prototype.initializeColumn=function(e){var t,o=this,l={};e.modules.frozen||(t=e.getElement(),l.mousemove=function(l){e.parent===o.moving.parent&&(l.pageX-Tabulator.prototype.helpers.elOffset(t).left+o.table.columnManager.element.scrollLeft>e.getWidth()/2?o.toCol===e&&o.toColAfter||(t.parentNode.insertBefore(o.placeholderElement,t.nextSibling),o.moveColumn(e,!0)):(o.toCol!==e||o.toColAfter)&&(t.parentNode.insertBefore(o.placeholderElement,t),o.moveColumn(e,!1)))}.bind(o),t.addEventListener("mousedown",function(t){1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)})),e.modules.moveColumn=l},MoveColumns.prototype.startMove=function(e,t){var o=t.getElement();this.moving=t,this.startX=e.pageX-Tabulator.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},MoveColumns.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveColumn.mousemove)})},MoveColumns.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(e){e.modules.moveColumn.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveColumn.mousemove)})},MoveColumns.prototype.moveColumn=function(e,t){var o=this.moving.getCells();this.toCol=e,this.toColAfter=t,t?e.getCells().forEach(function(e,t){var l=e.getElement();l.parentNode.insertBefore(o[t].getElement(),l.nextSibling)}):e.getCells().forEach(function(e,t){var l=e.getElement();l.parentNode.insertBefore(o[t].getElement(),l)})},MoveColumns.prototype.endMove=function(e){1===e.which&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumn(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove))},MoveColumns.prototype.moveHover=function(e){var t,o=this,l=o.table.columnManager.getElement(),n=l.scrollLeft,i=e.pageX-Tabulator.prototype.helpers.elOffset(l).left+n;o.hoverElement.style.left=i-o.startX+"px",i-n row.getHeight() / 2) { - if (self.toRow !== row || !self.toRowAfter) { - var rowEl = row.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); - self.moveRow(row, true); - } - } else { - if (self.toRow !== row || self.toRowAfter) { - var rowEl = row.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl); - self.moveRow(row, false); - } - } - }.bind(self); - - if (!this.hasHandle) { - - rowEl = row.getElement(); - - rowEl.addEventListener("mousedown", function (e) { - if (e.which === 1) { - self.checkTimeout = setTimeout(function () { - self.startMove(e, row); - }, self.checkPeriod); - } - }); - - rowEl.addEventListener("mouseup", function (e) { - if (e.which === 1) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - } - }); - } - - row.modules.moveRow = config; -}; - -MoveRows.prototype.initializeCell = function (cell) { - var self = this, - cellEl = cell.getElement(); - - cellEl.addEventListener("mousedown", function (e) { - if (e.which === 1) { - self.checkTimeout = setTimeout(function () { - self.startMove(e, cell.row); - }, self.checkPeriod); - } - }); - - cellEl.addEventListener("mouseup", function (e) { - if (e.which === 1) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - } - }); -}; - -MoveRows.prototype._bindMouseMove = function () { - var self = this; - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row" && row.modules.moveRow.mousemove) { - row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); -}; - -MoveRows.prototype._unbindMouseMove = function () { - var self = this; - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row" && row.modules.moveRow.mousemove) { - row.getElement().removeEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); -}; - -MoveRows.prototype.startMove = function (e, row) { - var element = row.getElement(); - - this.setStartPosition(e, row); - - this.moving = row; - - this.table.element.classList.add("tabulator-block-select"); - - //create placeholder - this.placeholderElement.style.width = row.getWidth() + "px"; - this.placeholderElement.style.height = row.getHeight() + "px"; - - if (!this.connection) { - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - } else { - this.table.element.classList.add("tabulator-movingrow-sending"); - this.connectToTables(row); - } - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - if (this.connection) { - document.body.appendChild(this.hoverElement); - this.hoverElement.style.left = "0"; - this.hoverElement.style.top = "0"; - this.hoverElement.style.width = this.table.element.clientWidth + "px"; - this.hoverElement.style.whiteSpace = "nowrap"; - this.hoverElement.style.overflow = "hidden"; - this.hoverElement.style.pointerEvents = "none"; - } else { - this.table.rowManager.getTableElement().appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.top = "0"; - - this._bindMouseMove(); - } - - document.body.addEventListener("mousemove", this.moveHover); - document.body.addEventListener("mouseup", this.endMove); - - this.moveHover(e); -}; - -MoveRows.prototype.setStartPosition = function (e, row) { - var element, position; - - element = row.getElement(); - if (this.connection) { - position = element.getBoundingClientRect(); - - this.startX = position.left - e.pageX + window.scrollX; - this.startY = position.top - e.pageY + window.scrollY; - } else { - this.startY = e.pageY - element.getBoundingClientRect().top; - } -}; - -MoveRows.prototype.endMove = function (e) { - if (!e || e.which === 1) { - this._unbindMouseMove(); - - if (!this.connection) { - this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling); - this.placeholderElement.parentNode.removeChild(this.placeholderElement); - } - - this.hoverElement.parentNode.removeChild(this.hoverElement); - - this.table.element.classList.remove("tabulator-block-select"); - - if (this.toRow) { - this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter); - } - - this.moving = false; - this.toRow = false; - this.toRowAfter = false; - - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - - if (this.connection) { - this.table.element.classList.remove("tabulator-movingrow-sending"); - this.disconnectFromTables(); - } - } -}; - -MoveRows.prototype.moveRow = function (row, after) { - this.toRow = row; - this.toRowAfter = after; -}; - -MoveRows.prototype.moveHover = function (e) { - if (this.connection) { - this.moveHoverConnections.call(this, e); - } else { - this.moveHoverTable.call(this, e); - } -}; - -MoveRows.prototype.moveHoverTable = function (e) { - var rowHolder = this.table.rowManager.getElement(), - scrollTop = rowHolder.scrollTop, - yPos = e.pageY - rowHolder.getBoundingClientRect().top + scrollTop, - scrollPos; - - this.hoverElement.style.top = yPos - this.startY + "px"; -}; - -MoveRows.prototype.moveHoverConnections = function (e) { - this.hoverElement.style.left = this.startX + e.pageX + "px"; - this.hoverElement.style.top = this.startY + e.pageY + "px"; -}; - -//establish connection with other tables -MoveRows.prototype.connectToTables = function (row) { - var self = this, - connections = this.table.modules.comms.getConnections(this.connection); - - this.table.options.movableRowsSendingStart.call(this.table, connections); - - this.table.modules.comms.send(this.connection, "moveRow", "connect", { - row: row - }); -}; - -//disconnect from other tables -MoveRows.prototype.disconnectFromTables = function () { - var self = this, - connections = this.table.modules.comms.getConnections(this.connection); - - this.table.options.movableRowsSendingStop.call(this.table, connections); - - this.table.modules.comms.send(this.connection, "moveRow", "disconnect"); -}; - -//accept incomming connection -MoveRows.prototype.connect = function (table, row) { - var self = this; - if (!this.connectedTable) { - this.connectedTable = table; - this.connectedRow = row; - - this.table.element.classList.add("tabulator-movingrow-receiving"); - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) { - row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - self.tableRowDropEvent = self.tableRowDrop.bind(self); - - self.table.element.addEventListener("mouseup", self.tableRowDropEvent); - - this.table.options.movableRowsReceivingStart.call(this.table, row, table); - - return true; - } else { - console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable); - return false; - } -}; - -//close incomming connection -MoveRows.prototype.disconnect = function (table) { - var self = this; - if (table === this.connectedTable) { - this.connectedTable = false; - this.connectedRow = false; - - this.table.element.classList.remove("tabulator-movingrow-receiving"); - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) { - row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - self.table.element.removeEventListener("mouseup", self.tableRowDropEvent); - - this.table.options.movableRowsReceivingStop.call(this.table, table); - } else { - console.warn("Move Row Error - trying to disconnect from non connected table"); - } -}; - -MoveRows.prototype.dropComplete = function (table, row, success) { - var sender = false; - - if (success) { - - switch (_typeof(this.table.options.movableRowsSender)) { - case "string": - sender = this.senders[this.table.options.movableRowsSender]; - break; - - case "function": - sender = this.table.options.movableRowsSender; - break; - } - - if (sender) { - sender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } else { - if (this.table.options.movableRowsSender) { - console.warn("Mover Row Error - no matching sender found:", this.table.options.movableRowsSender); - } - } - - this.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } else { - this.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } - - this.endMove(); -}; - -MoveRows.prototype.tableRowDrop = function (e, row) { - var receiver = false, - success = false; - - e.stopImmediatePropagation(); - - switch (_typeof(this.table.options.movableRowsReceiver)) { - case "string": - receiver = this.receivers[this.table.options.movableRowsReceiver]; - break; - - case "function": - receiver = this.table.options.movableRowsReceiver; - break; - } - - if (receiver) { - success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } else { - console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver); - } - - if (success) { - this.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } else { - this.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } - - this.table.modules.comms.send(this.connectedTable, "moveRow", "dropcomplete", { - row: row, - success: success - }); -}; - -MoveRows.prototype.receivers = { - insert: function insert(fromRow, toRow, fromTable) { - this.table.addRow(fromRow.getData(), undefined, toRow); - return true; - }, - - add: function add(fromRow, toRow, fromTable) { - this.table.addRow(fromRow.getData()); - return true; - }, - - update: function update(fromRow, toRow, fromTable) { - if (toRow) { - toRow.update(fromRow.getData()); - return true; - } - - return false; - }, - - replace: function replace(fromRow, toRow, fromTable) { - if (toRow) { - this.table.addRow(fromRow.getData(), undefined, toRow); - toRow.delete(); - return true; - } - - return false; - } -}; - -MoveRows.prototype.senders = { - delete: function _delete(fromRow, toRow, toTable) { - fromRow.delete(); - } -}; - -MoveRows.prototype.commsReceived = function (table, action, data) { - switch (action) { - case "connect": - return this.connect(table, data.row); - break; - - case "disconnect": - return this.disconnect(table); - break; - - case "dropcomplete": - return this.dropComplete(table, data.row, data.success); - break; - } -}; - -Tabulator.prototype.registerModule("moveRow", MoveRows); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/moveable_rows.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/moveable_rows.min.js deleted file mode 100644 index 7624efd615..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/moveable_rows.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},MoveRows=function(e){this.table=e,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=150,this.moving=!1,this.toRow=!1,this.toRowAfter=!1,this.hasHandle=!1,this.startY=0,this.startX=0,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this),this.tableRowDropEvent=!1,this.connection=!1,this.connections=[],this.connectedTable=!1,this.connectedRow=!1};MoveRows.prototype.createPlaceholderElement=function(){var e=document.createElement("div");return e.classList.add("tabulator-row"),e.classList.add("tabulator-row-placeholder"),e},MoveRows.prototype.initialize=function(e){this.connection=this.table.options.movableRowsConnectedTables},MoveRows.prototype.setHandle=function(e){this.hasHandle=e},MoveRows.prototype.initializeRow=function(e){var t,o=this,n={};n.mouseup=function(t){o.tableRowDrop(t,e)}.bind(o),n.mousemove=function(t){if(t.pageY-Tabulator.prototype.helpers.elOffset(e.element).top+o.table.rowManager.element.scrollTop>e.getHeight()/2){if(o.toRow!==e||!o.toRowAfter){var n=e.getElement();n.parentNode.insertBefore(o.placeholderElement,n.nextSibling),o.moveRow(e,!0)}}else if(o.toRow!==e||o.toRowAfter){var n=e.getElement();n.parentNode.insertBefore(o.placeholderElement,n),o.moveRow(e,!1)}}.bind(o),this.hasHandle||(t=e.getElement(),t.addEventListener("mousedown",function(t){1===t.which&&(o.checkTimeout=setTimeout(function(){o.startMove(t,e)},o.checkPeriod))}),t.addEventListener("mouseup",function(e){1===e.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)})),e.modules.moveRow=n},MoveRows.prototype.initializeCell=function(e){var t=this,o=e.getElement();o.addEventListener("mousedown",function(o){1===o.which&&(t.checkTimeout=setTimeout(function(){t.startMove(o,e.row)},t.checkPeriod))}),o.addEventListener("mouseup",function(e){1===e.which&&t.checkTimeout&&clearTimeout(t.checkTimeout)})},MoveRows.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow.mousemove&&e.getElement().addEventListener("mousemove",e.modules.moveRow.mousemove)})},MoveRows.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow.mousemove&&e.getElement().removeEventListener("mousemove",e.modules.moveRow.mousemove)})},MoveRows.prototype.startMove=function(e,t){var o=t.getElement();this.setStartPosition(e,t),this.moving=t,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=t.getWidth()+"px",this.placeholderElement.style.height=t.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(t)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(e)},MoveRows.prototype.setStartPosition=function(e,t){var o,n;o=t.getElement(),this.connection?(n=o.getBoundingClientRect(),this.startX=n.left-e.pageX+window.scrollX,this.startY=n.top-e.pageY+window.scrollY):this.startY=e.pageY-o.getBoundingClientRect().top},MoveRows.prototype.endMove=function(e){e&&1!==e.which||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},MoveRows.prototype.moveRow=function(e,t){this.toRow=e,this.toRowAfter=t},MoveRows.prototype.moveHover=function(e){this.connection?this.moveHoverConnections.call(this,e):this.moveHoverTable.call(this,e)},MoveRows.prototype.moveHoverTable=function(e){var t=this.table.rowManager.getElement(),o=t.scrollTop,n=e.pageY-t.getBoundingClientRect().top+o;this.hoverElement.style.top=n-this.startY+"px"},MoveRows.prototype.moveHoverConnections=function(e){this.hoverElement.style.left=this.startX+e.pageX+"px",this.hoverElement.style.top=this.startY+e.pageY+"px"},MoveRows.prototype.connectToTables=function(e){var t=this.table.modules.comms.getConnections(this.connection);this.table.options.movableRowsSendingStart.call(this.table,t),this.table.modules.comms.send(this.connection,"moveRow","connect",{row:e})},MoveRows.prototype.disconnectFromTables=function(){var e=this.table.modules.comms.getConnections(this.connection);this.table.options.movableRowsSendingStop.call(this.table,e),this.table.modules.comms.send(this.connection,"moveRow","disconnect")},MoveRows.prototype.connect=function(e,t){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=e,this.connectedRow=t,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().addEventListener("mouseup",e.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,t,e),!0)},MoveRows.prototype.disconnect=function(e){var t=this;e===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),t.table.rowManager.getDisplayRows().forEach(function(e){"row"===e.type&&e.modules.moveRow&&e.modules.moveRow.mouseup&&e.getElement().removeEventListener("mouseup",e.modules.moveRow.mouseup)}),t.table.element.removeEventListener("mouseup",t.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,e)):console.warn("Move Row Error - trying to disconnect from non connected table")},MoveRows.prototype.dropComplete=function(e,t,o){var n=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":n=this.senders[this.table.options.movableRowsSender];break;case"function":n=this.table.options.movableRowsSender}n?n.call(this,this.moving.getComponent(),t?t.getComponent():void 0,e):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),t?t.getComponent():void 0,e);this.endMove()},MoveRows.prototype.tableRowDrop=function(e,t){var o=!1,n=!1;switch(e.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?n=o.call(this,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),n?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),t?t.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:t,success:n})},MoveRows.prototype.receivers={insert:function(e,t,o){return this.table.addRow(e.getData(),void 0,t),!0},add:function(e,t,o){return this.table.addRow(e.getData()),!0},update:function(e,t,o){return!!t&&(t.update(e.getData()),!0)},replace:function(e,t,o){return!!t&&(this.table.addRow(e.getData(),void 0,t),t.delete(),!0)}},MoveRows.prototype.senders={delete:function(e,t,o){e.delete()}},MoveRows.prototype.commsReceived=function(e,t,o){switch(t){case"connect":return this.connect(e,o.row);case"disconnect":return this.disconnect(e);case"dropcomplete":return this.dropComplete(e,o.row,o.success)}},Tabulator.prototype.registerModule("moveRow",MoveRows); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/mutator.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/mutator.js deleted file mode 100644 index a4f0ae180d..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/mutator.js +++ /dev/null @@ -1,113 +0,0 @@ -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var Mutator = function Mutator(table) { - this.table = table; //hold Tabulator object - this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of muatation types - this.enabled = true; -}; - -//initialize column mutator -Mutator.prototype.initializeColumn = function (column) { - var self = this, - match = false, - config = {}; - - this.allowedTypes.forEach(function (type) { - var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - mutator; - - if (column.definition[key]) { - mutator = self.lookupMutator(column.definition[key]); - - if (mutator) { - match = true; - - config[key] = { - mutator: mutator, - params: column.definition[key + "Params"] || {} - }; - } - } - }); - - if (match) { - column.modules.mutate = config; - } -}; - -Mutator.prototype.lookupMutator = function (value) { - var mutator = false; - - //set column mutator - switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { - case "string": - if (this.mutators[value]) { - mutator = this.mutators[value]; - } else { - console.warn("Mutator Error - No such mutator found, ignoring: ", value); - } - break; - - case "function": - mutator = value; - break; - } - - return mutator; -}; - -//apply mutator to row -Mutator.prototype.transformRow = function (data, type, update) { - var self = this, - key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - value; - - if (this.enabled) { - - self.table.columnManager.traverse(function (column) { - var mutator, params, component; - - if (column.modules.mutate) { - mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false; - - if (mutator) { - value = column.getFieldValue(data); - - if (!update || update && typeof value !== "undefined") { - component = column.getComponent(); - params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params; - column.setFieldValue(data, mutator.mutator(value, data, type, params, component)); - } - } - } - }); - } - - return data; -}; - -//apply mutator to new cell value -Mutator.prototype.transformCell = function (cell, value) { - var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false; - - if (mutator) { - return mutator.mutator(value, cell.row.getData(), "edit", mutator.params, cell.getComponent()); - } else { - return value; - } -}; - -Mutator.prototype.enable = function () { - this.enabled = true; -}; - -Mutator.prototype.disable = function () { - this.enabled = false; -}; - -//default mutators -Mutator.prototype.mutators = {}; - -Tabulator.prototype.registerModule("mutator", Mutator); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/mutator.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/mutator.min.js deleted file mode 100644 index 9413c0fdf3..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/mutator.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mutator=function(t){this.table=t,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};Mutator.prototype.initializeColumn=function(t){var o=this,e=!1,a={};this.allowedTypes.forEach(function(r){var u,n="mutator"+(r.charAt(0).toUpperCase()+r.slice(1));t.definition[n]&&(u=o.lookupMutator(t.definition[n]))&&(e=!0,a[n]={mutator:u,params:t.definition[n+"Params"]||{}})}),e&&(t.modules.mutate=a)},Mutator.prototype.lookupMutator=function(t){var o=!1;switch(void 0===t?"undefined":_typeof(t)){case"string":this.mutators[t]?o=this.mutators[t]:console.warn("Mutator Error - No such mutator found, ignoring: ",t);break;case"function":o=t}return o},Mutator.prototype.transformRow=function(t,o,e){var a,r=this,u="mutator"+(o.charAt(0).toUpperCase()+o.slice(1));return this.enabled&&r.table.columnManager.traverse(function(r){var n,i,s;r.modules.mutate&&(n=r.modules.mutate[u]||r.modules.mutate.mutator||!1)&&(a=r.getFieldValue(t),(!e||e&&void 0!==a)&&(s=r.getComponent(),i="function"==typeof n.params?n.params(a,t,o,s):n.params,r.setFieldValue(t,n.mutator(a,t,o,i,s))))}),t},Mutator.prototype.transformCell=function(t,o){var e=t.column.modules.mutate.mutatorEdit||t.column.modules.mutate.mutator||!1;return e?e.mutator(o,t.row.getData(),"edit",e.params,t.getComponent()):o},Mutator.prototype.enable=function(){this.enabled=!0},Mutator.prototype.disable=function(){this.enabled=!1},Mutator.prototype.mutators={},Tabulator.prototype.registerModule("mutator",Mutator); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/page.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/page.js deleted file mode 100644 index ef6ea6e51e..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/page.js +++ /dev/null @@ -1,527 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var Page = function Page(table) { - - this.table = table; //hold Tabulator object - - this.mode = "local"; - this.progressiveLoad = false; - - this.size = 0; - this.page = 1; - this.count = 5; - this.max = 1; - - this.displayIndex = 0; //index in display pipeline - - this.createElements(); -}; - -Page.prototype.createElements = function () { - - var button; - - this.element = document.createElement("span"); - this.element.classList.add("tabulator-paginator"); - - this.pagesElement = document.createElement("span"); - this.pagesElement.classList.add("tabulator-pages"); - - button = document.createElement("button"); - button.classList.add("tabulator-page"); - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - button.setAttribute("aria-label", ""); - button.setAttribute("title", ""); - - this.firstBut = button.cloneNode(true); - this.firstBut.setAttribute("data-page", "first"); - - this.prevBut = button.cloneNode(true); - this.prevBut.setAttribute("data-page", "prev"); - - this.nextBut = button.cloneNode(true); - this.nextBut.setAttribute("data-page", "next"); - - this.lastBut = button.cloneNode(true); - this.lastBut.setAttribute("data-page", "last"); -}; - -//setup pageination -Page.prototype.initialize = function (hidden) { - var self = this; - - //update param names - for (var key in self.table.options.paginationDataSent) { - self.paginationDataSentNames[key] = self.table.options.paginationDataSent[key]; - } - - for (var _key in self.table.options.paginationDataReceived) { - self.paginationDataReceivedNames[_key] = self.table.options.paginationDataReceived[_key]; - } - - //build pagination element - - //bind localizations - self.table.modules.localize.bind("pagination|first", function (value) { - self.firstBut.innerHTML = value; - }); - - self.table.modules.localize.bind("pagination|first_title", function (value) { - self.firstBut.setAttribute("aria-label", value); - self.firstBut.setAttribute("title", value); - }); - - self.table.modules.localize.bind("pagination|prev", function (value) { - self.prevBut.innerHTML = value; - }); - - self.table.modules.localize.bind("pagination|prev_title", function (value) { - self.prevBut.setAttribute("aria-label", value); - self.prevBut.setAttribute("title", value); - }); - - self.table.modules.localize.bind("pagination|next", function (value) { - self.nextBut.innerHTML = value; - }); - - self.table.modules.localize.bind("pagination|next_title", function (value) { - self.nextBut.setAttribute("aria-label", value); - self.nextBut.setAttribute("title", value); - }); - - self.table.modules.localize.bind("pagination|last", function (value) { - self.lastBut.innerHTML = value; - }); - - self.table.modules.localize.bind("pagination|last_title", function (value) { - self.lastBut.setAttribute("aria-label", value); - self.lastBut.setAttribute("title", value); - }); - - //click bindings - self.firstBut.addEventListener("click", function () { - self.setPage(1); - }); - - self.prevBut.addEventListener("click", function () { - self.previousPage(); - }); - - self.nextBut.addEventListener("click", function () { - self.nextPage().then(function () {}).catch(function () {}); - }); - - self.lastBut.addEventListener("click", function () { - self.setPage(self.max); - }); - - if (self.table.options.paginationElement) { - self.element = self.table.options.paginationElement; - } - - //append to DOM - self.element.appendChild(self.firstBut); - self.element.appendChild(self.prevBut); - self.element.appendChild(self.pagesElement); - self.element.appendChild(self.nextBut); - self.element.appendChild(self.lastBut); - - if (!self.table.options.paginationElement && !hidden) { - self.table.footerManager.append(self.element, self); - } - - //set default values - self.mode = self.table.options.pagination; - self.size = self.table.options.paginationSize || Math.floor(self.table.rowManager.getElement().clientHeight / 24); - self.count = self.table.options.paginationButtonCount; -}; - -Page.prototype.initializeProgressive = function (mode) { - this.initialize(true); - this.mode = "progressive_" + mode; - this.progressiveLoad = true; -}; - -Page.prototype.setDisplayIndex = function (index) { - this.displayIndex = index; -}; - -Page.prototype.getDisplayIndex = function () { - return this.displayIndex; -}; - -//calculate maximum page from number of rows -Page.prototype.setMaxRows = function (rowCount) { - if (!rowCount) { - this.max = 1; - } else { - this.max = Math.ceil(rowCount / this.size); - } - - if (this.page > this.max) { - this.page = this.max; - } -}; - -//reset to first page without triggering action -Page.prototype.reset = function (force) { - if (this.mode == "local" || force) { - this.page = 1; - } - return true; -}; - -//set the maxmum page -Page.prototype.setMaxPage = function (max) { - this.max = max || 1; - - if (this.page > this.max) { - this.page = this.max; - this.trigger(); - } -}; - -//set current page number -Page.prototype.setPage = function (page) { - var _this = this; - - return new Promise(function (resolve, reject) { - if (page > 0 && page <= _this.max) { - _this.page = page; - _this.trigger().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - } else { - console.warn("Pagination Error - Requested page is out of range of 1 - " + _this.max + ":", page); - reject(); - } - }); -}; - -Page.prototype.setPageSize = function (size) { - if (size > 0) { - this.size = size; - } -}; - -//setup the pagination buttons -Page.prototype._setPageButtons = function () { - var self = this; - - var leftSize = Math.floor((this.count - 1) / 2); - var rightSize = Math.ceil((this.count - 1) / 2); - var min = this.max - this.page + leftSize + 1 < this.count ? this.max - this.count + 1 : Math.max(this.page - leftSize, 1); - var max = this.page <= rightSize ? Math.min(this.count, this.max) : Math.min(this.page + rightSize, this.max); - - while (self.pagesElement.firstChild) { - self.pagesElement.removeChild(self.pagesElement.firstChild); - }if (self.page == 1) { - self.firstBut.disabled = true; - self.prevBut.disabled = true; - } else { - self.firstBut.disabled = false; - self.prevBut.disabled = false; - } - - if (self.page == self.max) { - self.lastBut.disabled = true; - self.nextBut.disabled = true; - } else { - self.lastBut.disabled = false; - self.nextBut.disabled = false; - } - - for (var i = min; i <= max; i++) { - if (i > 0 && i <= self.max) { - self.pagesElement.appendChild(self._generatePageButton(i)); - } - } - - this.footerRedraw(); -}; - -Page.prototype._generatePageButton = function (page) { - var self = this, - button = document.createElement("button"); - - button.classList.add("tabulator-page"); - if (page == self.page) { - button.classList.add("active"); - } - - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - button.setAttribute("aria-label", "Show Page " + page); - button.setAttribute("title", "Show Page " + page); - button.setAttribute("data-page", page); - button.textContent = page; - - button.addEventListener("click", function (e) { - self.setPage(page); - }); - - return button; -}; - -//previous page -Page.prototype.previousPage = function () { - var _this2 = this; - - return new Promise(function (resolve, reject) { - if (_this2.page > 1) { - _this2.page--; - _this2.trigger().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - } else { - console.warn("Pagination Error - Previous page would be less than page 1:", 0); - reject(); - } - }); -}; - -//next page -Page.prototype.nextPage = function () { - var _this3 = this; - - return new Promise(function (resolve, reject) { - if (_this3.page < _this3.max) { - _this3.page++; - _this3.trigger().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - } else { - if (!_this3.progressiveLoad) { - console.warn("Pagination Error - Next page would be greater than maximum page of " + _this3.max + ":", _this3.max + 1); - } - reject(); - } - }); -}; - -//return current page number -Page.prototype.getPage = function () { - return this.page; -}; - -//return max page number -Page.prototype.getPageMax = function () { - return this.max; -}; - -Page.prototype.getPageSize = function (size) { - return this.size; -}; - -Page.prototype.getMode = function () { - return this.mode; -}; - -//return appropriate rows for current page -Page.prototype.getRows = function (data) { - var output, start, end; - - if (this.mode == "local") { - output = []; - start = this.size * (this.page - 1); - end = start + parseInt(this.size); - - this._setPageButtons(); - - for (var i = start; i < end; i++) { - if (data[i]) { - output.push(data[i]); - } - } - - return output; - } else { - - this._setPageButtons(); - - return data.slice(0); - } -}; - -Page.prototype.trigger = function () { - var _this4 = this; - - var left; - - return new Promise(function (resolve, reject) { - - switch (_this4.mode) { - case "local": - left = _this4.table.rowManager.scrollLeft; - - _this4.table.rowManager.refreshActiveData("page"); - _this4.table.rowManager.scrollHorizontal(left); - - _this4.table.options.pageLoaded.call(_this4.table, _this4.getPage()); - resolve(); - break; - - case "remote": - case "progressive_load": - case "progressive_scroll": - _this4.table.modules.ajax.blockActiveRequest(); - _this4._getRemotePage().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - break; - - default: - console.warn("Pagination Error - no such pagination mode:", _this4.mode); - reject(); - } - }); -}; - -Page.prototype._getRemotePage = function () { - var _this5 = this; - - var self = this, - oldParams, - pageParams; - - return new Promise(function (resolve, reject) { - - if (!self.table.modExists("ajax", true)) { - reject(); - } - - //record old params and restore after request has been made - oldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {}); - pageParams = self.table.modules.ajax.getParams(); - - //configure request params - pageParams[_this5.paginationDataSentNames.page] = self.page; - - //set page size if defined - if (_this5.size) { - pageParams[_this5.paginationDataSentNames.size] = _this5.size; - } - - //set sort data if defined - if (_this5.table.options.ajaxSorting && _this5.table.modExists("sort")) { - var sorters = self.table.modules.sort.getSort(); - - sorters.forEach(function (item) { - delete item.column; - }); - - pageParams[_this5.paginationDataSentNames.sorters] = sorters; - } - - //set filter data if defined - if (_this5.table.options.ajaxFiltering && _this5.table.modExists("filter")) { - var filters = self.table.modules.filter.getFilters(true, true); - pageParams[_this5.paginationDataSentNames.filters] = filters; - } - - self.table.modules.ajax.setParams(pageParams); - - self.table.modules.ajax.sendRequest(_this5.progressiveLoad).then(function (data) { - self._parseRemoteData(data); - resolve(); - }).catch(function (e) { - reject(); - }); - - self.table.modules.ajax.setParams(oldParams); - }); -}; - -Page.prototype._parseRemoteData = function (data) { - var self = this, - left, - data, - margin; - - if (typeof data[this.paginationDataReceivedNames.last_page] === "undefined") { - console.warn("Remote Pagination Error - Server response missing '" + this.paginationDataReceivedNames.last_page + "' property"); - } - - if (data[this.paginationDataReceivedNames.data]) { - this.max = parseInt(data[this.paginationDataReceivedNames.last_page]) || 1; - - if (this.progressiveLoad) { - switch (this.mode) { - case "progressive_load": - this.table.rowManager.addRows(data[this.paginationDataReceivedNames.data]); - if (this.page < this.max) { - setTimeout(function () { - self.nextPage().then(function () {}).catch(function () {}); - }, self.table.options.ajaxProgressiveLoadDelay); - } - break; - - case "progressive_scroll": - data = this.table.rowManager.getData().concat(data[this.paginationDataReceivedNames.data]); - - this.table.rowManager.setData(data, true); - - margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2; - - if (self.table.rowManager.element.scrollHeight <= self.table.rowManager.element.clientHeight + margin) { - self.nextPage().then(function () {}).catch(function () {}); - } - break; - } - } else { - left = this.table.rowManager.scrollLeft; - - this.table.rowManager.setData(data[this.paginationDataReceivedNames.data]); - - this.table.rowManager.scrollHorizontal(left); - - this.table.columnManager.scrollHorizontal(left); - - this.table.options.pageLoaded.call(this.table, this.getPage()); - } - } else { - console.warn("Remote Pagination Error - Server response missing '" + this.paginationDataReceivedNames.data + "' property"); - } -}; - -//handle the footer element being redrawn -Page.prototype.footerRedraw = function () { - var footer = this.table.footerManager.element; - - if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) { - this.pagesElement.style.display = 'none'; - } else { - this.pagesElement.style.display = ''; - - if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) { - this.pagesElement.style.display = 'none'; - } - } -}; - -//set the paramter names for pagination requests -Page.prototype.paginationDataSentNames = { - "page": "page", - "size": "size", - "sorters": "sorters", - // "sort_dir":"sort_dir", - "filters": "filters" -}; - -//set the property names for pagination responses -Page.prototype.paginationDataReceivedNames = { - "current_page": "current_page", - "last_page": "last_page", - "data": "data" -}; - -Tabulator.prototype.registerModule("page", Page); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/page.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/page.min.js deleted file mode 100644 index 57d8cbe76a..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/page.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var Page=function(t){this.table=t,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.createElements()};Page.prototype.createElements=function(){var t;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),t=document.createElement("button"),t.classList.add("tabulator-page"),t.setAttribute("type","button"),t.setAttribute("role","button"),t.setAttribute("aria-label",""),t.setAttribute("title",""),this.firstBut=t.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=t.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=t.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=t.cloneNode(!0),this.lastBut.setAttribute("data-page","last")},Page.prototype.initialize=function(t){var e=this;for(var a in e.table.options.paginationDataSent)e.paginationDataSentNames[a]=e.table.options.paginationDataSent[a];for(var i in e.table.options.paginationDataReceived)e.paginationDataReceivedNames[i]=e.table.options.paginationDataReceived[i];e.table.modules.localize.bind("pagination|first",function(t){e.firstBut.innerHTML=t}),e.table.modules.localize.bind("pagination|first_title",function(t){e.firstBut.setAttribute("aria-label",t),e.firstBut.setAttribute("title",t)}),e.table.modules.localize.bind("pagination|prev",function(t){e.prevBut.innerHTML=t}),e.table.modules.localize.bind("pagination|prev_title",function(t){e.prevBut.setAttribute("aria-label",t),e.prevBut.setAttribute("title",t)}),e.table.modules.localize.bind("pagination|next",function(t){e.nextBut.innerHTML=t}),e.table.modules.localize.bind("pagination|next_title",function(t){e.nextBut.setAttribute("aria-label",t),e.nextBut.setAttribute("title",t)}),e.table.modules.localize.bind("pagination|last",function(t){e.lastBut.innerHTML=t}),e.table.modules.localize.bind("pagination|last_title",function(t){e.lastBut.setAttribute("aria-label",t),e.lastBut.setAttribute("title",t)}),e.firstBut.addEventListener("click",function(){e.setPage(1)}),e.prevBut.addEventListener("click",function(){e.previousPage()}),e.nextBut.addEventListener("click",function(){e.nextPage().then(function(){}).catch(function(){})}),e.lastBut.addEventListener("click",function(){e.setPage(e.max)}),e.table.options.paginationElement&&(e.element=e.table.options.paginationElement),e.element.appendChild(e.firstBut),e.element.appendChild(e.prevBut),e.element.appendChild(e.pagesElement),e.element.appendChild(e.nextBut),e.element.appendChild(e.lastBut),e.table.options.paginationElement||t||e.table.footerManager.append(e.element,e),e.mode=e.table.options.pagination,e.size=e.table.options.paginationSize||Math.floor(e.table.rowManager.getElement().clientHeight/24),e.count=e.table.options.paginationButtonCount},Page.prototype.initializeProgressive=function(t){this.initialize(!0),this.mode="progressive_"+t,this.progressiveLoad=!0},Page.prototype.setDisplayIndex=function(t){this.displayIndex=t},Page.prototype.getDisplayIndex=function(){return this.displayIndex},Page.prototype.setMaxRows=function(t){this.max=t?Math.ceil(t/this.size):1,this.page>this.max&&(this.page=this.max)},Page.prototype.reset=function(t){return("local"==this.mode||t)&&(this.page=1),!0},Page.prototype.setMaxPage=function(t){this.max=t||1,this.page>this.max&&(this.page=this.max,this.trigger())},Page.prototype.setPage=function(t){var e=this;return new Promise(function(a,i){t>0&&t<=e.max?(e.page=t,e.trigger().then(function(){a()}).catch(function(){i()})):(console.warn("Pagination Error - Requested page is out of range of 1 - "+e.max+":",t),i())})},Page.prototype.setPageSize=function(t){t>0&&(this.size=t)},Page.prototype._setPageButtons=function(){for(var t=this,e=Math.floor((this.count-1)/2),a=Math.ceil((this.count-1)/2),i=this.max-this.page+e+10&&o<=t.max&&t.pagesElement.appendChild(t._generatePageButton(o));this.footerRedraw()},Page.prototype._generatePageButton=function(t){var e=this,a=document.createElement("button");return a.classList.add("tabulator-page"),t==e.page&&a.classList.add("active"),a.setAttribute("type","button"),a.setAttribute("role","button"),a.setAttribute("aria-label","Show Page "+t),a.setAttribute("title","Show Page "+t),a.setAttribute("data-page",t),a.textContent=t,a.addEventListener("click",function(a){e.setPage(t)}),a},Page.prototype.previousPage=function(){var t=this;return new Promise(function(e,a){t.page>1?(t.page--,t.trigger().then(function(){e()}).catch(function(){a()})):(console.warn("Pagination Error - Previous page would be less than page 1:",0),a())})},Page.prototype.nextPage=function(){var t=this;return new Promise(function(e,a){t.page -1) { - cookie = cookie.substr(0, end); - } - - data = cookie.replace(id + "=", ""); - } - break; - - default: - console.warn("Persistance Load Error - invalid mode selected", this.mode); - } - - return data ? JSON.parse(data) : false; -}; - -//merge old and new column defintions -Persistence.prototype.mergeDefinition = function (oldCols, newCols) { - var self = this, - output = []; - - // oldCols = oldCols || []; - newCols = newCols || []; - - newCols.forEach(function (column, to) { - - var from = self._findColumn(oldCols, column); - - if (from) { - - from.width = column.width; - from.visible = column.visible; - - if (from.columns) { - from.columns = self.mergeDefinition(from.columns, column.columns); - } - - output.push(from); - } - }); - oldCols.forEach(function (column, i) { - var from = self._findColumn(newCols, column); - if (!from) { - if (output.length > i) { - output.splice(i, 0, column); - } else { - output.push(column); - } - } - }); - - return output; -}; - -//find matching columns -Persistence.prototype._findColumn = function (columns, subject) { - var type = subject.columns ? "group" : subject.field ? "field" : "object"; - - return columns.find(function (col) { - switch (type) { - case "group": - return col.title === subject.title && col.columns.length === subject.columns.length; - break; - - case "field": - return col.field === subject.field; - break; - - case "object": - return col === subject; - break; - } - }); -}; - -//save data -Persistence.prototype.save = function (type) { - var data = {}; - - switch (type) { - case "columns": - data = this.parseColumns(this.table.columnManager.getColumns()); - break; - - case "filter": - data = this.table.modules.filter.getFilters(); - break; - - case "sort": - data = this.validateSorters(this.table.modules.sort.getSort()); - break; - } - - var id = this.id + (type === "columns" ? "" : "-" + type); - - this.saveData(id, data); -}; - -//ensure sorters contain no function data -Persistence.prototype.validateSorters = function (data) { - data.forEach(function (item) { - item.column = item.field; - delete item.field; - }); - - return data; -}; - -//save data to chosed medium -Persistence.prototype.saveData = function (id, data) { - - data = JSON.stringify(data); - - switch (this.mode) { - case "local": - localStorage.setItem(id, data); - break; - - case "cookie": - var expireDate = new Date(); - expireDate.setDate(expireDate.getDate() + 10000); - - //save cookie - document.cookie = id + "=" + data + "; expires=" + expireDate.toUTCString(); - break; - - default: - console.warn("Persistance Save Error - invalid mode selected", this.mode); - } -}; - -//build premission list -Persistence.prototype.parseColumns = function (columns) { - var self = this, - definitions = []; - - columns.forEach(function (column) { - var def = {}; - - if (column.isGroup) { - def.title = column.getDefinition().title; - def.columns = self.parseColumns(column.getColumns()); - } else { - def.title = column.getDefinition().title; - def.field = column.getField(); - def.width = column.getWidth(); - def.visible = column.visible; - } - - definitions.push(def); - }); - - return definitions; -}; - -Tabulator.prototype.registerModule("persistence", Persistence); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/persistence.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/persistence.min.js deleted file mode 100644 index 85aa1be83b..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/persistence.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var Persistence=function(e){this.table=e,this.mode="",this.id="",this.persistProps=["field","width","visible"]};Persistence.prototype.initialize=function(e,t){this.mode=!0!==e?e:void 0!==window.localStorage?"local":"cookie",this.id="tabulator-"+(t||this.table.element.getAttribute("id")||"")},Persistence.prototype.load=function(e,t){var i=this.retreiveData(e);return t&&(i=i?this.mergeDefinition(t,i):t),i},Persistence.prototype.retreiveData=function(e){var t="",i=this.id+("columns"===e?"":"-"+e);switch(this.mode){case"local":t=localStorage.getItem(i);break;case"cookie":var o=document.cookie,s=o.indexOf(i+"="),r=void 0;s>-1&&(o=o.substr(s),r=o.indexOf(";"),r>-1&&(o=o.substr(0,r)),t=o.replace(i+"=",""));break;default:console.warn("Persistance Load Error - invalid mode selected",this.mode)}return!!t&&JSON.parse(t)},Persistence.prototype.mergeDefinition=function(e,t){var i=this,o=[];return t=t||[],t.forEach(function(t,s){var r=i._findColumn(e,t);r&&(r.width=t.width,r.visible=t.visible,r.columns&&(r.columns=i.mergeDefinition(r.columns,t.columns)),o.push(r))}),e.forEach(function(e,s){i._findColumn(t,e)||(o.length>s?o.splice(s,0,e):o.push(e))}),o},Persistence.prototype._findColumn=function(e,t){var i=t.columns?"group":t.field?"field":"object";return e.find(function(e){switch(i){case"group":return e.title===t.title&&e.columns.length===t.columns.length;case"field":return e.field===t.field;case"object":return e===t}})},Persistence.prototype.save=function(e){var t={};switch(e){case"columns":t=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":t=this.table.modules.filter.getFilters();break;case"sort":t=this.validateSorters(this.table.modules.sort.getSort())}var i=this.id+("columns"===e?"":"-"+e);this.saveData(i,t)},Persistence.prototype.validateSorters=function(e){return e.forEach(function(e){e.column=e.field,delete e.field}),e},Persistence.prototype.saveData=function(e,t){switch(t=JSON.stringify(t),this.mode){case"local":localStorage.setItem(e,t);break;case"cookie":var i=new Date;i.setDate(i.getDate()+1e4),document.cookie=e+"="+t+"; expires="+i.toUTCString();break;default:console.warn("Persistance Save Error - invalid mode selected",this.mode)}},Persistence.prototype.parseColumns=function(e){var t=this,i=[];return e.forEach(function(e){var o={};e.isGroup?(o.title=e.getDefinition().title,o.columns=t.parseColumns(e.getColumns())):(o.title=e.getDefinition().title,o.field=e.getField(),o.width=e.getWidth(),o.visible=e.visible),i.push(o)}),i},Tabulator.prototype.registerModule("persistence",Persistence); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_columns.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_columns.js deleted file mode 100644 index a3d3b1bb06..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_columns.js +++ /dev/null @@ -1,146 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var ResizeColumns = function ResizeColumns(table) { - this.table = table; //hold Tabulator object - this.startColumn = false; - this.startX = false; - this.startWidth = false; - this.handle = null; - this.prevHandle = null; -}; - -ResizeColumns.prototype.initializeColumn = function (type, column, element) { - var self = this, - variableHeight = false, - mode = this.table.options.resizableColumns; - - //set column resize mode - if (type === "header") { - variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight; - column.modules.resize = { variableHeight: variableHeight }; - } - - if (mode === true || mode == type) { - - var handle = document.createElement('div'); - handle.className = "tabulator-col-resize-handle"; - - var prevHandle = document.createElement('div'); - prevHandle.className = "tabulator-col-resize-handle prev"; - - handle.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - handle.addEventListener("mousedown", function (e) { - var nearestColumn = column.getLastColumn(); - - if (nearestColumn && self._checkResizability(nearestColumn)) { - self.startColumn = column; - self._mouseDown(e, nearestColumn); - } - }); - - //reszie column on double click - handle.addEventListener("dblclick", function (e) { - if (self._checkResizability(column)) { - column.reinitializeWidth(true); - } - }); - - prevHandle.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - prevHandle.addEventListener("mousedown", function (e) { - var nearestColumn, colIndex, prevColumn; - - nearestColumn = column.getFirstColumn(); - - if (nearestColumn) { - colIndex = self.table.columnManager.findColumnIndex(nearestColumn); - prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false; - - if (prevColumn && self._checkResizability(prevColumn)) { - self.startColumn = column; - self._mouseDown(e, prevColumn); - } - } - }); - - //resize column on double click - prevHandle.addEventListener("dblclick", function (e) { - var nearestColumn, colIndex, prevColumn; - - nearestColumn = column.getFirstColumn(); - - if (nearestColumn) { - colIndex = self.table.columnManager.findColumnIndex(nearestColumn); - prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false; - - if (prevColumn && self._checkResizability(prevColumn)) { - prevColumn.reinitializeWidth(true); - } - } - }); - - element.appendChild(handle); - element.appendChild(prevHandle); - } -}; - -ResizeColumns.prototype._checkResizability = function (column) { - return typeof column.definition.resizable != "undefined" ? column.definition.resizable : this.table.options.resizableColumns; -}; - -ResizeColumns.prototype._mouseDown = function (e, column) { - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e) { - column.setWidth(self.startWidth + (e.screenX - self.startX)); - - if (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) { - column.checkCellHeights(); - } - } - - function mouseUp(e) { - - //block editor from taking action while resizing is taking place - if (self.startColumn.modules.edit) { - self.startColumn.modules.edit.blocked = false; - } - - if (self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) { - column.checkCellHeights(); - } - - document.body.removeEventListener("mouseup", mouseUp); - document.body.removeEventListener("mousemove", mouseMove); - - self.table.element.classList.remove("tabulator-block-select"); - - if (self.table.options.persistentLayout && self.table.modExists("persistence", true)) { - self.table.modules.persistence.save("columns"); - } - - self.table.options.columnResized.call(self.table, self.startColumn.getComponent()); - } - - e.stopPropagation(); //prevent resize from interfereing with movable columns - - //block editor from taking action while resizing is taking place - if (self.startColumn.modules.edit) { - self.startColumn.modules.edit.blocked = true; - } - - self.startX = e.screenX; - self.startWidth = column.getWidth(); - - document.body.addEventListener("mousemove", mouseMove); - document.body.addEventListener("mouseup", mouseUp); -}; - -Tabulator.prototype.registerModule("resizeColumns", ResizeColumns); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_columns.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_columns.min.js deleted file mode 100644 index 2b4908860b..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_columns.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var ResizeColumns=function(e){this.table=e,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};ResizeColumns.prototype.initializeColumn=function(e,t,i){var n=this,o=!1,s=this.table.options.resizableColumns;if("header"===e&&(o="textarea"==t.definition.formatter||t.definition.variableHeight,t.modules.resize={variableHeight:o}),!0===s||s==e){var l=document.createElement("div");l.className="tabulator-col-resize-handle";var a=document.createElement("div");a.className="tabulator-col-resize-handle prev",l.addEventListener("click",function(e){e.stopPropagation()}),l.addEventListener("mousedown",function(e){var i=t.getLastColumn();i&&n._checkResizability(i)&&(n.startColumn=t,n._mouseDown(e,i))}),l.addEventListener("dblclick",function(e){n._checkResizability(t)&&t.reinitializeWidth(!0)}),a.addEventListener("click",function(e){e.stopPropagation()}),a.addEventListener("mousedown",function(e){var i,o,s;(i=t.getFirstColumn())&&(o=n.table.columnManager.findColumnIndex(i),(s=o>0&&n.table.columnManager.getColumnByIndex(o-1))&&n._checkResizability(s)&&(n.startColumn=t,n._mouseDown(e,s)))}),a.addEventListener("dblclick",function(e){var i,o,s;(i=t.getFirstColumn())&&(o=n.table.columnManager.findColumnIndex(i),(s=o>0&&n.table.columnManager.getColumnByIndex(o-1))&&n._checkResizability(s)&&s.reinitializeWidth(!0))}),i.appendChild(l),i.appendChild(a)}},ResizeColumns.prototype._checkResizability=function(e){return void 0!==e.definition.resizable?e.definition.resizable:this.table.options.resizableColumns},ResizeColumns.prototype._mouseDown=function(e,t){function i(e){t.setWidth(o.startWidth+(e.screenX-o.startX)),!o.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights()}function n(e){o.startColumn.modules.edit&&(o.startColumn.modules.edit.blocked=!1),o.table.browserSlow&&t.modules.resize&&t.modules.resize.variableHeight&&t.checkCellHeights(),document.body.removeEventListener("mouseup",n),document.body.removeEventListener("mousemove",i),o.table.element.classList.remove("tabulator-block-select"),o.table.options.persistentLayout&&o.table.modExists("persistence",!0)&&o.table.modules.persistence.save("columns"),o.table.options.columnResized.call(o.table,o.startColumn.getComponent())}var o=this;o.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),o.startColumn.modules.edit&&(o.startColumn.modules.edit.blocked=!0),o.startX=e.screenX,o.startWidth=t.getWidth(),document.body.addEventListener("mousemove",i),document.body.addEventListener("mouseup",n)},Tabulator.prototype.registerModule("resizeColumns",ResizeColumns); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_rows.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_rows.js deleted file mode 100644 index e92144cf93..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_rows.js +++ /dev/null @@ -1,87 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var ResizeRows = function ResizeRows(table) { - this.table = table; //hold Tabulator object - this.startColumn = false; - this.startY = false; - this.startHeight = false; - this.handle = null; - this.prevHandle = null; -}; - -ResizeRows.prototype.initializeRow = function (row) { - var self = this, - rowEl = row.getElement(); - - var handle = document.createElement('div'); - handle.className = "tabulator-row-resize-handle"; - - var prevHandle = document.createElement('div'); - prevHandle.className = "tabulator-row-resize-handle prev"; - - handle.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - handle.addEventListener("mousedown", function (e) { - self.startRow = row; - self._mouseDown(e, row); - }); - - prevHandle.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - prevHandle.addEventListener("mousedown", function (e) { - var prevRow = self.table.rowManager.prevDisplayRow(row); - - if (prevRow) { - self.startRow = prevRow; - self._mouseDown(e, prevRow); - } - }); - - rowEl.appendChild(handle); - rowEl.appendChild(prevHandle); -}; - -ResizeRows.prototype._mouseDown = function (e, row) { - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e) { - row.setHeight(self.startHeight + (e.screenY - self.startY)); - } - - function mouseUp(e) { - - // //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = false; - // } - - document.body.removeEventListener("mouseup", mouseMove); - document.body.removeEventListener("mousemove", mouseMove); - - self.table.element.classList.remove("tabulator-block-select"); - - self.table.options.rowResized.call(this.table, row.getComponent()); - } - - e.stopPropagation(); //prevent resize from interfereing with movable columns - - //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = true; - // } - - self.startY = e.screenY; - self.startHeight = row.getHeight(); - - document.body.addEventListener("mousemove", mouseMove); - - document.body.addEventListener("mouseup", mouseUp); -}; - -Tabulator.prototype.registerModule("resizeRows", ResizeRows); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_rows.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_rows.min.js deleted file mode 100644 index 61421f4750..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_rows.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var ResizeRows=function(e){this.table=e,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};ResizeRows.prototype.initializeRow=function(e){var t=this,o=e.getElement(),n=document.createElement("div");n.className="tabulator-row-resize-handle";var s=document.createElement("div");s.className="tabulator-row-resize-handle prev",n.addEventListener("click",function(e){e.stopPropagation()}),n.addEventListener("mousedown",function(o){t.startRow=e,t._mouseDown(o,e)}),s.addEventListener("click",function(e){e.stopPropagation()}),s.addEventListener("mousedown",function(o){var n=t.table.rowManager.prevDisplayRow(e);n&&(t.startRow=n,t._mouseDown(o,n))}),o.appendChild(n),o.appendChild(s)},ResizeRows.prototype._mouseDown=function(e,t){function o(e){t.setHeight(s.startHeight+(e.screenY-s.startY))}function n(e){document.body.removeEventListener("mouseup",o),document.body.removeEventListener("mousemove",o),s.table.element.classList.remove("tabulator-block-select"),s.table.options.rowResized.call(this.table,t.getComponent())}var s=this;s.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),s.startY=e.screenY,s.startHeight=t.getHeight(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",n)},Tabulator.prototype.registerModule("resizeRows",ResizeRows); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_table.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_table.js deleted file mode 100644 index fda4d489da..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_table.js +++ /dev/null @@ -1,38 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var ResizeTable = function ResizeTable(table) { - this.table = table; //hold Tabulator object - this.binding = false; - this.observer = false; -}; - -ResizeTable.prototype.initialize = function (row) { - var table = this.table, - observer; - - if (typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual") { - this.observer = new ResizeObserver(function (entry) { - table.redraw(); - }); - - this.observer.observe(table.element); - } else { - this.binding = function () { - table.redraw(); - }; - - window.addEventListener("resize", this.binding); - } -}; - -ResizeTable.prototype.clearBindings = function (row) { - if (this.binding) { - window.removeEventListener("resize", this.binding); - } - - if (this.observer) { - this.observer.unobserve(this.table.element); - } -}; - -Tabulator.prototype.registerModule("resizeTable", ResizeTable); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_table.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_table.min.js deleted file mode 100644 index 253f36e081..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/resize_table.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var ResizeTable=function(e){this.table=e,this.binding=!1,this.observer=!1};ResizeTable.prototype.initialize=function(e){var i=this.table;"undefined"!=typeof ResizeObserver&&"virtual"===i.rowManager.getRenderMode()?(this.observer=new ResizeObserver(function(e){i.redraw()}),this.observer.observe(i.element)):(this.binding=function(){i.redraw()},window.addEventListener("resize",this.binding))},ResizeTable.prototype.clearBindings=function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element)},Tabulator.prototype.registerModule("resizeTable",ResizeTable); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/responsive_layout.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/responsive_layout.js deleted file mode 100644 index e22bcb21ef..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/responsive_layout.js +++ /dev/null @@ -1,243 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var ResponsiveLayout = function ResponsiveLayout(table) { - this.table = table; //hold Tabulator object - this.columns = []; - this.hiddenColumns = []; - this.mode = ""; - this.index = 0; - this.collapseFormatter = []; - this.collapseStartOpen = true; -}; - -//generate resposive columns list -ResponsiveLayout.prototype.initialize = function () { - var self = this, - columns = []; - - this.mode = this.table.options.responsiveLayout; - this.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData; - this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen; - this.hiddenColumns = []; - - //detemine level of responsivity for each column - this.table.columnManager.columnsByIndex.forEach(function (column, i) { - if (column.modules.responsive) { - if (column.modules.responsive.order && column.modules.responsive.visible) { - column.modules.responsive.index = i; - columns.push(column); - - if (!column.visible && self.mode === "collapse") { - self.hiddenColumns.push(column); - } - } - } - }); - - //sort list by responsivity - columns = columns.reverse(); - columns = columns.sort(function (a, b) { - var diff = b.modules.responsive.order - a.modules.responsive.order; - return diff || b.modules.responsive.index - a.modules.responsive.index; - }); - - this.columns = columns; - - if (this.mode === "collapse") { - this.generateCollapsedContent(); - } -}; - -//define layout information -ResponsiveLayout.prototype.initializeColumn = function (column) { - var def = column.getDefinition(); - - column.modules.responsive = { order: typeof def.responsive === "undefined" ? 1 : def.responsive, visible: def.visible === false ? false : true }; -}; - -ResponsiveLayout.prototype.layoutRow = function (row) { - var rowEl = row.getElement(), - el = document.createElement("div"); - - el.classList.add("tabulator-responsive-collapse"); - - if (!rowEl.classList.contains("tabulator-calcs")) { - row.modules.responsiveLayout = { - element: el - }; - - if (!this.collapseStartOpen) { - el.style.display = 'none'; - } - - rowEl.appendChild(el); - - this.generateCollapsedRowContent(row); - } -}; - -//update column visibility -ResponsiveLayout.prototype.updateColumnVisibility = function (column, visible) { - var index; - if (column.modules.responsive) { - column.modules.responsive.visible = visible; - this.initialize(); - } -}; - -ResponsiveLayout.prototype.hideColumn = function (column) { - column.hide(false, true); - - if (this.mode === "collapse") { - this.hiddenColumns.unshift(column); - this.generateCollapsedContent(); - } -}; - -ResponsiveLayout.prototype.showColumn = function (column) { - var index; - - column.show(false, true); - //set column width to prevent calculation loops on uninitialized columns - column.setWidth(column.getWidth()); - - if (this.mode === "collapse") { - index = this.hiddenColumns.indexOf(column); - - if (index > -1) { - this.hiddenColumns.splice(index, 1); - } - - this.generateCollapsedContent(); - } -}; - -//redraw columns to fit space -ResponsiveLayout.prototype.update = function () { - var self = this, - working = true; - - while (working) { - - var width = self.table.modules.layout.getMode() == "fitColumns" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth(); - - var diff = self.table.columnManager.element.clientWidth - width; - - if (diff < 0) { - //table is too wide - var column = self.columns[self.index]; - - if (column) { - self.hideColumn(column); - self.index++; - } else { - working = false; - } - } else { - - //table has spare space - var _column = self.columns[self.index - 1]; - - if (_column) { - if (diff > 0) { - if (diff >= _column.getWidth()) { - self.showColumn(_column); - self.index--; - } else { - working = false; - } - } else { - working = false; - } - } else { - working = false; - } - } - - if (!self.table.rowManager.activeRowsCount) { - self.table.rowManager.renderEmptyScroll(); - } - } -}; - -ResponsiveLayout.prototype.generateCollapsedContent = function () { - var self = this, - rows = this.table.rowManager.getDisplayRows(); - - rows.forEach(function (row) { - self.generateCollapsedRowContent(row); - }); -}; - -ResponsiveLayout.prototype.generateCollapsedRowContent = function (row) { - var el, contents; - - if (row.modules.responsiveLayout) { - el = row.modules.responsiveLayout.element; - - while (el.firstChild) { - el.removeChild(el.firstChild); - }contents = this.collapseFormatter(this.generateCollapsedRowData(row)); - - if (contents) { - el.appendChild(contents); - } - } -}; - -ResponsiveLayout.prototype.generateCollapsedRowData = function (row) { - var self = this, - data = row.getData(), - output = {}, - mockCellComponent; - - this.hiddenColumns.forEach(function (column) { - var value = column.getFieldValue(data); - - if (column.definition.title && column.field) { - if (column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters) { - - mockCellComponent = { - value: false, - data: {}, - getValue: function getValue() { - return value; - }, - getData: function getData() { - return data; - }, - getElement: function getElement() { - return document.createElement("div"); - }, - getRow: function getRow() { - return row.getComponent(); - }, - getColumn: function getColumn() { - return column.getComponent(); - } - }; - - output[column.definition.title] = column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params); - } else { - output[column.definition.title] = value; - } - } - }); - - return output; -}; - -ResponsiveLayout.prototype.formatCollapsedData = function (data) { - var list = document.createElement("table"), - listContents = ""; - - for (var key in data) { - listContents += "" + key + "" + data[key] + ""; - } - - list.innerHTML = listContents; - - return Object.keys(data).length ? list : ""; -}; - -Tabulator.prototype.registerModule("responsiveLayout", ResponsiveLayout); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/responsive_layout.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/responsive_layout.min.js deleted file mode 100644 index 3ca60c8b9f..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/responsive_layout.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var ResponsiveLayout=function(e){this.table=e,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0};ResponsiveLayout.prototype.initialize=function(){var e=this,t=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,s){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=s,t.push(o),o.visible||"collapse"!==e.mode||e.hiddenColumns.push(o))}),t=t.reverse(),t=t.sort(function(e,t){return t.modules.responsive.order-e.modules.responsive.order||t.modules.responsive.index-e.modules.responsive.index}),this.columns=t,"collapse"===this.mode&&this.generateCollapsedContent()},ResponsiveLayout.prototype.initializeColumn=function(e){var t=e.getDefinition();e.modules.responsive={order:void 0===t.responsive?1:t.responsive,visible:!1!==t.visible}},ResponsiveLayout.prototype.layoutRow=function(e){var t=e.getElement(),o=document.createElement("div");o.classList.add("tabulator-responsive-collapse"),t.classList.contains("tabulator-calcs")||(e.modules.responsiveLayout={element:o},this.collapseStartOpen||(o.style.display="none"),t.appendChild(o),this.generateCollapsedRowContent(e))},ResponsiveLayout.prototype.updateColumnVisibility=function(e,t){e.modules.responsive&&(e.modules.responsive.visible=t,this.initialize())},ResponsiveLayout.prototype.hideColumn=function(e){e.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(e),this.generateCollapsedContent())},ResponsiveLayout.prototype.showColumn=function(e){var t;e.show(!1,!0),e.setWidth(e.getWidth()),"collapse"===this.mode&&(t=this.hiddenColumns.indexOf(e),t>-1&&this.hiddenColumns.splice(t,1),this.generateCollapsedContent())},ResponsiveLayout.prototype.update=function(){for(var e=this,t=!0;t;){var o="fitColumns"==e.table.modules.layout.getMode()?e.table.columnManager.getFlexBaseWidth():e.table.columnManager.getWidth(),s=e.table.columnManager.element.clientWidth-o;if(s<0){var n=e.columns[e.index];n?(e.hideColumn(n),e.index++):t=!1}else{var i=e.columns[e.index-1];i&&s>0&&s>=i.getWidth()?(e.showColumn(i),e.index--):t=!1}e.table.rowManager.activeRowsCount||e.table.rowManager.renderEmptyScroll()}},ResponsiveLayout.prototype.generateCollapsedContent=function(){var e=this;this.table.rowManager.getDisplayRows().forEach(function(t){e.generateCollapsedRowContent(t)})},ResponsiveLayout.prototype.generateCollapsedRowContent=function(e){var t,o;if(e.modules.responsiveLayout){for(t=e.modules.responsiveLayout.element;t.firstChild;)t.removeChild(t.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(e)),o&&t.appendChild(o)}},ResponsiveLayout.prototype.generateCollapsedRowData=function(e){var t,o=this,s=e.getData(),n={};return this.hiddenColumns.forEach(function(i){var a=i.getFieldValue(s);i.definition.title&&i.field&&(i.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(t={value:!1,data:{},getValue:function(){return a},getData:function(){return s},getElement:function(){return document.createElement("div")},getRow:function(){return e.getComponent()},getColumn:function(){return i.getComponent()}},n[i.definition.title]=i.modules.format.formatter.call(o.table.modules.format,t,i.modules.format.params)):n[i.definition.title]=a)}),n},ResponsiveLayout.prototype.formatCollapsedData=function(e){var t=document.createElement("table"),o="";for(var s in e)o+=""+s+""+e[s]+"";return t.innerHTML=o,Object.keys(e).length?t:""},Tabulator.prototype.registerModule("responsiveLayout",ResponsiveLayout); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/select_row.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/select_row.js deleted file mode 100644 index 3f4f76915c..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/select_row.js +++ /dev/null @@ -1,294 +0,0 @@ -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var SelectRow = function SelectRow(table) { - this.table = table; //hold Tabulator object - this.selecting = false; //flag selecting in progress - this.lastClickedRow = false; //last clicked row - this.selectPrev = []; //hold previously selected element for drag drop selection - this.selectedRows = []; //hold selected rows -}; - -SelectRow.prototype.clearSelectionData = function (silent) { - this.selecting = false; - this.lastClickedRow = false; - this.selectPrev = []; - this.selectedRows = []; - - if (!silent) { - this._rowSelectionChanged(); - } -}; - -SelectRow.prototype.initializeRow = function (row) { - var self = this, - element = row.getElement(); - - // trigger end of row selection - var endSelect = function endSelect() { - - setTimeout(function () { - self.selecting = false; - }, 50); - - document.body.removeEventListener("mouseup", endSelect); - }; - - row.modules.select = { selected: false }; - - //set row selection class - if (self.table.options.selectableCheck.call(this.table, row.getComponent())) { - element.classList.add("tabulator-selectable"); - element.classList.remove("tabulator-unselectable"); - - if (self.table.options.selectable && self.table.options.selectable != "highlight") { - if (self.table.options.selectableRangeMode && self.table.options.selectableRangeMode === "click") { - element.addEventListener("click", function (e) { - if (e.shiftKey) { - self.lastClickedRow = self.lastClickedRow || row; - - var lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow); - var rowIdx = self.table.rowManager.getDisplayRowIndex(row); - - var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx; - var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx; - - var rows = self.table.rowManager.getDisplayRows().slice(0); - var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1); - - if (e.ctrlKey) { - toggledRows.forEach(function (toggledRow) { - if (toggledRow !== self.lastClickedRow) { - self.toggleRow(toggledRow); - } - }); - self.lastClickedRow = row; - } else { - self.deselectRows(); - self.selectRows(toggledRows); - } - } else if (e.ctrlKey) { - self.toggleRow(row); - self.lastClickedRow = row; - } else { - self.deselectRows(); - self.selectRows(row); - self.lastClickedRow = row; - } - }); - } else { - element.addEventListener("click", function (e) { - if (!self.selecting) { - self.toggleRow(row); - } - }); - - element.addEventListener("mousedown", function (e) { - if (e.shiftKey) { - self.selecting = true; - - self.selectPrev = []; - - document.body.addEventListener("mouseup", endSelect); - document.body.addEventListener("keyup", endSelect); - - self.toggleRow(row); - - return false; - } - }); - - element.addEventListener("mouseenter", function (e) { - if (self.selecting) { - self.toggleRow(row); - - if (self.selectPrev[1] == row) { - self.toggleRow(self.selectPrev[0]); - } - } - }); - - element.addEventListener("mouseout", function (e) { - if (self.selecting) { - self.selectPrev.unshift(row); - } - }); - } - } - } else { - element.classList.add("tabulator-unselectable"); - element.classList.remove("tabulator-selectable"); - } -}; - -//toggle row selection -SelectRow.prototype.toggleRow = function (row) { - if (this.table.options.selectableCheck.call(this.table, row.getComponent())) { - if (row.modules.select.selected) { - this._deselectRow(row); - } else { - this._selectRow(row); - } - } -}; - -//select a number of rows -SelectRow.prototype.selectRows = function (rows) { - var self = this; - - switch (typeof rows === "undefined" ? "undefined" : _typeof(rows)) { - case "undefined": - self.table.rowManager.rows.forEach(function (row) { - self._selectRow(row, false, true); - }); - - self._rowSelectionChanged(); - break; - - case "boolean": - if (rows === true) { - self.table.rowManager.activeRows.forEach(function (row) { - self._selectRow(row, false, true); - }); - - self._rowSelectionChanged(); - } - break; - - default: - if (Array.isArray(rows)) { - rows.forEach(function (row) { - self._selectRow(row); - }); - - self._rowSelectionChanged(); - } else { - self._selectRow(rows); - } - break; - } -}; - -//select an individual row -SelectRow.prototype._selectRow = function (rowInfo, silent, force) { - var index; - - //handle max row count - if (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) { - if (this.selectedRows.length >= this.table.options.selectable) { - if (this.table.options.selectableRollingSelection) { - this._deselectRow(this.selectedRows[0]); - } else { - return false; - } - } - } - - var row = this.table.rowManager.findRow(rowInfo); - - if (row) { - if (this.selectedRows.indexOf(row) == -1) { - row.modules.select.selected = true; - row.getElement().classList.add("tabulator-selected"); - - this.selectedRows.push(row); - - if (!silent) { - this.table.options.rowSelected.call(this.table, row.getComponent()); - this._rowSelectionChanged(); - } - } - } else { - if (!silent) { - console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo); - } - } -}; - -SelectRow.prototype.isRowSelected = function (row) { - return this.selectedRows.indexOf(row) !== -1; -}; - -//deselect a number of rows -SelectRow.prototype.deselectRows = function (rows) { - var self = this, - rowCount; - - if (typeof rows == "undefined") { - - rowCount = self.selectedRows.length; - - for (var i = 0; i < rowCount; i++) { - self._deselectRow(self.selectedRows[0], false); - } - - self._rowSelectionChanged(); - } else { - if (Array.isArray(rows)) { - rows.forEach(function (row) { - self._deselectRow(row); - }); - - self._rowSelectionChanged(); - } else { - self._deselectRow(rows); - } - } -}; - -//deselect an individual row -SelectRow.prototype._deselectRow = function (rowInfo, silent) { - var self = this, - row = self.table.rowManager.findRow(rowInfo), - index; - - if (row) { - index = self.selectedRows.findIndex(function (selectedRow) { - return selectedRow == row; - }); - - if (index > -1) { - - row.modules.select.selected = false; - row.getElement().classList.remove("tabulator-selected"); - self.selectedRows.splice(index, 1); - - if (!silent) { - self.table.options.rowDeselected.call(this.table, row.getComponent()); - self._rowSelectionChanged(); - } - } - } else { - if (!silent) { - console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo); - } - } -}; - -SelectRow.prototype.getSelectedData = function () { - var data = []; - - this.selectedRows.forEach(function (row) { - data.push(row.getData()); - }); - - return data; -}; - -SelectRow.prototype.getSelectedRows = function () { - - var rows = []; - - this.selectedRows.forEach(function (row) { - rows.push(row.getComponent()); - }); - - return rows; -}; - -SelectRow.prototype._rowSelectionChanged = function () { - this.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows()); -}; - -Tabulator.prototype.registerModule("selectRow", SelectRow); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/select_row.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/select_row.min.js deleted file mode 100644 index 8ac199fcc9..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/select_row.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},SelectRow=function(e){this.table=e,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[]};SelectRow.prototype.clearSelectionData=function(e){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],e||this._rowSelectionChanged()},SelectRow.prototype.initializeRow=function(e){var t=this,o=e.getElement(),l=function e(){setTimeout(function(){t.selecting=!1},50),document.body.removeEventListener("mouseup",e)};e.modules.select={selected:!1},t.table.options.selectableCheck.call(this.table,e.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),t.table.options.selectable&&"highlight"!=t.table.options.selectable&&(t.table.options.selectableRangeMode&&"click"===t.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){t.lastClickedRow=t.lastClickedRow||e;var l=t.table.rowManager.getDisplayRowIndex(t.lastClickedRow),s=t.table.rowManager.getDisplayRowIndex(e),c=l<=s?l:s,n=l>=s?l:s,i=t.table.rowManager.getDisplayRows().slice(0),a=i.splice(c,n-c+1);o.ctrlKey?(a.forEach(function(e){e!==t.lastClickedRow&&t.toggleRow(e)}),t.lastClickedRow=e):(t.deselectRows(),t.selectRows(a))}else o.ctrlKey?(t.toggleRow(e),t.lastClickedRow=e):(t.deselectRows(),t.selectRows(e),t.lastClickedRow=e)}):(o.addEventListener("click",function(o){t.selecting||t.toggleRow(e)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return t.selecting=!0,t.selectPrev=[],document.body.addEventListener("mouseup",l),document.body.addEventListener("keyup",l),t.toggleRow(e),!1}),o.addEventListener("mouseenter",function(o){t.selecting&&(t.toggleRow(e),t.selectPrev[1]==e&&t.toggleRow(t.selectPrev[0]))}),o.addEventListener("mouseout",function(o){t.selecting&&t.selectPrev.unshift(e)})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},SelectRow.prototype.toggleRow=function(e){this.table.options.selectableCheck.call(this.table,e.getComponent())&&(e.modules.select.selected?this._deselectRow(e):this._selectRow(e))},SelectRow.prototype.selectRows=function(e){var t=this;switch(void 0===e?"undefined":_typeof(e)){case"undefined":t.table.rowManager.rows.forEach(function(e){t._selectRow(e,!1,!0)}),t._rowSelectionChanged();break;case"boolean":!0===e&&(t.table.rowManager.activeRows.forEach(function(e){t._selectRow(e,!1,!0)}),t._rowSelectionChanged());break;default:Array.isArray(e)?(e.forEach(function(e){t._selectRow(e)}),t._rowSelectionChanged()):t._selectRow(e)}},SelectRow.prototype._selectRow=function(e,t,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var l=this.table.rowManager.findRow(e);l?-1==this.selectedRows.indexOf(l)&&(l.modules.select.selected=!0,l.getElement().classList.add("tabulator-selected"),this.selectedRows.push(l),t||(this.table.options.rowSelected.call(this.table,l.getComponent()),this._rowSelectionChanged())):t||console.warn("Selection Error - No such row found, ignoring selection:"+e)},SelectRow.prototype.isRowSelected=function(e){return-1!==this.selectedRows.indexOf(e)},SelectRow.prototype.deselectRows=function(e){var t,o=this;if(void 0===e){t=o.selectedRows.length;for(var l=0;l-1&&(s.modules.select.selected=!1,s.getElement().classList.remove("tabulator-selected"),l.selectedRows.splice(o,1),t||(l.table.options.rowDeselected.call(this.table,s.getComponent()),l._rowSelectionChanged())):t||console.warn("Deselection Error - No such row found, ignoring selection:"+e)},SelectRow.prototype.getSelectedData=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getData())}),e},SelectRow.prototype.getSelectedRows=function(){var e=[];return this.selectedRows.forEach(function(t){e.push(t.getComponent())}),e},SelectRow.prototype._rowSelectionChanged=function(){this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},Tabulator.prototype.registerModule("selectRow",SelectRow); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/sort.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/sort.js deleted file mode 100644 index f3a0215487..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/sort.js +++ /dev/null @@ -1,527 +0,0 @@ -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var Sort = function Sort(table) { - this.table = table; //hold Tabulator object - this.sortList = []; //holder current sort - this.changed = false; //has the sort changed since last render -}; - -//initialize column header for sorting -Sort.prototype.initializeColumn = function (column, content) { - var self = this, - sorter = false, - colEl, - arrowEl; - - switch (_typeof(column.definition.sorter)) { - case "string": - if (self.sorters[column.definition.sorter]) { - sorter = self.sorters[column.definition.sorter]; - } else { - console.warn("Sort Error - No such sorter found: ", column.definition.sorter); - } - break; - - case "function": - sorter = column.definition.sorter; - break; - } - - column.modules.sort = { - sorter: sorter, dir: "none", - params: column.definition.sorterParams || {}, - startingDir: column.definition.headerSortStartingDir || "asc" - }; - - if (column.definition.headerSort !== false) { - - colEl = column.getElement(); - - colEl.classList.add("tabulator-sortable"); - - arrowEl = document.createElement("div"); - arrowEl.classList.add("tabulator-arrow"); - //create sorter arrow - content.appendChild(arrowEl); - - //sort on click - colEl.addEventListener("click", function (e) { - var dir = "", - sorters = [], - match = false; - - if (column.modules.sort) { - dir = column.modules.sort.dir == "asc" ? "desc" : column.modules.sort.dir == "desc" ? "asc" : column.modules.sort.startingDir; - - if (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) { - sorters = self.getSort(); - - match = sorters.findIndex(function (sorter) { - return sorter.field === column.getField(); - }); - - if (match > -1) { - sorters[match].dir = sorters[match].dir == "asc" ? "desc" : "asc"; - - if (match != sorters.length - 1) { - sorters.push(sorters.splice(match, 1)[0]); - } - } else { - sorters.push({ column: column, dir: dir }); - } - - //add to existing sort - self.setSort(sorters); - } else { - //sort by column only - self.setSort(column, dir); - } - - self.table.rowManager.sorterRefresh(); - } - }); - } -}; - -//check if the sorters have changed since last use -Sort.prototype.hasChanged = function () { - var changed = this.changed; - this.changed = false; - return changed; -}; - -//return current sorters -Sort.prototype.getSort = function () { - var self = this, - sorters = []; - - self.sortList.forEach(function (item) { - if (item.column) { - sorters.push({ column: item.column.getComponent(), field: item.column.getField(), dir: item.dir }); - } - }); - - return sorters; -}; - -//change sort list and trigger sort -Sort.prototype.setSort = function (sortList, dir) { - var self = this, - newSortList = []; - - if (!Array.isArray(sortList)) { - sortList = [{ column: sortList, dir: dir }]; - } - - sortList.forEach(function (item) { - var column; - - column = self.table.columnManager.findColumn(item.column); - - if (column) { - item.column = column; - newSortList.push(item); - self.changed = true; - } else { - console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column); - } - }); - - self.sortList = newSortList; - - if (this.table.options.persistentSort && this.table.modExists("persistence", true)) { - this.table.modules.persistence.save("sort"); - } -}; - -//clear sorters -Sort.prototype.clear = function () { - this.setSort([]); -}; - -//find appropriate sorter for column -Sort.prototype.findSorter = function (column) { - var row = this.table.rowManager.activeRows[0], - sorter = "string", - field, - value; - - if (row) { - row = row.getData(); - field = column.getField(); - - if (field) { - - value = column.getFieldValue(row); - - switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { - case "undefined": - sorter = "string"; - break; - - case "boolean": - sorter = "boolean"; - break; - - default: - if (!isNaN(value) && value !== "") { - sorter = "number"; - } else { - if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) { - sorter = "alphanum"; - } - } - break; - } - } - } - - return this.sorters[sorter]; -}; - -//work through sort list sorting data -Sort.prototype.sort = function () { - var self = this, - lastSort, - sortList; - - sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList; - - if (self.table.options.dataSorting) { - self.table.options.dataSorting.call(self.table, self.getSort()); - } - - self.clearColumnHeaders(); - - if (!self.table.options.ajaxSorting) { - - sortList.forEach(function (item, i) { - - if (item.column && item.column.modules.sort) { - - //if no sorter has been defined, take a guess - if (!item.column.modules.sort.sorter) { - item.column.modules.sort.sorter = self.findSorter(item.column); - } - - self._sortItem(item.column, item.dir, sortList, i); - } - - self.setColumnHeader(item.column, item.dir); - }); - } else { - sortList.forEach(function (item, i) { - self.setColumnHeader(item.column, item.dir); - }); - } - - if (self.table.options.dataSorted) { - self.table.options.dataSorted.call(self.table, self.getSort(), self.table.rowManager.getComponents(true)); - } -}; - -//clear sort arrows on columns -Sort.prototype.clearColumnHeaders = function () { - this.table.columnManager.getRealColumns().forEach(function (column) { - if (column.modules.sort) { - column.modules.sort.dir = "none"; - column.getElement().setAttribute("aria-sort", "none"); - } - }); -}; - -//set the column header sort direction -Sort.prototype.setColumnHeader = function (column, dir) { - column.modules.sort.dir = dir; - column.getElement().setAttribute("aria-sort", dir); -}; - -//sort each item in sort list -Sort.prototype._sortItem = function (column, dir, sortList, i) { - var self = this; - - var activeRows = self.table.rowManager.activeRows; - - var params = typeof column.modules.sort.params === "function" ? column.modules.sort.params(column.getComponent(), dir) : column.modules.sort.params; - - activeRows.sort(function (a, b) { - - var result = self._sortRow(a, b, column, dir, params); - - //if results match recurse through previous searchs to be sure - if (result === 0 && i) { - for (var j = i - 1; j >= 0; j--) { - result = self._sortRow(a, b, sortList[j].column, sortList[j].dir, params); - - if (result !== 0) { - break; - } - } - } - - return result; - }); -}; - -//process individual rows for a sort function on active data -Sort.prototype._sortRow = function (a, b, column, dir, params) { - var el1Comp, el2Comp, colComp; - - //switch elements depending on search direction - var el1 = dir == "asc" ? a : b; - var el2 = dir == "asc" ? b : a; - - a = column.getFieldValue(el1.getData()); - b = column.getFieldValue(el2.getData()); - - a = typeof a !== "undefined" ? a : ""; - b = typeof b !== "undefined" ? b : ""; - - el1Comp = el1.getComponent(); - el2Comp = el2.getComponent(); - - return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params); -}; - -//default data sorters -Sort.prototype.sorters = { - - //sort numbers - number: function number(a, b, aRow, bRow, column, dir, params) { - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - a = parseFloat(String(a).replace(",", "")); - b = parseFloat(String(b).replace(",", "")); - - //handle non numeric values - if (isNaN(a)) { - emptyAlign = isNaN(b) ? 0 : -1; - } else if (isNaN(b)) { - emptyAlign = 1; - } else { - //compare valid values - return a - b; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort strings - string: function string(a, b, aRow, bRow, column, dir, params) { - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - var locale; - - //handle empty values - if (!a) { - emptyAlign = !b ? 0 : -1; - } else if (!b) { - emptyAlign = 1; - } else { - //compare valid values - switch (_typeof(params.locale)) { - case "boolean": - if (params.locale) { - locale = this.table.modules.localize.getLocale(); - } - break; - case "string": - locale = params.locale; - break; - } - - return String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale); - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort date - date: function date(a, b, aRow, bRow, column, dir, params) { - if (!params.format) { - params.format = "DD/MM/YYYY"; - } - - return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params); - }, - - //sort hh:mm formatted times - time: function time(a, b, aRow, bRow, column, dir, params) { - if (!params.format) { - params.format = "hh:mm"; - } - - return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params); - }, - - //sort datetime - datetime: function datetime(a, b, aRow, bRow, column, dir, params) { - var format = params.format || "DD/MM/YYYY hh:mm:ss", - alignEmptyValues = params.alignEmptyValues, - emptyAlign = 0; - - if (typeof moment != "undefined") { - a = moment(a, format); - b = moment(b, format); - - if (!a.isValid()) { - emptyAlign = !b.isValid() ? 0 : -1; - } else if (!b.isValid()) { - emptyAlign = 1; - } else { - //compare valid values - return a - b; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - } else { - console.error("Sort Error - 'datetime' sorter is dependant on moment.js"); - } - }, - - //sort booleans - boolean: function boolean(a, b, aRow, bRow, column, dir, params) { - var el1 = a === true || a === "true" || a === "True" || a === 1 ? 1 : 0; - var el2 = b === true || b === "true" || b === "True" || b === 1 ? 1 : 0; - - return el1 - el2; - }, - - //sort if element contains any data - array: function array(a, b, aRow, bRow, column, dir, params) { - var el1 = 0; - var el2 = 0; - var type = params.type || "length"; - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - function calc(value) { - - switch (type) { - case "length": - return value.length; - break; - - case "sum": - return value.reduce(function (c, d) { - return c + d; - }); - break; - - case "max": - return Math.max.apply(null, value); - break; - - case "min": - return Math.min.apply(null, value); - break; - - case "avg": - return value.reduce(function (c, d) { - return c + d; - }) / value.length; - break; - } - } - - //handle non array values - if (!Array.isArray(a)) { - alignEmptyValues = !Array.isArray(b) ? 0 : -1; - } else if (!Array.isArray(b)) { - alignEmptyValues = 1; - } else { - - //compare valid values - el1 = a ? calc(a) : 0; - el2 = b ? calc(b) : 0; - - return el1 - el2; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort if element contains any data - exists: function exists(a, b, aRow, bRow, column, dir, params) { - var el1 = typeof a == "undefined" ? 0 : 1; - var el2 = typeof b == "undefined" ? 0 : 1; - - return el1 - el2; - }, - - //sort alpha numeric strings - alphanum: function alphanum(as, bs, aRow, bRow, column, dir, params) { - var a, - b, - a1, - b1, - i = 0, - L, - rx = /(\d+)|(\D+)/g, - rd = /\d/; - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - //handle empty values - if (!as && as !== 0) { - emptyAlign = !bs && bs !== 0 ? 0 : -1; - } else if (!bs && bs !== 0) { - emptyAlign = 1; - } else { - - if (isFinite(as) && isFinite(bs)) return as - bs; - a = String(as).toLowerCase(); - b = String(bs).toLowerCase(); - if (a === b) return 0; - if (!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1; - a = a.match(rx); - b = b.match(rx); - L = a.length > b.length ? b.length : a.length; - while (i < L) { - a1 = a[i]; - b1 = b[i++]; - if (a1 !== b1) { - if (isFinite(a1) && isFinite(b1)) { - if (a1.charAt(0) === "0") a1 = "." + a1; - if (b1.charAt(0) === "0") b1 = "." + b1; - return a1 - b1; - } else return a1 > b1 ? 1 : -1; - } - } - - return a.length > b.length; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - } -}; - -Tabulator.prototype.registerModule("sort", Sort); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/sort.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/sort.min.js deleted file mode 100644 index 5cc1ae4400..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/sort.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Sort=function(t){this.table=t,this.sortList=[],this.changed=!1};Sort.prototype.initializeColumn=function(t,e){var r,o,n=this,s=!1;switch(_typeof(t.definition.sorter)){case"string":n.sorters[t.definition.sorter]?s=n.sorters[t.definition.sorter]:console.warn("Sort Error - No such sorter found: ",t.definition.sorter);break;case"function":s=t.definition.sorter}t.modules.sort={sorter:s,dir:"none",params:t.definition.sorterParams||{},startingDir:t.definition.headerSortStartingDir||"asc"},!1!==t.definition.headerSort&&(r=t.getElement(),r.classList.add("tabulator-sortable"),o=document.createElement("div"),o.classList.add("tabulator-arrow"),e.appendChild(o),r.addEventListener("click",function(e){var r="",o=[],s=!1;t.modules.sort&&(r="asc"==t.modules.sort.dir?"desc":"desc"==t.modules.sort.dir?"asc":t.modules.sort.startingDir,n.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?(o=n.getSort(),s=o.findIndex(function(e){return e.field===t.getField()}),s>-1?(o[s].dir="asc"==o[s].dir?"desc":"asc",s!=o.length-1&&o.push(o.splice(s,1)[0])):o.push({column:t,dir:r}),n.setSort(o)):n.setSort(t,r),n.table.rowManager.sorterRefresh())}))},Sort.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},Sort.prototype.getSort=function(){var t=this,e=[];return t.sortList.forEach(function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})}),e},Sort.prototype.setSort=function(t,e){var r=this,o=[];Array.isArray(t)||(t=[{column:t,dir:e}]),t.forEach(function(t){var e;e=r.table.columnManager.findColumn(t.column),e?(t.column=e,o.push(t),r.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",t.column)}),r.sortList=o,this.table.options.persistentSort&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.save("sort")},Sort.prototype.clear=function(){this.setSort([])},Sort.prototype.findSorter=function(t){var e,r=this.table.rowManager.activeRows[0],o="string";if(r&&(r=r.getData(),t.getField()))switch(e=t.getFieldValue(r),void 0===e?"undefined":_typeof(e)){case"undefined":o="string";break;case"boolean":o="boolean";break;default:isNaN(e)||""===e?e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(o="alphanum"):o="number"}return this.sorters[o]},Sort.prototype.sort=function(){var t,e=this;t=this.table.options.sortOrderReverse?e.sortList.slice().reverse():e.sortList,e.table.options.dataSorting&&e.table.options.dataSorting.call(e.table,e.getSort()),e.clearColumnHeaders(),e.table.options.ajaxSorting?t.forEach(function(t,r){e.setColumnHeader(t.column,t.dir)}):t.forEach(function(r,o){r.column&&r.column.modules.sort&&(r.column.modules.sort.sorter||(r.column.modules.sort.sorter=e.findSorter(r.column)),e._sortItem(r.column,r.dir,t,o)),e.setColumnHeader(r.column,r.dir)}),e.table.options.dataSorted&&e.table.options.dataSorted.call(e.table,e.getSort(),e.table.rowManager.getComponents(!0))},Sort.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(t){t.modules.sort&&(t.modules.sort.dir="none",t.getElement().setAttribute("aria-sort","none"))})},Sort.prototype.setColumnHeader=function(t,e){t.modules.sort.dir=e,t.getElement().setAttribute("aria-sort",e)},Sort.prototype._sortItem=function(t,e,r,o){var n=this,s=n.table.rowManager.activeRows,i="function"==typeof t.modules.sort.params?t.modules.sort.params(t.getComponent(),e):t.modules.sort.params;s.sort(function(s,a){var l=n._sortRow(s,a,t,e,i);if(0===l&&o)for(var u=o-1;u>=0&&0===(l=n._sortRow(s,a,r[u].column,r[u].dir,i));u--);return l})},Sort.prototype._sortRow=function(t,e,r,o,n){var s,i,a="asc"==o?t:e,l="asc"==o?e:t;return t=r.getFieldValue(a.getData()),e=r.getFieldValue(l.getData()),t=void 0!==t?t:"",e=void 0!==e?e:"",s=a.getComponent(),i=l.getComponent(),r.modules.sort.sorter.call(this,t,e,s,i,r.getComponent(),o,n)},Sort.prototype.sorters={number:function(t,e,r,o,n,s,i){var a=i.alignEmptyValues,l=0;if(t=parseFloat(String(t).replace(",","")),e=parseFloat(String(e).replace(",","")),isNaN(t))l=isNaN(e)?0:-1;else{if(!isNaN(e))return t-e;l=1}return("top"===a&&"desc"===s||"bottom"===a&&"asc"===s)&&(l*=-1),l},string:function(t,e,r,o,n,s,i){var a,l=i.alignEmptyValues,u=0;if(t){if(e){switch(_typeof(i.locale)){case"boolean":i.locale&&(a=this.table.modules.localize.getLocale());break;case"string":a=i.locale}return String(t).toLowerCase().localeCompare(String(e).toLowerCase(),a)}u=1}else u=e?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(u*=-1),u},date:function(t,e,r,o,n,s,i){return i.format||(i.format="DD/MM/YYYY"),this.sorters.datetime.call(this,t,e,r,o,n,s,i)},time:function(t,e,r,o,n,s,i){return i.format||(i.format="hh:mm"),this.sorters.datetime.call(this,t,e,r,o,n,s,i)},datetime:function(t,e,r,o,n,s,i){var a=i.format||"DD/MM/YYYY hh:mm:ss",l=i.alignEmptyValues,u=0;if("undefined"!=typeof moment){if(t=moment(t,a),e=moment(e,a),t.isValid()){if(e.isValid())return t-e;u=1}else u=e.isValid()?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(u*=-1),u}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(t,e,r,o,n,s,i){return(!0===t||"true"===t||"True"===t||1===t?1:0)-(!0===e||"true"===e||"True"===e||1===e?1:0)},array:function(t,e,r,o,n,s,i){function a(t){switch(c){case"length":return t.length;case"sum":return t.reduce(function(t,e){return t+e});case"max":return Math.max.apply(null,t);case"min":return Math.min.apply(null,t);case"avg":return t.reduce(function(t,e){return t+e})/t.length}}var l=0,u=0,c=i.type||"length",d=i.alignEmptyValues,m=0;if(Array.isArray(t)){if(Array.isArray(e))return l=t?a(t):0,u=e?a(e):0,l-u;d=1}else d=Array.isArray(e)?-1:0;return("top"===d&&"desc"===s||"bottom"===d&&"asc"===s)&&(m*=-1),m},exists:function(t,e,r,o,n,s,i){return(void 0===t?0:1)-(void 0===e?0:1)},alphanum:function(t,e,r,o,n,s,i){var a,l,u,c,d,m=0,f=/(\d+)|(\D+)/g,p=/\d/,g=i.alignEmptyValues,h=0;if(t||0===t){if(e||0===e){if(isFinite(t)&&isFinite(e))return t-e;if(a=String(t).toLowerCase(),l=String(e).toLowerCase(),a===l)return 0;if(!p.test(a)||!p.test(l))return a>l?1:-1;for(a=a.match(f),l=l.match(f),d=a.length>l.length?l.length:a.length;mc?1:-1;return a.length>l.length}h=1}else h=e||0===e?-1:0;return("top"===g&&"desc"===s||"bottom"===g&&"asc"===s)&&(h*=-1),h}},Tabulator.prototype.registerModule("sort",Sort); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/validate.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/validate.js deleted file mode 100644 index dea91a0508..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/validate.js +++ /dev/null @@ -1,212 +0,0 @@ -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -var Validate = function Validate(table) { - this.table = table; -}; - -//validate -Validate.prototype.initializeColumn = function (column) { - var self = this, - config = [], - validator; - - if (column.definition.validator) { - - if (Array.isArray(column.definition.validator)) { - column.definition.validator.forEach(function (item) { - validator = self._extractValidator(item); - - if (validator) { - config.push(validator); - } - }); - } else { - validator = this._extractValidator(column.definition.validator); - - if (validator) { - config.push(validator); - } - } - - column.modules.validate = config.length ? config : false; - } -}; - -Validate.prototype._extractValidator = function (value) { - var parts, type, params; - - switch (typeof value === "undefined" ? "undefined" : _typeof(value)) { - case "string": - parts = value.split(":", 2); - type = parts.shift(); - params = parts[0]; - - return this._buildValidator(type, params); - break; - - case "function": - return this._buildValidator(value); - break; - - case "object": - return this._buildValidator(value.type, value.parameters); - break; - } -}; - -Validate.prototype._buildValidator = function (type, params) { - - var func = typeof type == "function" ? type : this.validators[type]; - - if (!func) { - console.warn("Validator Setup Error - No matching validator found:", type); - return false; - } else { - return { - type: typeof type == "function" ? "function" : type, - func: func, - params: params - }; - } -}; - -Validate.prototype.validate = function (validators, cell, value) { - var self = this, - valid = []; - - if (validators) { - validators.forEach(function (item) { - if (!item.func.call(self, cell, value, item.params)) { - valid.push({ - type: item.type, - parameters: item.params - }); - } - }); - } - - return valid.length ? valid : true; -}; - -Validate.prototype.validators = { - - //is integer - integer: function integer(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - value = Number(value); - return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; - }, - - //is float - float: function float(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - value = Number(value); - return typeof value === 'number' && isFinite(value) && value % 1 !== 0; - }, - - //must be a number - numeric: function numeric(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return !isNaN(value); - }, - - //must be a string - string: function string(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return isNaN(value); - }, - - //maximum value - max: function max(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return parseFloat(value) <= parameters; - }, - - //minimum value - min: function min(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return parseFloat(value) >= parameters; - }, - - //minimum string length - minLength: function minLength(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return String(value).length >= parameters; - }, - - //maximum string length - maxLength: function maxLength(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return String(value).length <= parameters; - }, - - //in provided value list - in: function _in(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - if (typeof parameters == "string") { - parameters = parameters.split("|"); - } - - return value === "" || parameters.indexOf(value) > -1; - }, - - //must match provided regex - regex: function regex(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - var reg = new RegExp(parameters); - - return reg.test(value); - }, - - //value must be unique in this column - unique: function unique(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - var unique = true; - - var cellData = cell.getData(); - var column = cell.getColumn()._getSelf(); - - this.table.rowManager.rows.forEach(function (row) { - var data = row.getData(); - - if (data !== cellData) { - if (value == column.getFieldValue(data)) { - unique = false; - } - } - }); - - return unique; - }, - - //must have a value - required: function required(cell, value, parameters) { - return value !== "" & value !== null && typeof value !== "undefined"; - } -}; - -Tabulator.prototype.registerModule("validate", Validate); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/validate.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/validate.min.js deleted file mode 100644 index 443a3fc3f6..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/modules/validate.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Validate=function(t){this.table=t};Validate.prototype.initializeColumn=function(t){var n,i=this,o=[];t.definition.validator&&(Array.isArray(t.definition.validator)?t.definition.validator.forEach(function(t){(n=i._extractValidator(t))&&o.push(n)}):(n=this._extractValidator(t.definition.validator))&&o.push(n),t.modules.validate=!!o.length&&o)},Validate.prototype._extractValidator=function(t){var n,i,o;switch(void 0===t?"undefined":_typeof(t)){case"string":return n=t.split(":",2),i=n.shift(),o=n[0],this._buildValidator(i,o);case"function":return this._buildValidator(t);case"object":return this._buildValidator(t.type,t.parameters)}},Validate.prototype._buildValidator=function(t,n){var i="function"==typeof t?t:this.validators[t];return i?{type:"function"==typeof t?"function":t,func:i,params:n}:(console.warn("Validator Setup Error - No matching validator found:",t),!1)},Validate.prototype.validate=function(t,n,i){var o=this,r=[];return t&&t.forEach(function(t){t.func.call(o,n,i,t.params)||r.push({type:t.type,parameters:t.params})}),!r.length||r},Validate.prototype.validators={integer:function(t,n,i){return""===n||null===n||void 0===n||"number"==typeof(n=Number(n))&&isFinite(n)&&Math.floor(n)===n},float:function(t,n,i){return""===n||null===n||void 0===n||"number"==typeof(n=Number(n))&&isFinite(n)&&n%1!=0},numeric:function(t,n,i){return""===n||null===n||void 0===n||!isNaN(n)},string:function(t,n,i){return""===n||null===n||void 0===n||isNaN(n)},max:function(t,n,i){return""===n||null===n||void 0===n||parseFloat(n)<=i},min:function(t,n,i){return""===n||null===n||void 0===n||parseFloat(n)>=i},minLength:function(t,n,i){return""===n||null===n||void 0===n||String(n).length>=i},maxLength:function(t,n,i){return""===n||null===n||void 0===n||String(n).length<=i},in:function(t,n,i){return""===n||null===n||void 0===n||("string"==typeof i&&(i=i.split("|")),""===n||i.indexOf(n)>-1)},regex:function(t,n,i){return""===n||null===n||void 0===n||new RegExp(i).test(n)},unique:function(t,n,i){if(""===n||null===n||void 0===n)return!0;var o=!0,r=t.getData(),e=t.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(t){var i=t.getData();i!==r&&n==e.getFieldValue(i)&&(o=!1)}),o},required:function(t,n,i){return""!==n&null!==n&&void 0!==n}},Tabulator.prototype.registerModule("validate",Validate); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/tabulator.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/tabulator.js deleted file mode 100644 index cb271b9fcb..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/tabulator.js +++ /dev/null @@ -1,19704 +0,0 @@ -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -;(function (global, factory) { - if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object' && typeof module !== 'undefined') { - module.exports = factory(); - } else if (typeof define === 'function' && define.amd) { - define(factory); - } else { - global.Tabulator = factory(); - } -})(this, function () { - - 'use strict'; - - // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex - - - if (!Array.prototype.findIndex) { - - Object.defineProperty(Array.prototype, 'findIndex', { - - value: function value(predicate) { - - // 1. Let O be ? ToObject(this value). - - - if (this == null) { - - throw new TypeError('"this" is null or not defined'); - } - - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - - - var len = o.length >>> 0; - - // 3. If IsCallable(predicate) is false, throw a TypeError exception. - - - if (typeof predicate !== 'function') { - - throw new TypeError('predicate must be a function'); - } - - // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. - - - var thisArg = arguments[1]; - - // 5. Let k be 0. - - - var k = 0; - - // 6. Repeat, while k < len - - - while (k < len) { - - // a. Let Pk be ! ToString(k). - - - // b. Let kValue be ? Get(O, Pk). - - - // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). - - - // d. If testResult is true, return k. - - - var kValue = o[k]; - - if (predicate.call(thisArg, kValue, k, o)) { - - return k; - } - - // e. Increase k by 1. - - - k++; - } - - // 7. Return -1. - - - return -1; - } - - }); - } - - // https://tc39.github.io/ecma262/#sec-array.prototype.find - - - if (!Array.prototype.find) { - - Object.defineProperty(Array.prototype, 'find', { - - value: function value(predicate) { - - // 1. Let O be ? ToObject(this value). - - - if (this == null) { - - throw new TypeError('"this" is null or not defined'); - } - - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - - - var len = o.length >>> 0; - - // 3. If IsCallable(predicate) is false, throw a TypeError exception. - - - if (typeof predicate !== 'function') { - - throw new TypeError('predicate must be a function'); - } - - // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. - - - var thisArg = arguments[1]; - - // 5. Let k be 0. - - - var k = 0; - - // 6. Repeat, while k < len - - - while (k < len) { - - // a. Let Pk be ! ToString(k). - - - // b. Let kValue be ? Get(O, Pk). - - - // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). - - - // d. If testResult is true, return kValue. - - - var kValue = o[k]; - - if (predicate.call(thisArg, kValue, k, o)) { - - return kValue; - } - - // e. Increase k by 1. - - - k++; - } - - // 7. Return undefined. - - - return undefined; - } - - }); - } - - var ColumnManager = function ColumnManager(table) { - - this.table = table; //hold parent table - - - this.headersElement = this.createHeadersElement(); - - this.element = this.createHeaderElement(); //containing element - - - this.rowManager = null; //hold row manager object - - - this.columns = []; // column definition object - - - this.columnsByIndex = []; //columns by index - - - this.columnsByField = []; //columns by field - - - this.scrollLeft = 0; - - this.element.insertBefore(this.headersElement, this.element.firstChild); - }; - - ////////////// Setup Functions ///////////////// - - - ColumnManager.prototype.createHeadersElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-headers"); - - return el; - }; - - ColumnManager.prototype.createHeaderElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-header"); - - return el; - }; - - //link to row manager - - - ColumnManager.prototype.setRowManager = function (manager) { - - this.rowManager = manager; - }; - - //return containing element - - - ColumnManager.prototype.getElement = function () { - - return this.element; - }; - - //return header containing element - - - ColumnManager.prototype.getHeadersElement = function () { - - return this.headersElement; - }; - - //scroll horizontally to match table body - - - ColumnManager.prototype.scrollHorizontal = function (left) { - - var hozAdjust = 0, - scrollWidth = this.element.scrollWidth - this.table.element.clientWidth; - - this.element.scrollLeft = left; - - //adjust for vertical scrollbar moving table when present - - - if (left > scrollWidth) { - - hozAdjust = left - scrollWidth; - - this.element.style.marginLeft = -hozAdjust + "px"; - } else { - - this.element.style.marginLeft = 0; - } - - //keep frozen columns fixed in position - - - //this._calcFrozenColumnsPos(hozAdjust + 3); - - - this.scrollLeft = left; - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.layout(); - } - }; - - ///////////// Column Setup Functions ///////////// - - - ColumnManager.prototype.setColumns = function (cols, row) { - - var self = this; - - while (self.headersElement.firstChild) { - self.headersElement.removeChild(self.headersElement.firstChild); - }self.columns = []; - - self.columnsByIndex = []; - - self.columnsByField = []; - - //reset frozen columns - - - if (self.table.modExists("frozenColumns")) { - - self.table.modules.frozenColumns.reset(); - } - - cols.forEach(function (def, i) { - - self._addColumn(def); - }); - - self._reIndexColumns(); - - if (self.table.options.responsiveLayout && self.table.modExists("responsiveLayout", true)) { - - self.table.modules.responsiveLayout.initialize(); - } - - self.redraw(true); - }; - - ColumnManager.prototype._addColumn = function (definition, before, nextToColumn) { - - var column = new Column(definition, this), - colEl = column.getElement(), - index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn; - - if (nextToColumn && index > -1) { - - var parentIndex = this.columns.indexOf(nextToColumn.getTopColumn()); - - var nextEl = nextToColumn.getElement(); - - if (before) { - - this.columns.splice(parentIndex, 0, column); - - nextEl.parentNode.insertBefore(colEl, nextEl); - } else { - - this.columns.splice(parentIndex + 1, 0, column); - - nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling); - } - } else { - - if (before) { - - this.columns.unshift(column); - - this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild); - } else { - - this.columns.push(column); - - this.headersElement.appendChild(column.getElement()); - } - } - - return column; - }; - - ColumnManager.prototype.registerColumnField = function (col) { - - if (col.definition.field) { - - this.columnsByField[col.definition.field] = col; - } - }; - - ColumnManager.prototype.registerColumnPosition = function (col) { - - this.columnsByIndex.push(col); - }; - - ColumnManager.prototype._reIndexColumns = function () { - - this.columnsByIndex = []; - - this.columns.forEach(function (column) { - - column.reRegisterPosition(); - }); - }; - - //ensure column headers take up the correct amount of space in column groups - - - ColumnManager.prototype._verticalAlignHeaders = function () { - - var self = this, - minHeight = 0; - - self.columns.forEach(function (column) { - - var height; - - column.clearVerticalAlign(); - - height = column.getHeight(); - - if (height > minHeight) { - - minHeight = height; - } - }); - - self.columns.forEach(function (column) { - - column.verticalAlign(self.table.options.columnVertAlign, minHeight); - }); - - self.rowManager.adjustTableSize(); - }; - - //////////////// Column Details ///////////////// - - - ColumnManager.prototype.findColumn = function (subject) { - - var self = this; - - if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") { - - if (subject instanceof Column) { - - //subject is column element - - - return subject; - } else if (subject instanceof ColumnComponent) { - - //subject is public column component - - - return subject._getSelf() || false; - } else if (subject instanceof HTMLElement) { - - //subject is a HTML element of the column header - - - var match = self.columns.find(function (column) { - - return column.element === subject; - }); - - return match || false; - } - } else { - - //subject should be treated as the field name of the column - - - return this.columnsByField[subject] || false; - } - - //catch all for any other type of input - - - return false; - }; - - ColumnManager.prototype.getColumnByField = function (field) { - - return this.columnsByField[field]; - }; - - ColumnManager.prototype.getColumnByIndex = function (index) { - - return this.columnsByIndex[index]; - }; - - ColumnManager.prototype.getColumns = function () { - - return this.columns; - }; - - ColumnManager.prototype.findColumnIndex = function (column) { - - return this.columnsByIndex.findIndex(function (col) { - - return column === col; - }); - }; - - //return all columns that are not groups - - - ColumnManager.prototype.getRealColumns = function () { - - return this.columnsByIndex; - }; - - //travers across columns and call action - - - ColumnManager.prototype.traverse = function (callback) { - - var self = this; - - self.columnsByIndex.forEach(function (column, i) { - - callback(column, i); - }); - }; - - //get defintions of actual columns - - - ColumnManager.prototype.getDefinitions = function (active) { - - var self = this, - output = []; - - self.columnsByIndex.forEach(function (column) { - - if (!active || active && column.visible) { - - output.push(column.getDefinition()); - } - }); - - return output; - }; - - //get full nested definition tree - - - ColumnManager.prototype.getDefinitionTree = function () { - - var self = this, - output = []; - - self.columns.forEach(function (column) { - - output.push(column.getDefinition(true)); - }); - - return output; - }; - - ColumnManager.prototype.getComponents = function (structured) { - - var self = this, - output = [], - columns = structured ? self.columns : self.columnsByIndex; - - columns.forEach(function (column) { - - output.push(column.getComponent()); - }); - - return output; - }; - - ColumnManager.prototype.getWidth = function () { - - var width = 0; - - this.columnsByIndex.forEach(function (column) { - - if (column.visible) { - - width += column.getWidth(); - } - }); - - return width; - }; - - ColumnManager.prototype.moveColumn = function (from, to, after) { - - this._moveColumnInArray(this.columns, from, to, after); - - this._moveColumnInArray(this.columnsByIndex, from, to, after, true); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.initialize(); - } - - if (this.table.options.columnMoved) { - - this.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents()); - } - - if (this.table.options.persistentLayout && this.table.modExists("persistence", true)) { - - this.table.modules.persistence.save("columns"); - } - }; - - ColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, updateRows) { - - var fromIndex = columns.indexOf(from), - toIndex; - - if (fromIndex > -1) { - - columns.splice(fromIndex, 1); - - toIndex = columns.indexOf(to); - - if (toIndex > -1) { - - if (after) { - - toIndex = toIndex + 1; - } - } else { - - toIndex = fromIndex; - } - - columns.splice(toIndex, 0, from); - - if (updateRows) { - - this.table.rowManager.rows.forEach(function (row) { - - if (row.cells.length) { - - var cell = row.cells.splice(fromIndex, 1)[0]; - - row.cells.splice(toIndex, 0, cell); - } - }); - } - } - }; - - ColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) { - var _this = this; - - var left = 0, - offset = 0, - adjust = 0, - colEl = column.getElement(); - - return new Promise(function (resolve, reject) { - - if (typeof position === "undefined") { - - position = _this.table.options.scrollToColumnPosition; - } - - if (typeof ifVisible === "undefined") { - - ifVisible = _this.table.options.scrollToColumnIfVisible; - } - - if (column.visible) { - - //align to correct position - - - switch (position) { - - case "middle": - - case "center": - - adjust = -_this.element.clientWidth / 2; - - break; - - case "right": - - adjust = colEl.clientWidth - _this.headersElement.clientWidth; - - break; - - } - - //check column visibility - - - if (!ifVisible) { - - offset = colEl.offsetLeft; - - if (offset > 0 && offset + colEl.offsetWidth < _this.element.clientWidth) { - - return false; - } - } - - //calculate scroll position - - - left = colEl.offsetLeft + _this.element.scrollLeft + adjust; - - left = Math.max(Math.min(left, _this.table.rowManager.element.scrollWidth - _this.table.rowManager.element.clientWidth), 0); - - _this.table.rowManager.scrollHorizontal(left); - - _this.scrollHorizontal(left); - - resolve(); - } else { - - console.warn("Scroll Error - Column not visible"); - - reject("Scroll Error - Column not visible"); - } - }); - }; - - //////////////// Cell Management ///////////////// - - - ColumnManager.prototype.generateCells = function (row) { - - var self = this; - - var cells = []; - - self.columnsByIndex.forEach(function (column) { - - cells.push(column.generateCell(row)); - }); - - return cells; - }; - - //////////////// Column Management ///////////////// - - - ColumnManager.prototype.getFlexBaseWidth = function () { - - var self = this, - totalWidth = self.table.element.clientWidth, - //table element width - - - fixedWidth = 0; - - //adjust for vertical scrollbar if present - - - if (self.rowManager.element.scrollHeight > self.rowManager.element.clientHeight) { - - totalWidth -= self.rowManager.element.offsetWidth - self.rowManager.element.clientWidth; - } - - this.columnsByIndex.forEach(function (column) { - - var width, minWidth, colWidth; - - if (column.visible) { - - width = column.definition.width || 0; - - minWidth = typeof column.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(column.minWidth); - - if (typeof width == "string") { - - if (width.indexOf("%") > -1) { - - colWidth = totalWidth / 100 * parseInt(width); - } else { - - colWidth = parseInt(width); - } - } else { - - colWidth = width; - } - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - } - }); - - return fixedWidth; - }; - - ColumnManager.prototype.addColumn = function (definition, before, nextToColumn) { - - var column = this._addColumn(definition, before, nextToColumn); - - this._reIndexColumns(); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.initialize(); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - this.redraw(); - - if (this.table.modules.layout.getMode() != "fitColumns") { - - column.reinitializeWidth(); - } - - this._verticalAlignHeaders(); - - this.table.rowManager.reinitialize(); - }; - - //remove column from system - - - ColumnManager.prototype.deregisterColumn = function (column) { - - var field = column.getField(), - index; - - //remove from field list - - - if (field) { - - delete this.columnsByField[field]; - } - - //remove from index list - - - index = this.columnsByIndex.indexOf(column); - - if (index > -1) { - - this.columnsByIndex.splice(index, 1); - } - - //remove from column list - - - index = this.columns.indexOf(column); - - if (index > -1) { - - this.columns.splice(index, 1); - } - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.initialize(); - } - - this.redraw(); - }; - - //redraw columns - - - ColumnManager.prototype.redraw = function (force) { - - if (force) { - - if (Tabulator.prototype.helpers.elVisible(this.element)) { - - this._verticalAlignHeaders(); - } - - this.table.rowManager.resetScroll(); - - this.table.rowManager.reinitialize(); - } - - if (this.table.modules.layout.getMode() == "fitColumns") { - - this.table.modules.layout.layout(); - } else { - - if (force) { - - this.table.modules.layout.layout(); - } else { - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - } - } - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.layout(); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - if (force) { - - if (this.table.options.persistentLayout && this.table.modExists("persistence", true)) { - - this.table.modules.persistence.save("columns"); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.redraw(); - } - } - - this.table.footerManager.redraw(); - }; - - //public column object - - var ColumnComponent = function ColumnComponent(column) { - - this._column = column; - - this.type = "ColumnComponent"; - }; - - ColumnComponent.prototype.getElement = function () { - - return this._column.getElement(); - }; - - ColumnComponent.prototype.getDefinition = function () { - - return this._column.getDefinition(); - }; - - ColumnComponent.prototype.getField = function () { - - return this._column.getField(); - }; - - ColumnComponent.prototype.getCells = function () { - - var cells = []; - - this._column.cells.forEach(function (cell) { - - cells.push(cell.getComponent()); - }); - - return cells; - }; - - ColumnComponent.prototype.getVisibility = function () { - - return this._column.visible; - }; - - ColumnComponent.prototype.show = function () { - - if (this._column.isGroup) { - - this._column.columns.forEach(function (column) { - - column.show(); - }); - } else { - - this._column.show(); - } - }; - - ColumnComponent.prototype.hide = function () { - - if (this._column.isGroup) { - - this._column.columns.forEach(function (column) { - - column.hide(); - }); - } else { - - this._column.hide(); - } - }; - - ColumnComponent.prototype.toggle = function () { - - if (this._column.visible) { - - this.hide(); - } else { - - this.show(); - } - }; - - ColumnComponent.prototype.delete = function () { - - this._column.delete(); - }; - - ColumnComponent.prototype.getSubColumns = function () { - - var output = []; - - if (this._column.columns.length) { - - this._column.columns.forEach(function (column) { - - output.push(column.getComponent()); - }); - } - - return output; - }; - - ColumnComponent.prototype.getParentColumn = function () { - - return this._column.parent instanceof Column ? this._column.parent.getComponent() : false; - }; - - ColumnComponent.prototype._getSelf = function () { - - return this._column; - }; - - ColumnComponent.prototype.scrollTo = function () { - - return this._column.table.columnManager.scrollToColumn(this._column); - }; - - ColumnComponent.prototype.getTable = function () { - - return this._column.table; - }; - - ColumnComponent.prototype.headerFilterFocus = function () { - - if (this._column.table.modExists("filter", true)) { - - this._column.table.modules.filter.setHeaderFilterFocus(this._column); - } - }; - - ColumnComponent.prototype.reloadHeaderFilter = function () { - - if (this._column.table.modExists("filter", true)) { - - this._column.table.modules.filter.reloadHeaderFilter(this._column); - } - }; - - ColumnComponent.prototype.setHeaderFilterValue = function (value) { - - if (this._column.table.modExists("filter", true)) { - - this._column.table.modules.filter.setHeaderFilterValue(this._column, value); - } - }; - - var Column = function Column(def, parent) { - - var self = this; - - this.table = parent.table; - - this.definition = def; //column definition - - this.parent = parent; //hold parent object - - this.type = "column"; //type of element - - this.columns = []; //child columns - - this.cells = []; //cells bound to this column - - this.element = this.createElement(); //column header element - - this.contentElement = false; - - this.groupElement = this.createGroupElement(); //column group holder element - - this.isGroup = false; - - this.tooltip = false; //hold column tooltip - - this.hozAlign = ""; //horizontal text alignment - - - //multi dimentional filed handling - - this.field = ""; - - this.fieldStructure = ""; - - this.getFieldValue = ""; - - this.setFieldValue = ""; - - this.setField(this.definition.field); - - this.modules = {}; //hold module variables; - - - this.cellEvents = { - - cellClick: false, - - cellDblClick: false, - - cellContext: false, - - cellTap: false, - - cellDblTap: false, - - cellTapHold: false - - }; - - this.width = null; //column width - - this.minWidth = null; //column minimum width - - this.widthFixed = false; //user has specified a width for this column - - - this.visible = true; //default visible state - - - //initialize column - - if (def.columns) { - - this.isGroup = true; - - def.columns.forEach(function (def, i) { - - var newCol = new Column(def, self); - - self.attachColumn(newCol); - }); - - self.checkColumnVisibility(); - } else { - - parent.registerColumnField(this); - } - - if (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists("moveRow")) { - - this.table.modules.moveRow.setHandle(true); - } - - this._buildHeader(); - }; - - Column.prototype.createElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - - el.setAttribute("role", "columnheader"); - - el.setAttribute("aria-sort", "none"); - - return el; - }; - - Column.prototype.createGroupElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-col-group-cols"); - - return el; - }; - - Column.prototype.setField = function (field) { - - this.field = field; - - this.fieldStructure = field ? this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field] : []; - - this.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData; - - this.setFieldValue = this.fieldStructure.length > 1 ? this._setNesteData : this._setFlatData; - }; - - //register column position with column manager - - Column.prototype.registerColumnPosition = function (column) { - - this.parent.registerColumnPosition(column); - }; - - //register column position with column manager - - Column.prototype.registerColumnField = function (column) { - - this.parent.registerColumnField(column); - }; - - //trigger position registration - - Column.prototype.reRegisterPosition = function () { - - if (this.isGroup) { - - this.columns.forEach(function (column) { - - column.reRegisterPosition(); - }); - } else { - - this.registerColumnPosition(this); - } - }; - - Column.prototype.setTooltip = function () { - - var self = this, - def = self.definition; - - //set header tooltips - - var tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader; - - if (tooltip) { - - if (tooltip === true) { - - if (def.field) { - - self.table.modules.localize.bind("columns|" + def.field, function (value) { - - self.element.setAttribute("title", value || def.title); - }); - } else { - - self.element.setAttribute("title", def.title); - } - } else { - - if (typeof tooltip == "function") { - - tooltip = tooltip(self.getComponent()); - - if (tooltip === false) { - - tooltip = ""; - } - } - - self.element.setAttribute("title", tooltip); - } - } else { - - self.element.setAttribute("title", ""); - } - }; - - //build header element - - Column.prototype._buildHeader = function () { - - var self = this, - def = self.definition; - - while (self.element.firstChild) { - self.element.removeChild(self.element.firstChild); - }if (def.headerVertical) { - - self.element.classList.add("tabulator-col-vertical"); - - if (def.headerVertical === "flip") { - - self.element.classList.add("tabulator-col-vertical-flip"); - } - } - - self.contentElement = self._bindEvents(); - - self.contentElement = self._buildColumnHeaderContent(); - - self.element.appendChild(self.contentElement); - - if (self.isGroup) { - - self._buildGroupHeader(); - } else { - - self._buildColumnHeader(); - } - - self.setTooltip(); - - //set resizable handles - - if (self.table.options.resizableColumns && self.table.modExists("resizeColumns")) { - - self.table.modules.resizeColumns.initializeColumn("header", self, self.element); - } - - //set resizable handles - - if (def.headerFilter && self.table.modExists("filter") && self.table.modExists("edit")) { - - if (typeof def.headerFilterPlaceholder !== "undefined" && def.field) { - - self.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder); - } - - self.table.modules.filter.initializeColumn(self); - } - - //set resizable handles - - if (self.table.modExists("frozenColumns")) { - - self.table.modules.frozenColumns.initializeColumn(self); - } - - //set movable column - - if (self.table.options.movableColumns && !self.isGroup && self.table.modExists("moveColumn")) { - - self.table.modules.moveColumn.initializeColumn(self); - } - - //set calcs column - - if ((def.topCalc || def.bottomCalc) && self.table.modExists("columnCalcs")) { - - self.table.modules.columnCalcs.initializeColumn(self); - } - - //update header tooltip on mouse enter - - self.element.addEventListener("mouseenter", function (e) { - - self.setTooltip(); - }); - }; - - Column.prototype._bindEvents = function () { - - var self = this, - def = self.definition, - dblTap, - tapHold, - tap; - - //setup header click event bindings - - if (typeof def.headerClick == "function") { - - self.element.addEventListener("click", function (e) { - def.headerClick(e, self.getComponent()); - }); - } - - if (typeof def.headerDblClick == "function") { - - self.element.addEventListener("dblclick", function (e) { - def.headerDblClick(e, self.getComponent()); - }); - } - - if (typeof def.headerContext == "function") { - - self.element.addEventListener("contextmenu", function (e) { - def.headerContext(e, self.getComponent()); - }); - } - - //setup header tap event bindings - - if (typeof def.headerTap == "function") { - - tap = false; - - self.element.addEventListener("touchstart", function (e) { - - tap = true; - }); - - self.element.addEventListener("touchend", function (e) { - - if (tap) { - - def.headerTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (typeof def.headerDblTap == "function") { - - dblTap = null; - - self.element.addEventListener("touchend", function (e) { - - if (dblTap) { - - clearTimeout(dblTap); - - dblTap = null; - - def.headerDblTap(e, self.getComponent()); - } else { - - dblTap = setTimeout(function () { - - clearTimeout(dblTap); - - dblTap = null; - }, 300); - } - }); - } - - if (typeof def.headerTapHold == "function") { - - tapHold = null; - - self.element.addEventListener("touchstart", function (e) { - - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - - clearTimeout(tapHold); - - tapHold = null; - - tap = false; - - def.headerTapHold(e, self.getComponent()); - }, 1000); - }); - - self.element.addEventListener("touchend", function (e) { - - clearTimeout(tapHold); - - tapHold = null; - }); - } - - //store column cell click event bindings - - if (typeof def.cellClick == "function") { - - self.cellEvents.cellClick = def.cellClick; - } - - if (typeof def.cellDblClick == "function") { - - self.cellEvents.cellDblClick = def.cellDblClick; - } - - if (typeof def.cellContext == "function") { - - self.cellEvents.cellContext = def.cellContext; - } - - //setup column cell tap event bindings - - if (typeof def.cellTap == "function") { - - self.cellEvents.cellTap = def.cellTap; - } - - if (typeof def.cellDblTap == "function") { - - self.cellEvents.cellDblTap = def.cellDblTap; - } - - if (typeof def.cellTapHold == "function") { - - self.cellEvents.cellTapHold = def.cellTapHold; - } - - //setup column cell edit callbacks - - if (typeof def.cellEdited == "function") { - - self.cellEvents.cellEdited = def.cellEdited; - } - - if (typeof def.cellEditing == "function") { - - self.cellEvents.cellEditing = def.cellEditing; - } - - if (typeof def.cellEditCancelled == "function") { - - self.cellEvents.cellEditCancelled = def.cellEditCancelled; - } - }; - - //build header element for header - - Column.prototype._buildColumnHeader = function () { - - var self = this, - def = self.definition, - table = self.table, - sortable; - - //set column sorter - - if (table.modExists("sort")) { - - table.modules.sort.initializeColumn(self, self.contentElement); - } - - //set column formatter - - if (table.modExists("format")) { - - table.modules.format.initializeColumn(self); - } - - //set column editor - - if (typeof def.editor != "undefined" && table.modExists("edit")) { - - table.modules.edit.initializeColumn(self); - } - - //set colum validator - - if (typeof def.validator != "undefined" && table.modExists("validate")) { - - table.modules.validate.initializeColumn(self); - } - - //set column mutator - - if (table.modExists("mutator")) { - - table.modules.mutator.initializeColumn(self); - } - - //set column accessor - - if (table.modExists("accessor")) { - - table.modules.accessor.initializeColumn(self); - } - - //set respoviveLayout - - if (_typeof(table.options.responsiveLayout) && table.modExists("responsiveLayout")) { - - table.modules.responsiveLayout.initializeColumn(self); - } - - //set column visibility - - if (typeof def.visible != "undefined") { - - if (def.visible) { - - self.show(true); - } else { - - self.hide(true); - } - } - - //asign additional css classes to column header - - if (def.cssClass) { - - self.element.classList.add(def.cssClass); - } - - if (def.field) { - - this.element.setAttribute("tabulator-field", def.field); - } - - //set min width if present - - self.setMinWidth(typeof def.minWidth == "undefined" ? self.table.options.columnMinWidth : def.minWidth); - - self.reinitializeWidth(); - - //set tooltip if present - - self.tooltip = self.definition.tooltip || self.definition.tooltip === false ? self.definition.tooltip : self.table.options.tooltips; - - //set orizontal text alignment - - self.hozAlign = typeof self.definition.align == "undefined" ? "" : self.definition.align; - }; - - Column.prototype._buildColumnHeaderContent = function () { - - var self = this, - def = self.definition, - table = self.table; - - var contentElement = document.createElement("div"); - - contentElement.classList.add("tabulator-col-content"); - - contentElement.appendChild(self._buildColumnHeaderTitle()); - - return contentElement; - }; - - //build title element of column - - Column.prototype._buildColumnHeaderTitle = function () { - - var self = this, - def = self.definition, - table = self.table, - title; - - var titleHolderElement = document.createElement("div"); - - titleHolderElement.classList.add("tabulator-col-title"); - - if (def.editableTitle) { - - var titleElement = document.createElement("input"); - - titleElement.classList.add("tabulator-title-editor"); - - titleElement.addEventListener("click", function (e) { - - e.stopPropagation(); - - titleElement.focus(); - }); - - titleElement.addEventListener("change", function () { - - def.title = titleElement.value; - - table.options.columnTitleChanged.call(self.table, self.getComponent()); - }); - - titleHolderElement.appendChild(titleElement); - - if (def.field) { - - table.modules.localize.bind("columns|" + def.field, function (text) { - - titleElement.value = text || def.title || " "; - }); - } else { - - titleElement.value = def.title || " "; - } - } else { - - if (def.field) { - - table.modules.localize.bind("columns|" + def.field, function (text) { - - self._formatColumnHeaderTitle(titleHolderElement, text || def.title || " "); - }); - } else { - - self._formatColumnHeaderTitle(titleHolderElement, def.title || " "); - } - } - - return titleHolderElement; - }; - - Column.prototype._formatColumnHeaderTitle = function (el, title) { - - var formatter, contents, params, mockCell; - - if (this.definition.titleFormatter && this.table.modExists("format")) { - - formatter = this.table.modules.format.getFormatter(this.definition.titleFormatter); - - mockCell = { - - getValue: function getValue() { - - return title; - }, - - getElement: function getElement() { - - return el; - } - - }; - - params = this.definition.titleFormatterParams || {}; - - params = typeof params === "function" ? params() : params; - - contents = formatter.call(this.table.modules.format, mockCell, params); - - switch (typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) { - - case "object": - - if (contents instanceof Node) { - - this.element.appendChild(contents); - } else { - - this.element.innerHTML = ""; - - console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", contents); - } - - break; - - case "undefined": - - case "null": - - this.element.innerHTML = ""; - - break; - - default: - - this.element.innerHTML = contents; - - } - } else { - - el.innerHTML = title; - } - }; - - //build header element for column group - - Column.prototype._buildGroupHeader = function () { - - this.element.classList.add("tabulator-col-group"); - - this.element.setAttribute("role", "columngroup"); - - this.element.setAttribute("aria-title", this.definition.title); - - this.element.appendChild(this.groupElement); - }; - - //flat field lookup - - Column.prototype._getFlatData = function (data) { - - return data[this.field]; - }; - - //nested field lookup - - Column.prototype._getNestedData = function (data) { - - var dataObj = data, - structure = this.fieldStructure, - length = structure.length, - output; - - for (var i = 0; i < length; i++) { - - dataObj = dataObj[structure[i]]; - - output = dataObj; - - if (!dataObj) { - - break; - } - } - - return output; - }; - - //flat field set - - Column.prototype._setFlatData = function (data, value) { - - data[this.field] = value; - }; - - //nested field set - - Column.prototype._setNesteData = function (data, value) { - - var dataObj = data, - structure = this.fieldStructure, - length = structure.length; - - for (var i = 0; i < length; i++) { - - if (i == length - 1) { - - dataObj[structure[i]] = value; - } else { - - if (!dataObj[structure[i]]) { - - dataObj[structure[i]] = {}; - } - - dataObj = dataObj[structure[i]]; - } - } - }; - - //attach column to this group - - Column.prototype.attachColumn = function (column) { - - var self = this; - - if (self.groupElement) { - - self.columns.push(column); - - self.groupElement.appendChild(column.getElement()); - } else { - - console.warn("Column Warning - Column being attached to another column instead of column group"); - } - }; - - //vertically align header in column - - Column.prototype.verticalAlign = function (alignment, height) { - - //calculate height of column header and group holder element - - var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : height || this.parent.getHeadersElement().clientHeight; - - // var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight; - - - this.element.style.height = parentHeight + "px"; - - if (this.isGroup) { - - this.groupElement.style.minHeight = parentHeight - this.contentElement.offsetHeight + "px"; - } - - //vertically align cell contents - - if (!this.isGroup && alignment !== "top") { - - if (alignment === "bottom") { - - this.element.style.paddingTop = this.element.clientHeight - this.contentElement.offsetHeight + "px"; - } else { - - this.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) / 2 + "px"; - } - } - - this.columns.forEach(function (column) { - - column.verticalAlign(alignment); - }); - }; - - //clear vertical alignmenet - - Column.prototype.clearVerticalAlign = function () { - - this.element.style.paddingTop = ""; - - this.element.style.height = ""; - - this.element.style.minHeight = ""; - - this.columns.forEach(function (column) { - - column.clearVerticalAlign(); - }); - }; - - //// Retreive Column Information //// - - - //return column header element - - Column.prototype.getElement = function () { - - return this.element; - }; - - //return colunm group element - - Column.prototype.getGroupElement = function () { - - return this.groupElement; - }; - - //return field name - - Column.prototype.getField = function () { - - return this.field; - }; - - //return the first column in a group - - Column.prototype.getFirstColumn = function () { - - if (!this.isGroup) { - - return this; - } else { - - if (this.columns.length) { - - return this.columns[0].getFirstColumn(); - } else { - - return false; - } - } - }; - - //return the last column in a group - - Column.prototype.getLastColumn = function () { - - if (!this.isGroup) { - - return this; - } else { - - if (this.columns.length) { - - return this.columns[this.columns.length - 1].getLastColumn(); - } else { - - return false; - } - } - }; - - //return all columns in a group - - Column.prototype.getColumns = function () { - - return this.columns; - }; - - //return all columns in a group - - Column.prototype.getCells = function () { - - return this.cells; - }; - - //retreive the top column in a group of columns - - Column.prototype.getTopColumn = function () { - - if (this.parent.isGroup) { - - return this.parent.getTopColumn(); - } else { - - return this; - } - }; - - //return column definition object - - Column.prototype.getDefinition = function (updateBranches) { - - var colDefs = []; - - if (this.isGroup && updateBranches) { - - this.columns.forEach(function (column) { - - colDefs.push(column.getDefinition(true)); - }); - - this.definition.columns = colDefs; - } - - return this.definition; - }; - - //////////////////// Actions //////////////////// - - - Column.prototype.checkColumnVisibility = function () { - - var visible = false; - - this.columns.forEach(function (column) { - - if (column.visible) { - - visible = true; - } - }); - - if (visible) { - - this.show(); - - this.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false); - } else { - - this.hide(); - } - }; - - //show column - - Column.prototype.show = function (silent, responsiveToggle) { - - if (!this.visible) { - - this.visible = true; - - this.element.style.display = ""; - - this.table.columnManager._verticalAlignHeaders(); - - if (this.parent.isGroup) { - - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function (cell) { - - cell.show(); - }); - - if (this.table.options.persistentLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.persistence.save("columns"); - } - - if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible); - } - - if (!silent) { - - this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true); - } - } - }; - - //hide column - - Column.prototype.hide = function (silent, responsiveToggle) { - - if (this.visible) { - - this.visible = false; - - this.element.style.display = "none"; - - this.table.columnManager._verticalAlignHeaders(); - - if (this.parent.isGroup) { - - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function (cell) { - - cell.hide(); - }); - - if (this.table.options.persistentLayout && this.table.modExists("persistence", true)) { - - this.table.modules.persistence.save("columns"); - } - - if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible); - } - - if (!silent) { - - this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false); - } - } - }; - - Column.prototype.matchChildWidths = function () { - - var childWidth = 0; - - if (this.contentElement && this.columns.length) { - - this.columns.forEach(function (column) { - - childWidth += column.getWidth(); - }); - - this.contentElement.style.maxWidth = childWidth - 1 + "px"; - } - }; - - Column.prototype.setWidth = function (width) { - - this.widthFixed = true; - - this.setWidthActual(width); - }; - - Column.prototype.setWidthActual = function (width) { - - if (isNaN(width)) { - - width = Math.floor(this.table.element.clientWidth / 100 * parseInt(width)); - } - - width = Math.max(this.minWidth, width); - - this.width = width; - - this.element.style.width = width ? width + "px" : ""; - - if (!this.isGroup) { - - this.cells.forEach(function (cell) { - - cell.setWidth(width); - }); - } - - if (this.parent.isGroup) { - - this.parent.matchChildWidths(); - } - - //set resizable handles - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.layout(); - } - }; - - Column.prototype.checkCellHeights = function () { - - var rows = []; - - this.cells.forEach(function (cell) { - - if (cell.row.heightInitialized) { - - if (cell.row.getElement().offsetParent !== null) { - - rows.push(cell.row); - - cell.row.clearCellHeight(); - } else { - - cell.row.heightInitialized = false; - } - } - }); - - rows.forEach(function (row) { - - row.calcHeight(); - }); - - rows.forEach(function (row) { - - row.setCellHeight(); - }); - }; - - Column.prototype.getWidth = function () { - - // return this.element.offsetWidth; - - return this.width; - }; - - Column.prototype.getHeight = function () { - - return this.element.offsetHeight; - }; - - Column.prototype.setMinWidth = function (minWidth) { - - this.minWidth = minWidth; - - this.element.style.minWidth = minWidth ? minWidth + "px" : ""; - - this.cells.forEach(function (cell) { - - cell.setMinWidth(minWidth); - }); - }; - - Column.prototype.delete = function () { - - if (this.isGroup) { - - this.columns.forEach(function (column) { - - column.delete(); - }); - } - - var cellCount = this.cells.length; - - for (var i = 0; i < cellCount; i++) { - - this.cells[0].delete(); - } - - this.element.parentNode.removeChild(this.element); - - this.table.columnManager.deregisterColumn(this); - }; - - //////////////// Cell Management ///////////////// - - - //generate cell for this column - - Column.prototype.generateCell = function (row) { - - var self = this; - - var cell = new Cell(self, row); - - this.cells.push(cell); - - return cell; - }; - - Column.prototype.reinitializeWidth = function (force) { - - this.widthFixed = false; - - //set width if present - - if (typeof this.definition.width !== "undefined" && !force) { - - this.setWidth(this.definition.width); - } - - //hide header filters to prevent them altering column width - - if (this.table.modExists("filter")) { - - this.table.modules.filter.hideHeaderFilterElements(); - } - - this.fitToData(); - - //show header filters again after layout is complete - - if (this.table.modExists("filter")) { - - this.table.modules.filter.showHeaderFilterElements(); - } - }; - - //set column width to maximum cell width - - Column.prototype.fitToData = function () { - - var self = this; - - if (!this.widthFixed) { - - this.element.width = ""; - - self.cells.forEach(function (cell) { - - cell.setWidth(""); - }); - } - - var maxWidth = this.element.offsetWidth; - - if (!self.width || !this.widthFixed) { - - self.cells.forEach(function (cell) { - - var width = cell.getWidth(); - - if (width > maxWidth) { - - maxWidth = width; - } - }); - - if (maxWidth) { - - self.setWidthActual(maxWidth + 1); - } - } - }; - - Column.prototype.deleteCell = function (cell) { - - var index = this.cells.indexOf(cell); - - if (index > -1) { - - this.cells.splice(index, 1); - } - }; - - //////////////// Event Bindings ///////////////// - - - //////////////// Object Generation ///////////////// - - Column.prototype.getComponent = function () { - - return new ColumnComponent(this); - }; - - var RowManager = function RowManager(table) { - - this.table = table; - - this.element = this.createHolderElement(); //containing element - - this.tableElement = this.createTableElement(); //table element - - this.columnManager = null; //hold column manager object - - this.height = 0; //hold height of table element - - - this.firstRender = false; //handle first render - - this.renderMode = "classic"; //current rendering mode - - - this.rows = []; //hold row data objects - - this.activeRows = []; //rows currently available to on display in the table - - this.activeRowsCount = 0; //count of active rows - - - this.displayRows = []; //rows currently on display in the table - - this.displayRowsCount = 0; //count of display rows - - - this.scrollTop = 0; - - this.scrollLeft = 0; - - this.vDomRowHeight = 20; //approximation of row heights for padding - - - this.vDomTop = 0; //hold position for first rendered row in the virtual DOM - - this.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM - - - this.vDomScrollPosTop = 0; //last scroll position of the vDom top; - - this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom; - - - this.vDomTopPad = 0; //hold value of padding for top of virtual DOM - - this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM - - - this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go - - - this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling - - - this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows) - - this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin - - - this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed - - this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed - }; - - //////////////// Setup Functions ///////////////// - - - RowManager.prototype.createHolderElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-tableHolder"); - - el.setAttribute("tabindex", 0); - - return el; - }; - - RowManager.prototype.createTableElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-table"); - - return el; - }; - - //return containing element - - RowManager.prototype.getElement = function () { - - return this.element; - }; - - //return table element - - RowManager.prototype.getTableElement = function () { - - return this.tableElement; - }; - - //return position of row in table - - RowManager.prototype.getRowPosition = function (row, active) { - - if (active) { - - return this.activeRows.indexOf(row); - } else { - - return this.rows.indexOf(row); - } - }; - - //link to column manager - - RowManager.prototype.setColumnManager = function (manager) { - - this.columnManager = manager; - }; - - RowManager.prototype.initialize = function () { - - var self = this; - - self.setRenderMode(); - - //initialize manager - - self.element.appendChild(self.tableElement); - - self.firstRender = true; - - //scroll header along with table body - - self.element.addEventListener("scroll", function () { - - var left = self.element.scrollLeft; - - //handle horizontal scrolling - - if (self.scrollLeft != left) { - - self.columnManager.scrollHorizontal(left); - - if (self.table.options.groupBy) { - - self.table.modules.groupRows.scrollHeaders(left); - } - - if (self.table.modExists("columnCalcs")) { - - self.table.modules.columnCalcs.scrollHorizontal(left); - } - } - - self.scrollLeft = left; - }); - - //handle virtual dom scrolling - - if (this.renderMode === "virtual") { - - self.element.addEventListener("scroll", function () { - - var top = self.element.scrollTop; - - var dir = self.scrollTop > top; - - //handle verical scrolling - - if (self.scrollTop != top) { - - self.scrollTop = top; - - self.scrollVertical(dir); - - if (self.table.options.ajaxProgressiveLoad == "scroll") { - - self.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top); - } - } else { - - self.scrollTop = top; - } - }); - } - }; - - ////////////////// Row Manipulation ////////////////// - - - RowManager.prototype.findRow = function (subject) { - - var self = this; - - if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") { - - if (subject instanceof Row) { - - //subject is row element - - return subject; - } else if (subject instanceof RowComponent) { - - //subject is public row component - - return subject._getSelf() || false; - } else if (subject instanceof HTMLElement) { - - //subject is a HTML element of the row - - var match = self.rows.find(function (row) { - - return row.element === subject; - }); - - return match || false; - } - } else if (typeof subject == "undefined" || subject === null) { - - return false; - } else { - - //subject should be treated as the index of the row - - var _match = self.rows.find(function (row) { - - return row.data[self.table.options.index] == subject; - }); - - return _match || false; - } - - //catch all for any other type of input - - - return false; - }; - - RowManager.prototype.getRowFromPosition = function (position, active) { - - if (active) { - - return this.activeRows[position]; - } else { - - return this.rows[position]; - } - }; - - RowManager.prototype.scrollToRow = function (row, position, ifVisible) { - var _this2 = this; - - var rowIndex = this.getDisplayRows().indexOf(row), - rowEl = row.getElement(), - rowTop, - offset = 0; - - return new Promise(function (resolve, reject) { - - if (rowIndex > -1) { - - if (typeof position === "undefined") { - - position = _this2.table.options.scrollToRowPosition; - } - - if (typeof ifVisible === "undefined") { - - ifVisible = _this2.table.options.scrollToRowIfVisible; - } - - if (position === "nearest") { - - switch (_this2.renderMode) { - - case "classic": - - rowTop = Tabulator.prototype.helpers.elOffset(rowEl).top; - - position = Math.abs(_this2.element.scrollTop - rowTop) > Math.abs(_this2.element.scrollTop + _this2.element.clientHeight - rowTop) ? "bottom" : "top"; - - break; - - case "virtual": - - position = Math.abs(_this2.vDomTop - rowIndex) > Math.abs(_this2.vDomBottom - rowIndex) ? "bottom" : "top"; - - break; - - } - } - - //check row visibility - - if (!ifVisible) { - - if (Tabulator.prototype.helpers.elVisible(rowEl)) { - - offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this2.element).top; - - if (offset > 0 && offset < _this2.element.clientHeight - rowEl.offsetHeight) { - - return false; - } - } - } - - //scroll to row - - switch (_this2.renderMode) { - - case "classic": - - _this2.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this2.element).top + _this2.element.scrollTop; - - break; - - case "virtual": - - _this2._virtualRenderFill(rowIndex, true); - - break; - - } - - //align to correct position - - switch (position) { - - case "middle": - - case "center": - - _this2.element.scrollTop = _this2.element.scrollTop - _this2.element.clientHeight / 2; - - break; - - case "bottom": - - _this2.element.scrollTop = _this2.element.scrollTop - _this2.element.clientHeight + rowEl.offsetHeight; - - break; - - } - - resolve(); - } else { - - console.warn("Scroll Error - Row not visible"); - - reject("Scroll Error - Row not visible"); - } - }); - }; - - ////////////////// Data Handling ////////////////// - - - RowManager.prototype.setData = function (data, renderInPosition) { - var _this3 = this; - - var self = this; - - return new Promise(function (resolve, reject) { - - if (renderInPosition && _this3.getDisplayRows().length) { - - if (self.table.options.pagination) { - - self._setDataActual(data, true); - } else { - - _this3.reRenderInPosition(function () { - - self._setDataActual(data); - }); - } - } else { - - _this3.resetScroll(); - - _this3._setDataActual(data); - } - - resolve(); - }); - }; - - RowManager.prototype._setDataActual = function (data, renderInPosition) { - - var self = this; - - self.table.options.dataLoading.call(this.table, data); - - self.rows.forEach(function (row) { - - row.wipe(); - }); - - self.rows = []; - - if (this.table.options.history && this.table.modExists("history")) { - - this.table.modules.history.clear(); - } - - if (Array.isArray(data)) { - - if (this.table.modExists("selectRow")) { - - this.table.modules.selectRow.clearSelectionData(); - } - - data.forEach(function (def, i) { - - if (def && (typeof def === 'undefined' ? 'undefined' : _typeof(def)) === "object") { - - var row = new Row(def, self); - - self.rows.push(row); - } else { - - console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:", def); - } - }); - - self.table.options.dataLoaded.call(this.table, data); - - self.refreshActiveData(false, false, renderInPosition); - } else { - - console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", typeof data === 'undefined' ? 'undefined' : _typeof(data), "\nData: ", data); - } - }; - - RowManager.prototype.deleteRow = function (row) { - - var allIndex = this.rows.indexOf(row), - activeIndex = this.activeRows.indexOf(row); - - if (activeIndex > -1) { - - this.activeRows.splice(activeIndex, 1); - } - - if (allIndex > -1) { - - this.rows.splice(allIndex, 1); - } - - this.setActiveRows(this.activeRows); - - this.displayRowIterator(function (rows) { - - var displayIndex = rows.indexOf(row); - - if (displayIndex > -1) { - - rows.splice(displayIndex, 1); - } - }); - - this.reRenderInPosition(); - - this.table.options.rowDeleted.call(this.table, row.getComponent()); - - this.table.options.dataEdited.call(this.table, this.getData()); - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - - this.table.modules.groupRows.updateGroupRows(true); - } else if (this.table.options.pagination && this.table.modExists("page")) { - - this.refreshActiveData(false, false, true); - } else { - - if (this.table.options.pagination && this.table.modExists("page")) { - - this.refreshActiveData("page"); - } - } - }; - - RowManager.prototype.addRow = function (data, pos, index, blockRedraw) { - - var row = this.addRowActual(data, pos, index, blockRedraw); - - if (this.table.options.history && this.table.modExists("history")) { - - this.table.modules.history.action("rowAdd", row, { data: data, pos: pos, index: index }); - } - - return row; - }; - - //add multiple rows - - RowManager.prototype.addRows = function (data, pos, index) { - var _this4 = this; - - var self = this, - length = 0, - rows = []; - - return new Promise(function (resolve, reject) { - - pos = _this4.findAddRowPos(pos); - - if (!Array.isArray(data)) { - - data = [data]; - } - - length = data.length - 1; - - if (typeof index == "undefined" && pos || typeof index !== "undefined" && !pos) { - - data.reverse(); - } - - data.forEach(function (item, i) { - - var row = self.addRow(item, pos, index, true); - - rows.push(row); - }); - - if (_this4.table.options.groupBy && _this4.table.modExists("groupRows")) { - - _this4.table.modules.groupRows.updateGroupRows(true); - } else if (_this4.table.options.pagination && _this4.table.modExists("page")) { - - _this4.refreshActiveData(false, false, true); - } else { - - _this4.reRenderInPosition(); - } - - //recalc column calculations if present - - if (_this4.table.modExists("columnCalcs")) { - - _this4.table.modules.columnCalcs.recalc(_this4.table.rowManager.activeRows); - } - - resolve(rows); - }); - }; - - RowManager.prototype.findAddRowPos = function (pos) { - - if (typeof pos === "undefined") { - - pos = this.table.options.addRowPos; - } - - if (pos === "pos") { - - pos = true; - } - - if (pos === "bottom") { - - pos = false; - } - - return pos; - }; - - RowManager.prototype.addRowActual = function (data, pos, index, blockRedraw) { - - var row = data instanceof Row ? data : new Row(data || {}, this), - top = this.findAddRowPos(pos), - dispRows; - - if (!index && this.table.options.pagination && this.table.options.paginationAddRow == "page") { - - dispRows = this.getDisplayRows(); - - if (top) { - - if (dispRows.length) { - - index = dispRows[0]; - } else { - - if (this.activeRows.length) { - - index = this.activeRows[this.activeRows.length - 1]; - - top = false; - } - } - } else { - - if (dispRows.length) { - - index = dispRows[dispRows.length - 1]; - - top = dispRows.length < this.table.modules.page.getPageSize() ? false : true; - } - } - } - - if (index) { - - index = this.findRow(index); - } - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - - this.table.modules.groupRows.assignRowToGroup(row); - - var groupRows = row.getGroup().rows; - - if (groupRows.length > 1) { - - if (!index || index && groupRows.indexOf(index) == -1) { - - if (top) { - - if (groupRows[0] !== row) { - - index = groupRows[0]; - - this._moveRowInArray(row.getGroup().rows, row, index, top); - } - } else { - - if (groupRows[groupRows.length - 1] !== row) { - - index = groupRows[groupRows.length - 1]; - - this._moveRowInArray(row.getGroup().rows, row, index, top); - } - } - } else { - - this._moveRowInArray(row.getGroup().rows, row, index, top); - } - } - } - - if (index) { - - var allIndex = this.rows.indexOf(index), - activeIndex = this.activeRows.indexOf(index); - - this.displayRowIterator(function (rows) { - - var displayIndex = rows.indexOf(index); - - if (displayIndex > -1) { - - rows.splice(top ? displayIndex : displayIndex + 1, 0, row); - } - }); - - if (activeIndex > -1) { - - this.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row); - } - - if (allIndex > -1) { - - this.rows.splice(top ? allIndex : allIndex + 1, 0, row); - } - } else { - - if (top) { - - this.displayRowIterator(function (rows) { - - rows.unshift(row); - }); - - this.activeRows.unshift(row); - - this.rows.unshift(row); - } else { - - this.displayRowIterator(function (rows) { - - rows.push(row); - }); - - this.activeRows.push(row); - - this.rows.push(row); - } - } - - this.setActiveRows(this.activeRows); - - this.table.options.rowAdded.call(this.table, row.getComponent()); - - this.table.options.dataEdited.call(this.table, this.getData()); - - if (!blockRedraw) { - - this.reRenderInPosition(); - } - - return row; - }; - - RowManager.prototype.moveRow = function (from, to, after) { - - if (this.table.options.history && this.table.modExists("history")) { - - this.table.modules.history.action("rowMove", from, { pos: this.getRowPosition(from), to: to, after: after }); - } - - this.moveRowActual(from, to, after); - - this.table.options.rowMoved.call(this.table, from.getComponent()); - }; - - RowManager.prototype.moveRowActual = function (from, to, after) { - - var self = this; - - this._moveRowInArray(this.rows, from, to, after); - - this._moveRowInArray(this.activeRows, from, to, after); - - this.displayRowIterator(function (rows) { - - self._moveRowInArray(rows, from, to, after); - }); - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - - var toGroup = to.getGroup(); - - var fromGroup = from.getGroup(); - - if (toGroup === fromGroup) { - - this._moveRowInArray(toGroup.rows, from, to, after); - } else { - - if (fromGroup) { - - fromGroup.removeRow(from); - } - - toGroup.insertRow(from, to, after); - } - } - }; - - RowManager.prototype._moveRowInArray = function (rows, from, to, after) { - - var fromIndex, toIndex, start, end; - - if (from !== to) { - - fromIndex = rows.indexOf(from); - - if (fromIndex > -1) { - - rows.splice(fromIndex, 1); - - toIndex = rows.indexOf(to); - - if (toIndex > -1) { - - if (after) { - - rows.splice(toIndex + 1, 0, from); - } else { - - rows.splice(toIndex, 0, from); - } - } else { - - rows.splice(fromIndex, 0, from); - } - } - - //restyle rows - - if (rows === this.getDisplayRows()) { - - start = fromIndex < toIndex ? fromIndex : toIndex; - - end = toIndex > fromIndex ? toIndex : fromIndex + 1; - - for (var i = start; i <= end; i++) { - - if (rows[i]) { - - this.styleRow(rows[i], i); - } - } - } - } - }; - - RowManager.prototype.clearData = function () { - - this.setData([]); - }; - - RowManager.prototype.getRowIndex = function (row) { - - return this.findRowIndex(row, this.rows); - }; - - RowManager.prototype.getDisplayRowIndex = function (row) { - - var index = this.getDisplayRows().indexOf(row); - - return index > -1 ? index : false; - }; - - RowManager.prototype.nextDisplayRow = function (row, rowOnly) { - - var index = this.getDisplayRowIndex(row), - nextRow = false; - - if (index !== false && index < this.displayRowsCount - 1) { - - nextRow = this.getDisplayRows()[index + 1]; - } - - if (nextRow && (!(nextRow instanceof Row) || nextRow.type != "row")) { - - return this.nextDisplayRow(nextRow, rowOnly); - } - - return nextRow; - }; - - RowManager.prototype.prevDisplayRow = function (row, rowOnly) { - - var index = this.getDisplayRowIndex(row), - prevRow = false; - - if (index) { - - prevRow = this.getDisplayRows()[index - 1]; - } - - if (prevRow && (!(prevRow instanceof Row) || prevRow.type != "row")) { - - return this.prevDisplayRow(prevRow, rowOnly); - } - - return prevRow; - }; - - RowManager.prototype.findRowIndex = function (row, list) { - - var rowIndex; - - row = this.findRow(row); - - if (row) { - - rowIndex = list.indexOf(row); - - if (rowIndex > -1) { - - return rowIndex; - } - } - - return false; - }; - - RowManager.prototype.getData = function (active, transform) { - - var self = this, - output = []; - - var rows = active ? self.activeRows : self.rows; - - rows.forEach(function (row) { - - output.push(row.getData(transform || "data")); - }); - - return output; - }; - - RowManager.prototype.getHtml = function (active) { - - var data = this.getData(active), - columns = [], - header = "", - body = "", - table = ""; - - //build header row - - this.table.columnManager.getColumns().forEach(function (column) { - - var def = column.getDefinition(); - - if (column.visible && !def.hideInHtml) { - - header += '' + (def.title || "") + ''; - - columns.push(column); - } - }); - - //build body rows - - data.forEach(function (rowData) { - - var row = ""; - - columns.forEach(function (column) { - - var value = column.getFieldValue(rowData); - - if (typeof value === "undefined" || value === null) { - - value = ":"; - } - - row += '' + value + ''; - }); - - body += '' + row + ''; - }); - - //build table - - table = '\n\n\t\t\t\n\n\t\t\t' + header + '\n\n\t\t\t\n\n\t\t\t' + body + '\n\n\t\t\t
'; - - return table; - }; - - RowManager.prototype.getComponents = function (active) { - - var self = this, - output = []; - - var rows = active ? self.activeRows : self.rows; - - rows.forEach(function (row) { - - output.push(row.getComponent()); - }); - - return output; - }; - - RowManager.prototype.getDataCount = function (active) { - - return active ? this.rows.length : this.activeRows.length; - }; - - RowManager.prototype._genRemoteRequest = function () { - - var self = this, - table = self.table, - options = table.options, - params = {}; - - if (table.modExists("page")) { - - //set sort data if defined - - if (options.ajaxSorting) { - - var sorters = self.table.modules.sort.getSort(); - - sorters.forEach(function (item) { - - delete item.column; - }); - - params[self.table.modules.page.paginationDataSentNames.sorters] = sorters; - } - - //set filter data if defined - - if (options.ajaxFiltering) { - - var filters = self.table.modules.filter.getFilters(true, true); - - params[self.table.modules.page.paginationDataSentNames.filters] = filters; - } - - self.table.modules.ajax.setParams(params, true); - } - - table.modules.ajax.sendRequest().then(function (data) { - - self.setData(data); - }).catch(function (e) {}); - }; - - //choose the path to refresh data after a filter update - - RowManager.prototype.filterRefresh = function () { - - var table = this.table, - options = table.options, - left = this.scrollLeft; - - if (options.ajaxFiltering) { - - if (options.pagination == "remote" && table.modExists("page")) { - - table.modules.page.reset(true); - - table.modules.page.setPage(1); - } else if (options.ajaxProgressiveLoad) { - - table.modules.ajax.loadData(); - } else { - - //assume data is url, make ajax call to url to get data - - this._genRemoteRequest(); - } - } else { - - this.refreshActiveData("filter"); - } - - this.scrollHorizontal(left); - }; - - //choose the path to refresh data after a sorter update - - RowManager.prototype.sorterRefresh = function () { - - var table = this.table, - options = this.table.options, - left = this.scrollLeft; - - if (options.ajaxSorting) { - - if ((options.pagination == "remote" || options.progressiveLoad) && table.modExists("page")) { - - table.modules.page.reset(true); - - table.modules.page.setPage(1); - } else if (options.ajaxProgressiveLoad) { - - table.modules.ajax.loadData(); - } else { - - //assume data is url, make ajax call to url to get data - - this._genRemoteRequest(); - } - } else { - - this.refreshActiveData("sort"); - } - - this.scrollHorizontal(left); - }; - - RowManager.prototype.scrollHorizontal = function (left) { - - this.scrollLeft = left; - - this.element.scrollLeft = left; - - if (this.table.options.groupBy) { - - this.table.modules.groupRows.scrollHeaders(left); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.scrollHorizontal(left); - } - }; - - //set active data set - - RowManager.prototype.refreshActiveData = function (stage, skipStage, renderInPosition) { - - var self = this, - table = this.table, - displayIndex; - - if (!stage) { - - stage = "all"; - } - - if (table.options.selectable && !table.options.selectablePersistence && table.modExists("selectRow")) { - - table.modules.selectRow.deselectRows(); - } - - //cascade through data refresh stages - - switch (stage) { - - case "all": - - case "filter": - - if (!skipStage) { - - if (table.modExists("filter")) { - - self.setActiveRows(table.modules.filter.filter(self.rows)); - } else { - - self.setActiveRows(self.rows.slice(0)); - } - } else { - - skipStage = false; - } - - case "sort": - - if (!skipStage) { - - if (table.modExists("sort")) { - - table.modules.sort.sort(); - } - } else { - - skipStage = false; - } - - //generic stage to allow for pipeline trigger after the data manipulation stage - - case "display": - - this.resetDisplayRows(); - - case "freeze": - - if (!skipStage) { - - if (this.table.modExists("frozenRows")) { - - if (table.modules.frozenRows.isFrozen()) { - - if (!table.modules.frozenRows.getDisplayIndex()) { - - table.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.frozenRows.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - - table.modules.frozenRows.setDisplayIndex(displayIndex); - } - } - } - } else { - - skipStage = false; - } - - case "group": - - if (!skipStage) { - - if (table.options.groupBy && table.modExists("groupRows")) { - - if (!table.modules.groupRows.getDisplayIndex()) { - - table.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.groupRows.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - - table.modules.groupRows.setDisplayIndex(displayIndex); - } - } - } else { - - skipStage = false; - } - - case "tree": - - if (!skipStage) { - - if (table.options.dataTree && table.modExists("dataTree")) { - - if (!table.modules.dataTree.getDisplayIndex()) { - - table.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.dataTree.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - - table.modules.dataTree.setDisplayIndex(displayIndex); - } - } - } else { - - skipStage = false; - } - - if (table.options.pagination && table.modExists("page") && !renderInPosition) { - - if (table.modules.page.getMode() == "local") { - - table.modules.page.reset(); - } - } - - case "page": - - if (!skipStage) { - - if (table.options.pagination && table.modExists("page")) { - - if (!table.modules.page.getDisplayIndex()) { - - table.modules.page.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.page.getDisplayIndex(); - - if (table.modules.page.getMode() == "local") { - - table.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length); - } - - displayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - - table.modules.page.setDisplayIndex(displayIndex); - } - } - } else { - - skipStage = false; - } - - } - - if (Tabulator.prototype.helpers.elVisible(self.element)) { - - if (renderInPosition) { - - self.reRenderInPosition(); - } else { - - self.renderTable(); - - if (table.options.layoutColumnsOnNewData) { - - self.table.columnManager.redraw(true); - } - } - } - - if (table.modExists("columnCalcs")) { - - table.modules.columnCalcs.recalc(this.activeRows); - } - }; - - RowManager.prototype.setActiveRows = function (activeRows) { - - this.activeRows = activeRows; - - this.activeRowsCount = this.activeRows.length; - }; - - //reset display rows array - - RowManager.prototype.resetDisplayRows = function () { - - this.displayRows = []; - - this.displayRows.push(this.activeRows.slice(0)); - - this.displayRowsCount = this.displayRows[0].length; - - if (this.table.modExists("frozenRows")) { - - this.table.modules.frozenRows.setDisplayIndex(0); - } - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - - this.table.modules.groupRows.setDisplayIndex(0); - } - - if (this.table.options.pagination && this.table.modExists("page")) { - - this.table.modules.page.setDisplayIndex(0); - } - }; - - RowManager.prototype.getNextDisplayIndex = function () { - - return this.displayRows.length; - }; - - //set display row pipeline data - - RowManager.prototype.setDisplayRows = function (displayRows, index) { - - var output = true; - - if (index && typeof this.displayRows[index] != "undefined") { - - this.displayRows[index] = displayRows; - - output = true; - } else { - - this.displayRows.push(displayRows); - - output = index = this.displayRows.length - 1; - } - - if (index == this.displayRows.length - 1) { - - this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length; - } - - return output; - }; - - RowManager.prototype.getDisplayRows = function (index) { - - if (typeof index == "undefined") { - - return this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : []; - } else { - - return this.displayRows[index] || []; - } - }; - - //repeat action accross display rows - - RowManager.prototype.displayRowIterator = function (callback) { - - this.displayRows.forEach(callback); - - this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length; - }; - - //return only actual rows (not group headers etc) - - RowManager.prototype.getRows = function () { - - return this.rows; - }; - - ///////////////// Table Rendering ///////////////// - - - //trigger rerender of table in current position - - RowManager.prototype.reRenderInPosition = function (callback) { - - if (this.getRenderMode() == "virtual") { - - var scrollTop = this.element.scrollTop; - - var topRow = false; - - var topOffset = false; - - var left = this.scrollLeft; - - var rows = this.getDisplayRows(); - - for (var i = this.vDomTop; i <= this.vDomBottom; i++) { - - if (rows[i]) { - - var diff = scrollTop - rows[i].getElement().offsetTop; - - if (topOffset === false || Math.abs(diff) < topOffset) { - - topOffset = diff; - - topRow = i; - } else { - - break; - } - } - } - - if (callback) { - - callback(); - } - - this._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0); - - this.scrollHorizontal(left); - } else { - - this.renderTable(); - } - }; - - RowManager.prototype.setRenderMode = function () { - - if ((this.table.element.clientHeight || this.table.options.height) && this.table.options.virtualDom) { - - this.renderMode = "virtual"; - } else { - - this.renderMode = "classic"; - } - }; - - RowManager.prototype.getRenderMode = function () { - - return this.renderMode; - }; - - RowManager.prototype.renderTable = function () { - - var self = this; - - self.table.options.renderStarted.call(this.table); - - self.element.scrollTop = 0; - - switch (self.renderMode) { - - case "classic": - - self._simpleRender(); - - break; - - case "virtual": - - self._virtualRenderFill(); - - break; - - } - - if (self.firstRender) { - - if (self.displayRowsCount) { - - self.firstRender = false; - - self.table.modules.layout.layout(); - } else { - - self.renderEmptyScroll(); - } - } - - if (self.table.modExists("frozenColumns")) { - - self.table.modules.frozenColumns.layout(); - } - - if (!self.displayRowsCount) { - - if (self.table.options.placeholder) { - - if (this.renderMode) { - - self.table.options.placeholder.setAttribute("tabulator-render-mode", this.renderMode); - } - - self.getElement().appendChild(self.table.options.placeholder); - } - } - - self.table.options.renderComplete.call(this.table); - }; - - //simple render on heightless table - - RowManager.prototype._simpleRender = function () { - - var self = this, - element = this.tableElement; - - self._clearVirtualDom(); - - if (self.displayRowsCount) { - - var onlyGroupHeaders = true; - - self.getDisplayRows().forEach(function (row, index) { - - self.styleRow(row, index); - - element.appendChild(row.getElement()); - - row.initialize(true); - - if (row.type !== "group") { - - onlyGroupHeaders = false; - } - }); - - if (onlyGroupHeaders) { - - element.style.minWidth = self.table.columnManager.getWidth() + "px"; - } - } else { - - self.renderEmptyScroll(); - } - }; - - //show scrollbars on empty table div - - RowManager.prototype.renderEmptyScroll = function () { - - this.tableElement.style.minWidth = this.table.columnManager.getWidth(); - - this.tableElement.style.minHeight = "1px"; - - // this.tableElement.style.visibility = "hidden"; - }; - - RowManager.prototype._clearVirtualDom = function () { - - var element = this.tableElement; - - if (this.table.options.placeholder && this.table.options.placeholder.parentNode) { - - this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder); - } - - // element.children.detach(); - - while (element.firstChild) { - element.removeChild(element.firstChild); - }element.style.paddingTop = ""; - - element.style.paddingBottom = ""; - - element.style.minWidth = ""; - - element.style.minHeight = ""; - - element.style.visibility = ""; - - this.scrollTop = 0; - - this.scrollLeft = 0; - - this.vDomTop = 0; - - this.vDomBottom = 0; - - this.vDomTopPad = 0; - - this.vDomBottomPad = 0; - }; - - RowManager.prototype.styleRow = function (row, index) { - - var rowEl = row.getElement(); - - if (index % 2) { - - rowEl.classList.add("tabulator-row-even"); - - rowEl.classList.remove("tabulator-row-odd"); - } else { - - rowEl.classList.add("tabulator-row-odd"); - - rowEl.classList.remove("tabulator-row-even"); - } - }; - - //full virtual render - - RowManager.prototype._virtualRenderFill = function (position, forceMove, offset) { - - var self = this, - element = self.tableElement, - holder = self.element, - topPad = 0, - rowsHeight = 0, - topPadHeight = 0, - i = 0, - onlyGroupHeaders = true, - rows = self.getDisplayRows(); - - position = position || 0; - - offset = offset || 0; - - if (!position) { - - self._clearVirtualDom(); - } else { - - // element.children().detach(); - - while (element.firstChild) { - element.removeChild(element.firstChild); - } //check if position is too close to bottom of table - - var heightOccpied = (self.displayRowsCount - position + 1) * self.vDomRowHeight; - - if (heightOccpied < self.height) { - - position -= Math.ceil((self.height - heightOccpied) / self.vDomRowHeight); - - if (position < 0) { - - position = 0; - } - } - - //calculate initial pad - - topPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position); - - position -= topPad; - } - - if (self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)) { - - self.vDomTop = position; - - self.vDomBottom = position - 1; - - while ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount - 1) { - - var index = self.vDomBottom + 1, - row = rows[index]; - - self.styleRow(row, index); - - element.appendChild(row.getElement()); - - if (!row.initialized) { - - row.initialize(true); - } else { - - if (!row.heightInitialized) { - - row.normalizeHeight(true); - } - } - - if (i < topPad) { - - topPadHeight += row.getHeight(); - } else { - - rowsHeight += row.getHeight(); - } - - if (row.type !== "group") { - - onlyGroupHeaders = false; - } - - self.vDomBottom++; - - i++; - } - - if (!position) { - - this.vDomTopPad = 0; - - //adjust rowheight to match average of rendered elements - - self.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i); - - self.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom - 1); - - self.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height; - } else { - - self.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : self.vDomRowHeight * this.vDomTop + offset; - - self.vDomBottomPad = self.vDomBottom == self.displayRowsCount - 1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0); - } - - element.style.paddingTop = self.vDomTopPad + "px"; - - element.style.paddingBottom = self.vDomBottomPad + "px"; - - if (forceMove) { - - this.scrollTop = self.vDomTopPad + topPadHeight + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0); - } - - this.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height); - - //adjust for horizontal scrollbar if present - - if (this.element.scrollWidth > this.element.offsetWidth) { - - this.scrollTop += this.element.offsetHeight - this.element.clientHeight; - } - - this.vDomScrollPosTop = this.scrollTop; - - this.vDomScrollPosBottom = this.scrollTop; - - holder.scrollTop = this.scrollTop; - - element.style.minWidth = onlyGroupHeaders ? self.table.columnManager.getWidth() + "px" : ""; - - if (self.table.options.groupBy) { - - if (self.table.modules.layout.getMode() != "fitDataFill" && self.displayRowsCount == self.table.modules.groupRows.countGroups()) { - - self.tableElement.style.minWidth = self.table.columnManager.getWidth(); - } - } - } else { - - this.renderEmptyScroll(); - } - }; - - //handle vertical scrolling - - RowManager.prototype.scrollVertical = function (dir) { - - var topDiff = this.scrollTop - this.vDomScrollPosTop; - - var bottomDiff = this.scrollTop - this.vDomScrollPosBottom; - - var margin = this.vDomWindowBuffer * 2; - - if (-topDiff > margin || bottomDiff > margin) { - - //if big scroll redraw table; - - var left = this.scrollLeft; - - this._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount)); - - this.scrollHorizontal(left); - } else { - - if (dir) { - - //scrolling up - - if (topDiff < 0) { - - this._addTopRow(-topDiff); - } - - if (topDiff < 0) { - - //hide bottom row if needed - - if (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) { - - this._removeBottomRow(-bottomDiff); - } - } - } else { - - //scrolling down - - if (topDiff >= 0) { - - //hide top row if needed - - if (this.scrollTop > this.vDomWindowBuffer) { - - this._removeTopRow(topDiff); - } - } - - if (bottomDiff >= 0) { - - this._addBottomRow(bottomDiff); - } - } - } - }; - - RowManager.prototype._addTopRow = function (topDiff) { - var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - - var table = this.tableElement, - rows = this.getDisplayRows(); - - if (this.vDomTop) { - - var index = this.vDomTop - 1, - topRow = rows[index], - topRowHeight = topRow.getHeight() || this.vDomRowHeight; - - //hide top row if needed - - if (topDiff >= topRowHeight) { - - this.styleRow(topRow, index); - - table.insertBefore(topRow.getElement(), table.firstChild); - - if (!topRow.initialized || !topRow.heightInitialized) { - - this.vDomTopNewRows.push(topRow); - - if (!topRow.heightInitialized) { - - topRow.clearCellHeight(); - } - } - - topRow.initialize(); - - this.vDomTopPad -= topRowHeight; - - if (this.vDomTopPad < 0) { - - this.vDomTopPad = index * this.vDomRowHeight; - } - - if (!index) { - - this.vDomTopPad = 0; - } - - table.style.paddingTop = this.vDomTopPad + "px"; - - this.vDomScrollPosTop -= topRowHeight; - - this.vDomTop--; - } - - topDiff = -(this.scrollTop - this.vDomScrollPosTop); - - if (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) { - - this._addTopRow(topDiff, i + 1); - } else { - - this._quickNormalizeRowHeight(this.vDomTopNewRows); - } - } - }; - - RowManager.prototype._removeTopRow = function (topDiff) { - - var table = this.tableElement, - topRow = this.getDisplayRows()[this.vDomTop], - topRowHeight = topRow.getHeight() || this.vDomRowHeight; - - if (topDiff >= topRowHeight) { - - var rowEl = topRow.getElement(); - - rowEl.parentNode.removeChild(rowEl); - - this.vDomTopPad += topRowHeight; - - table.style.paddingTop = this.vDomTopPad + "px"; - - this.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer; - - this.vDomTop++; - - topDiff = this.scrollTop - this.vDomScrollPosTop; - - this._removeTopRow(topDiff); - } - }; - - RowManager.prototype._addBottomRow = function (bottomDiff) { - var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - - var table = this.tableElement, - rows = this.getDisplayRows(); - - if (this.vDomBottom < this.displayRowsCount - 1) { - - var index = this.vDomBottom + 1, - bottomRow = rows[index], - bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight; - - //hide bottom row if needed - - if (bottomDiff >= bottomRowHeight) { - - this.styleRow(bottomRow, index); - - table.appendChild(bottomRow.getElement()); - - if (!bottomRow.initialized || !bottomRow.heightInitialized) { - - this.vDomBottomNewRows.push(bottomRow); - - if (!bottomRow.heightInitialized) { - - bottomRow.clearCellHeight(); - } - } - - bottomRow.initialize(); - - this.vDomBottomPad -= bottomRowHeight; - - if (this.vDomBottomPad < 0 || index == this.displayRowsCount - 1) { - - this.vDomBottomPad = 0; - } - - table.style.paddingBottom = this.vDomBottomPad + "px"; - - this.vDomScrollPosBottom += bottomRowHeight; - - this.vDomBottom++; - } - - bottomDiff = this.scrollTop - this.vDomScrollPosBottom; - - if (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) { - - this._addBottomRow(bottomDiff, i + 1); - } else { - - this._quickNormalizeRowHeight(this.vDomBottomNewRows); - } - } - }; - - RowManager.prototype._removeBottomRow = function (bottomDiff) { - - var table = this.tableElement, - bottomRow = this.getDisplayRows()[this.vDomBottom], - bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight; - - if (bottomDiff >= bottomRowHeight) { - - var rowEl = bottomRow.getElement(); - - if (rowEl.parentNode) { - - rowEl.parentNode.removeChild(rowEl); - } - - this.vDomBottomPad += bottomRowHeight; - - if (this.vDomBottomPad < 0) { - - this.vDomBottomPad = 0; - } - - table.style.paddingBottom = this.vDomBottomPad + "px"; - - this.vDomScrollPosBottom -= bottomRowHeight; - - this.vDomBottom--; - - bottomDiff = -(this.scrollTop - this.vDomScrollPosBottom); - - this._removeBottomRow(bottomDiff); - } - }; - - RowManager.prototype._quickNormalizeRowHeight = function (rows) { - - rows.forEach(function (row) { - - row.calcHeight(); - }); - - rows.forEach(function (row) { - - row.setCellHeight(); - }); - - rows.length = 0; - }; - - //normalize height of active rows - - RowManager.prototype.normalizeHeight = function () { - - this.activeRows.forEach(function (row) { - - row.normalizeHeight(); - }); - }; - - //adjust the height of the table holder to fit in the Tabulator element - - RowManager.prototype.adjustTableSize = function () { - - if (this.renderMode === "virtual") { - - this.height = this.element.clientHeight; - - this.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height; - - var otherHeight = this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0); - - this.element.style.minHeight = "calc(100% - " + otherHeight + "px)"; - - this.element.style.height = "calc(100% - " + otherHeight + "px)"; - - this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)"; - } - }; - - //renitialize all rows - - RowManager.prototype.reinitialize = function () { - - this.rows.forEach(function (row) { - - row.reinitialize(); - }); - }; - - //redraw table - - RowManager.prototype.redraw = function (force) { - - var pos = 0, - left = this.scrollLeft; - - this.adjustTableSize(); - - if (!force) { - - if (self.renderMode == "classic") { - - if (self.table.options.groupBy) { - - self.refreshActiveData("group", false, false); - } else { - - this._simpleRender(); - } - } else { - - this.reRenderInPosition(); - - this.scrollHorizontal(left); - } - - if (!this.displayRowsCount) { - - if (this.table.options.placeholder) { - - this.getElement().appendChild(this.table.options.placeholder); - } - } - } else { - - this.renderTable(); - } - }; - - RowManager.prototype.resetScroll = function () { - - this.element.scrollLeft = 0; - - this.element.scrollTop = 0; - - if (this.table.browser === "ie") { - - var event = document.createEvent("Event"); - - event.initEvent("scroll", false, true); - - this.element.dispatchEvent(event); - } else { - - this.element.dispatchEvent(new Event('scroll')); - } - }; - - //public row object - - var RowComponent = function RowComponent(row) { - - this._row = row; - }; - - RowComponent.prototype.getData = function (transform) { - - return this._row.getData(transform); - }; - - RowComponent.prototype.getElement = function () { - - return this._row.getElement(); - }; - - RowComponent.prototype.getCells = function () { - - var cells = []; - - this._row.getCells().forEach(function (cell) { - - cells.push(cell.getComponent()); - }); - - return cells; - }; - - RowComponent.prototype.getCell = function (column) { - - var cell = this._row.getCell(column); - - return cell ? cell.getComponent() : false; - }; - - RowComponent.prototype.getIndex = function () { - - return this._row.getData("data")[this._row.table.options.index]; - }; - - RowComponent.prototype.getPosition = function (active) { - - return this._row.table.rowManager.getRowPosition(this._row, active); - }; - - RowComponent.prototype.delete = function () { - - return this._row.delete(); - }; - - RowComponent.prototype.scrollTo = function () { - - return this._row.table.rowManager.scrollToRow(this._row); - }; - - RowComponent.prototype.update = function (data) { - - return this._row.updateData(data); - }; - - RowComponent.prototype.normalizeHeight = function () { - - this._row.normalizeHeight(true); - }; - - RowComponent.prototype.select = function () { - - this._row.table.modules.selectRow.selectRows(this._row); - }; - - RowComponent.prototype.deselect = function () { - - this._row.table.modules.selectRow.deselectRows(this._row); - }; - - RowComponent.prototype.toggleSelect = function () { - - this._row.table.modules.selectRow.toggleRow(this._row); - }; - - RowComponent.prototype.isSelected = function () { - - return this._row.table.modules.selectRow.isRowSelected(this._row); - }; - - RowComponent.prototype._getSelf = function () { - - return this._row; - }; - - RowComponent.prototype.freeze = function () { - - if (this._row.table.modExists("frozenRows", true)) { - - this._row.table.modules.frozenRows.freezeRow(this._row); - } - }; - - RowComponent.prototype.unfreeze = function () { - - if (this._row.table.modExists("frozenRows", true)) { - - this._row.table.modules.frozenRows.unfreezeRow(this._row); - } - }; - - RowComponent.prototype.treeCollapse = function () { - - if (this._row.table.modExists("dataTree", true)) { - - this._row.table.modules.dataTree.collapseRow(this._row); - } - }; - - RowComponent.prototype.treeExpand = function () { - - if (this._row.table.modExists("dataTree", true)) { - - this._row.table.modules.dataTree.expandRow(this._row); - } - }; - - RowComponent.prototype.treeToggle = function () { - - if (this._row.table.modExists("dataTree", true)) { - - this._row.table.modules.dataTree.toggleRow(this._row); - } - }; - - RowComponent.prototype.getTreeParent = function () { - - if (this._row.table.modExists("dataTree", true)) { - - return this._row.table.modules.dataTree.getTreeParent(this._row); - } - - return false; - }; - - RowComponent.prototype.getTreeChildren = function () { - - if (this._row.table.modExists("dataTree", true)) { - - return this._row.table.modules.dataTree.getTreeChildren(this._row); - } - - return false; - }; - - RowComponent.prototype.reformat = function () { - - return this._row.reinitialize(); - }; - - RowComponent.prototype.getGroup = function () { - - return this._row.getGroup().getComponent(); - }; - - RowComponent.prototype.getTable = function () { - - return this._row.table; - }; - - RowComponent.prototype.getNextRow = function () { - - return this._row.nextRow(); - }; - - RowComponent.prototype.getPrevRow = function () { - - return this._row.prevRow(); - }; - - var Row = function Row(data, parent) { - - this.table = parent.table; - - this.parent = parent; - - this.data = {}; - - this.type = "row"; //type of element - - this.element = this.createElement(); - - this.modules = {}; //hold module variables; - - this.cells = []; - - this.height = 0; //hold element height - - this.outerHeight = 0; //holde lements outer height - - this.initialized = false; //element has been rendered - - this.heightInitialized = false; //element has resized cells to fit - - - this.setData(data); - - this.generateElement(); - }; - - Row.prototype.createElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - - el.setAttribute("role", "row"); - - return el; - }; - - Row.prototype.getElement = function () { - - return this.element; - }; - - Row.prototype.generateElement = function () { - - var self = this, - dblTap, - tapHold, - tap; - - //set row selection characteristics - - if (self.table.options.selectable !== false && self.table.modExists("selectRow")) { - - self.table.modules.selectRow.initializeRow(this); - } - - //setup movable rows - - if (self.table.options.movableRows !== false && self.table.modExists("moveRow")) { - - self.table.modules.moveRow.initializeRow(this); - } - - //setup data tree - - if (self.table.options.dataTree !== false && self.table.modExists("dataTree")) { - - self.table.modules.dataTree.initializeRow(this); - } - - //handle row click events - - if (self.table.options.rowClick) { - - self.element.addEventListener("click", function (e) { - - self.table.options.rowClick(e, self.getComponent()); - }); - } - - if (self.table.options.rowDblClick) { - - self.element.addEventListener("dblclick", function (e) { - - self.table.options.rowDblClick(e, self.getComponent()); - }); - } - - if (self.table.options.rowContext) { - - self.element.addEventListener("contextmenu", function (e) { - - self.table.options.rowContext(e, self.getComponent()); - }); - } - - if (self.table.options.rowTap) { - - tap = false; - - self.element.addEventListener("touchstart", function (e) { - - tap = true; - }); - - self.element.addEventListener("touchend", function (e) { - - if (tap) { - - self.table.options.rowTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (self.table.options.rowDblTap) { - - dblTap = null; - - self.element.addEventListener("touchend", function (e) { - - if (dblTap) { - - clearTimeout(dblTap); - - dblTap = null; - - self.table.options.rowDblTap(e, self.getComponent()); - } else { - - dblTap = setTimeout(function () { - - clearTimeout(dblTap); - - dblTap = null; - }, 300); - } - }); - } - - if (self.table.options.rowTapHold) { - - tapHold = null; - - self.element.addEventListener("touchstart", function (e) { - - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - - clearTimeout(tapHold); - - tapHold = null; - - tap = false; - - self.table.options.rowTapHold(e, self.getComponent()); - }, 1000); - }); - - self.element.addEventListener("touchend", function (e) { - - clearTimeout(tapHold); - - tapHold = null; - }); - } - }; - - Row.prototype.generateCells = function () { - - this.cells = this.table.columnManager.generateCells(this); - }; - - //functions to setup on first render - - Row.prototype.initialize = function (force) { - - var self = this; - - if (!self.initialized || force) { - - self.deleteCells(); - - while (self.element.firstChild) { - self.element.removeChild(self.element.firstChild); - } //handle frozen cells - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.layoutRow(this); - } - - this.generateCells(); - - self.cells.forEach(function (cell) { - - self.element.appendChild(cell.getElement()); - - cell.cellRendered(); - }); - - if (force) { - - self.normalizeHeight(); - } - - //setup movable rows - - if (self.table.options.dataTree && self.table.modExists("dataTree")) { - - self.table.modules.dataTree.layoutRow(this); - } - - //setup movable rows - - if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) { - - self.table.modules.responsiveLayout.layoutRow(this); - } - - if (self.table.options.rowFormatter) { - - self.table.options.rowFormatter(self.getComponent()); - } - - //set resizable handles - - if (self.table.options.resizableRows && self.table.modExists("resizeRows")) { - - self.table.modules.resizeRows.initializeRow(self); - } - - self.initialized = true; - } - }; - - Row.prototype.reinitializeHeight = function () { - - this.heightInitialized = false; - - if (this.element.offsetParent !== null) { - - this.normalizeHeight(true); - } - }; - - Row.prototype.reinitialize = function () { - - this.initialized = false; - - this.heightInitialized = false; - - this.height = 0; - - if (this.element.offsetParent !== null) { - - this.initialize(true); - } - }; - - //get heights when doing bulk row style calcs in virtual DOM - - Row.prototype.calcHeight = function () { - - var maxHeight = 0, - minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0; - - this.cells.forEach(function (cell) { - - var height = cell.getHeight(); - - if (height > maxHeight) { - - maxHeight = height; - } - }); - - this.height = Math.max(maxHeight, minHeight); - - this.outerHeight = this.element.offsetHeight; - }; - - //set of cells - - Row.prototype.setCellHeight = function () { - - var height = this.height; - - this.cells.forEach(function (cell) { - - cell.setHeight(height); - }); - - this.heightInitialized = true; - }; - - Row.prototype.clearCellHeight = function () { - - this.cells.forEach(function (cell) { - - cell.clearHeight(); - }); - }; - - //normalize the height of elements in the row - - Row.prototype.normalizeHeight = function (force) { - - if (force) { - - this.clearCellHeight(); - } - - this.calcHeight(); - - this.setCellHeight(); - }; - - Row.prototype.setHeight = function (height) { - - this.height = height; - - this.setCellHeight(); - }; - - //set height of rows - - Row.prototype.setHeight = function (height, force) { - - if (this.height != height || force) { - - this.height = height; - - this.setCellHeight(); - - // this.outerHeight = this.element.outerHeight(); - - this.outerHeight = this.element.offsetHeight; - } - }; - - //return rows outer height - - Row.prototype.getHeight = function () { - - return this.outerHeight; - }; - - //return rows outer Width - - Row.prototype.getWidth = function () { - - return this.element.offsetWidth; - }; - - //////////////// Cell Management ///////////////// - - - Row.prototype.deleteCell = function (cell) { - - var index = this.cells.indexOf(cell); - - if (index > -1) { - - this.cells.splice(index, 1); - } - }; - - //////////////// Data Management ///////////////// - - - Row.prototype.setData = function (data) { - - var self = this; - - if (self.table.modExists("mutator")) { - - self.data = self.table.modules.mutator.transformRow(data, "data"); - } else { - - self.data = data; - } - }; - - //update the rows data - - Row.prototype.updateData = function (data) { - var _this5 = this; - - var self = this; - - return new Promise(function (resolve, reject) { - - if (typeof data === "string") { - - data = JSON.parse(data); - } - - //mutate incomming data if needed - - if (self.table.modExists("mutator")) { - - data = self.table.modules.mutator.transformRow(data, "data", true); - } - - //set data - - for (var attrname in data) { - - self.data[attrname] = data[attrname]; - } - - //update affected cells only - - for (var attrname in data) { - - var cell = _this5.getCell(attrname); - - if (cell) { - - if (cell.getValue() != data[attrname]) { - - cell.setValueProcessData(data[attrname]); - } - } - } - - //Partial reinitialization if visible - - if (Tabulator.prototype.helpers.elVisible(_this5.element)) { - - self.normalizeHeight(); - - if (self.table.options.rowFormatter) { - - self.table.options.rowFormatter(self.getComponent()); - } - } else { - - _this5.initialized = false; - - _this5.height = 0; - } - - //self.reinitialize(); - - - self.table.options.rowUpdated.call(_this5.table, self.getComponent()); - - resolve(); - }); - }; - - Row.prototype.getData = function (transform) { - - var self = this; - - if (transform) { - - if (self.table.modExists("accessor")) { - - return self.table.modules.accessor.transformRow(self.data, transform); - } - } else { - - return this.data; - } - }; - - Row.prototype.getCell = function (column) { - - var match = false; - - column = this.table.columnManager.findColumn(column); - - match = this.cells.find(function (cell) { - - return cell.column === column; - }); - - return match; - }; - - Row.prototype.getCellIndex = function (findCell) { - - return this.cells.findIndex(function (cell) { - - return cell === findCell; - }); - }; - - Row.prototype.findNextEditableCell = function (index) { - - var nextCell = false; - - if (index < this.cells.length - 1) { - - for (var i = index + 1; i < this.cells.length; i++) { - - var cell = this.cells[i]; - - if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) { - - var allowEdit = true; - - if (typeof cell.column.modules.edit.check == "function") { - - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - } - - if (allowEdit) { - - nextCell = cell; - - break; - } - } - } - } - - return nextCell; - }; - - Row.prototype.findPrevEditableCell = function (index) { - - var prevCell = false; - - if (index > 0) { - - for (var i = index - 1; i >= 0; i--) { - - var cell = this.cells[i], - allowEdit = true; - - if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) { - - if (typeof cell.column.modules.edit.check == "function") { - - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - } - - if (allowEdit) { - - prevCell = cell; - - break; - } - } - } - } - - return prevCell; - }; - - Row.prototype.getCells = function () { - - return this.cells; - }; - - Row.prototype.nextRow = function () { - - var row = this.table.rowManager.nextDisplayRow(this, true); - - return row ? row.getComponent() : false; - }; - - Row.prototype.prevRow = function () { - - var row = this.table.rowManager.prevDisplayRow(this, true); - - return row ? row.getComponent() : false; - }; - - ///////////////////// Actions ///////////////////// - - - Row.prototype.delete = function () { - var _this6 = this; - - return new Promise(function (resolve, reject) { - - var index = _this6.table.rowManager.getRowIndex(_this6); - - _this6.deleteActual(); - - if (_this6.table.options.history && _this6.table.modExists("history")) { - - if (index) { - - index = _this6.table.rowManager.rows[index - 1]; - } - - _this6.table.modules.history.action("rowDelete", _this6, { data: _this6.getData(), pos: !index, index: index }); - } - - resolve(); - }); - }; - - Row.prototype.deleteActual = function () { - - var index = this.table.rowManager.getRowIndex(this); - - //deselect row if it is selected - - if (this.table.modExists("selectRow")) { - - this.table.modules.selectRow._deselectRow(this, true); - } - - // if(this.table.options.dataTree && this.table.modExists("dataTree")){ - - // this.table.modules.dataTree.collapseRow(this, true); - - // } - - - this.table.rowManager.deleteRow(this); - - this.deleteCells(); - - this.initialized = false; - - this.heightInitialized = false; - - //remove from group - - if (this.modules.group) { - - this.modules.group.removeRow(this); - } - - //recalc column calculations if present - - if (this.table.modExists("columnCalcs")) { - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - - this.table.modules.columnCalcs.recalcRowGroup(this); - } else { - - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - } - }; - - Row.prototype.deleteCells = function () { - - var cellCount = this.cells.length; - - for (var i = 0; i < cellCount; i++) { - - this.cells[0].delete(); - } - }; - - Row.prototype.wipe = function () { - - this.deleteCells(); - - // this.element.children().each(function(){ - - // $(this).remove(); - - // }) - - // this.element.empty(); - - - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); - } // this.element.remove(); - - if (this.element.parentNode) { - - this.element.parentNode.removeChild(this.element); - } - }; - - Row.prototype.getGroup = function () { - - return this.modules.group || false; - }; - - //////////////// Object Generation ///////////////// - - Row.prototype.getComponent = function () { - - return new RowComponent(this); - }; - - //public row object - - var CellComponent = function CellComponent(cell) { - - this._cell = cell; - }; - - CellComponent.prototype.getValue = function () { - - return this._cell.getValue(); - }; - - CellComponent.prototype.getOldValue = function () { - - return this._cell.getOldValue(); - }; - - CellComponent.prototype.getElement = function () { - - return this._cell.getElement(); - }; - - CellComponent.prototype.getRow = function () { - - return this._cell.row.getComponent(); - }; - - CellComponent.prototype.getData = function () { - - return this._cell.row.getData(); - }; - - CellComponent.prototype.getField = function () { - - return this._cell.column.getField(); - }; - - CellComponent.prototype.getColumn = function () { - - return this._cell.column.getComponent(); - }; - - CellComponent.prototype.setValue = function (value, mutate) { - - if (typeof mutate == "undefined") { - - mutate = true; - } - - this._cell.setValue(value, mutate); - }; - - CellComponent.prototype.restoreOldValue = function () { - - this._cell.setValueActual(this._cell.getOldValue()); - }; - - CellComponent.prototype.edit = function (force) { - - return this._cell.edit(force); - }; - - CellComponent.prototype.cancelEdit = function () { - - this._cell.cancelEdit(); - }; - - CellComponent.prototype.nav = function () { - - return this._cell.nav(); - }; - - CellComponent.prototype.checkHeight = function () { - - this._cell.checkHeight(); - }; - - CellComponent.prototype.getTable = function () { - - return this._cell.table; - }; - - CellComponent.prototype._getSelf = function () { - - return this._cell; - }; - - var Cell = function Cell(column, row) { - - this.table = column.table; - - this.column = column; - - this.row = row; - - this.element = null; - - this.value = null; - - this.oldValue = null; - - this.height = null; - - this.width = null; - - this.minWidth = null; - - this.build(); - }; - - //////////////// Setup Functions ///////////////// - - - //generate element - - Cell.prototype.build = function () { - - this.generateElement(); - - this.setWidth(this.column.width); - - this._configureCell(); - - this.setValueActual(this.column.getFieldValue(this.row.data)); - }; - - Cell.prototype.generateElement = function () { - - this.element = document.createElement('div'); - - this.element.className = "tabulator-cell"; - - this.element.setAttribute("role", "gridcell"); - - this.element = this.element; - }; - - Cell.prototype._configureCell = function () { - - var self = this, - cellEvents = self.column.cellEvents, - element = self.element, - field = this.column.getField(), - dblTap, - tapHold, - tap; - - //set text alignment - - element.style.textAlign = self.column.hozAlign; - - if (field) { - - element.setAttribute("tabulator-field", field); - } - - if (self.column.definition.cssClass) { - - element.classList.add(self.column.definition.cssClass); - } - - //set event bindings - - if (cellEvents.cellClick || self.table.options.cellClick) { - - self.element.addEventListener("click", function (e) { - - var component = self.getComponent(); - - if (cellEvents.cellClick) { - - cellEvents.cellClick.call(self.table, e, component); - } - - if (self.table.options.cellClick) { - - self.table.options.cellClick.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellDblClick || this.table.options.cellDblClick) { - - element.addEventListener("dblclick", function (e) { - - var component = self.getComponent(); - - if (cellEvents.cellDblClick) { - - cellEvents.cellDblClick.call(self.table, e, component); - } - - if (self.table.options.cellDblClick) { - - self.table.options.cellDblClick.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellContext || this.table.options.cellContext) { - - element.addEventListener("contextmenu", function (e) { - - var component = self.getComponent(); - - if (cellEvents.cellContext) { - - cellEvents.cellContext.call(self.table, e, component); - } - - if (self.table.options.cellContext) { - - self.table.options.cellContext.call(self.table, e, component); - } - }); - } - - if (this.table.options.tooltipGenerationMode === "hover") { - - //update tooltip on mouse enter - - element.addEventListener("mouseenter", function (e) { - - self._generateTooltip(); - }); - } - - if (cellEvents.cellTap || this.table.options.cellTap) { - - tap = false; - - element.addEventListener("touchstart", function (e) { - - tap = true; - }); - - element.addEventListener("touchend", function (e) { - - if (tap) { - - var component = self.getComponent(); - - if (cellEvents.cellTap) { - - cellEvents.cellTap.call(self.table, e, component); - } - - if (self.table.options.cellTap) { - - self.table.options.cellTap.call(self.table, e, component); - } - } - - tap = false; - }); - } - - if (cellEvents.cellDblTap || this.table.options.cellDblTap) { - - dblTap = null; - - element.addEventListener("touchend", function (e) { - - if (dblTap) { - - clearTimeout(dblTap); - - dblTap = null; - - var component = self.getComponent(); - - if (cellEvents.cellDblTap) { - - cellEvents.cellDblTap.call(self.table, e, component); - } - - if (self.table.options.cellDblTap) { - - self.table.options.cellDblTap.call(self.table, e, component); - } - } else { - - dblTap = setTimeout(function () { - - clearTimeout(dblTap); - - dblTap = null; - }, 300); - } - }); - } - - if (cellEvents.cellTapHold || this.table.options.cellTapHold) { - - tapHold = null; - - element.addEventListener("touchstart", function (e) { - - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - - clearTimeout(tapHold); - - tapHold = null; - - tap = false; - - var component = self.getComponent(); - - if (cellEvents.cellTapHold) { - - cellEvents.cellTapHold.call(self.table, e, component); - } - - if (self.table.options.cellTapHold) { - - self.table.options.cellTapHold.call(self.table, e, component); - } - }, 1000); - }); - - element.addEventListener("touchend", function (e) { - - clearTimeout(tapHold); - - tapHold = null; - }); - } - - if (self.column.modules.edit) { - - self.table.modules.edit.bindEditor(self); - } - - if (self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists("moveRow")) { - - self.table.modules.moveRow.initializeCell(self); - } - - //hide cell if not visible - - if (!self.column.visible) { - - self.hide(); - } - }; - - //generate cell contents - - Cell.prototype._generateContents = function () { - - var val; - - if (this.table.modExists("format")) { - - val = this.table.modules.format.formatValue(this); - } else { - - val = this.element.innerHTML = this.value; - } - - switch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) { - - case "object": - - if (val instanceof Node) { - - this.element.appendChild(val); - } else { - - this.element.innerHTML = ""; - - console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val); - } - - break; - - case "undefined": - - case "null": - - this.element.innerHTML = ""; - - break; - - default: - - this.element.innerHTML = val; - - } - }; - - Cell.prototype.cellRendered = function () { - - if (this.table.modExists("format") && this.table.modules.format.cellRendered) { - - this.table.modules.format.cellRendered(this); - } - }; - - //generate tooltip text - - Cell.prototype._generateTooltip = function () { - - var tooltip = this.column.tooltip; - - if (tooltip) { - - if (tooltip === true) { - - tooltip = this.value; - } else if (typeof tooltip == "function") { - - tooltip = tooltip(this.getComponent()); - - if (tooltip === false) { - - tooltip = ""; - } - } - - if (typeof tooltip === "undefined") { - - tooltip = ""; - } - - this.element.setAttribute("title", tooltip); - } else { - - this.element.setAttribute("title", ""); - } - }; - - //////////////////// Getters //////////////////// - - Cell.prototype.getElement = function () { - - return this.element; - }; - - Cell.prototype.getValue = function () { - - return this.value; - }; - - Cell.prototype.getOldValue = function () { - - return this.oldValue; - }; - - //////////////////// Actions //////////////////// - - - Cell.prototype.setValue = function (value, mutate) { - - var changed = this.setValueProcessData(value, mutate), - component; - - if (changed) { - - if (this.table.options.history && this.table.modExists("history")) { - - this.table.modules.history.action("cellEdit", this, { oldValue: this.oldValue, newValue: this.value }); - } - - component = this.getComponent(); - - if (this.column.cellEvents.cellEdited) { - - this.column.cellEvents.cellEdited.call(this.table, component); - } - - this.table.options.cellEdited.call(this.table, component); - - this.table.options.dataEdited.call(this.table, this.table.rowManager.getData()); - } - - if (this.table.modExists("columnCalcs")) { - - if (this.column.definition.topCalc || this.column.definition.bottomCalc) { - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - - this.table.modules.columnCalcs.recalcRowGroup(this.row); - } else { - - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - } - } - }; - - Cell.prototype.setValueProcessData = function (value, mutate) { - - var changed = false; - - if (this.value != value) { - - changed = true; - - if (mutate) { - - if (this.column.modules.mutate) { - - value = this.table.modules.mutator.transformCell(this, value); - } - } - } - - this.setValueActual(value); - - return changed; - }; - - Cell.prototype.setValueActual = function (value) { - - this.oldValue = this.value; - - this.value = value; - - this.column.setFieldValue(this.row.data, value); - - this._generateContents(); - - this._generateTooltip(); - - //set resizable handles - - if (this.table.options.resizableColumns && this.table.modExists("resizeColumns")) { - - this.table.modules.resizeColumns.initializeColumn("cell", this.column, this.element); - } - - //handle frozen cells - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.layoutElement(this.element, this.column); - } - }; - - Cell.prototype.setWidth = function (width) { - - this.width = width; - - // this.element.css("width", width || ""); - - this.element.style.width = width ? width + "px" : ""; - }; - - Cell.prototype.getWidth = function () { - - return this.width || this.element.offsetWidth; - }; - - Cell.prototype.setMinWidth = function (minWidth) { - - this.minWidth = minWidth; - - this.element.style.minWidth = minWidth ? minWidth + "px" : ""; - }; - - Cell.prototype.checkHeight = function () { - - // var height = this.element.css("height"); - - - this.row.reinitializeHeight(); - }; - - Cell.prototype.clearHeight = function () { - - this.element.style.height = ""; - - this.height = null; - }; - - Cell.prototype.setHeight = function (height) { - - this.height = height; - - this.element.style.height = height ? height + "px" : ""; - }; - - Cell.prototype.getHeight = function () { - - return this.height || this.element.offsetHeight; - }; - - Cell.prototype.show = function () { - - this.element.style.display = ""; - }; - - Cell.prototype.hide = function () { - - this.element.style.display = "none"; - }; - - Cell.prototype.edit = function (force) { - - if (this.table.modExists("edit", true)) { - - return this.table.modules.edit.editCell(this, force); - } - }; - - Cell.prototype.cancelEdit = function () { - - if (this.table.modExists("edit", true)) { - - var editing = this.table.modules.edit.getCurrentCell(); - - if (editing && editing._getSelf() === this) { - - this.table.modules.edit.cancelEdit(); - } else { - - console.warn("Cancel Editor Error - This cell is not currently being edited "); - } - } - }; - - Cell.prototype.delete = function () { - - this.element.parentNode.removeChild(this.element); - - this.column.deleteCell(this); - - this.row.deleteCell(this); - }; - - //////////////// Navigation ///////////////// - - - Cell.prototype.nav = function () { - - var self = this, - nextCell = false, - index = this.row.getCellIndex(this); - - return { - - next: function next() { - - var nextCell = this.right(), - nextRow; - - if (!nextCell) { - - nextRow = self.table.rowManager.nextDisplayRow(self.row, true); - - if (nextRow) { - - nextCell = nextRow.findNextEditableCell(-1); - - if (nextCell) { - - nextCell.edit(); - - return true; - } - } - } else { - - return true; - } - - return false; - }, - - prev: function prev() { - - var nextCell = this.left(), - prevRow; - - if (!nextCell) { - - prevRow = self.table.rowManager.prevDisplayRow(self.row, true); - - if (prevRow) { - - nextCell = prevRow.findPrevEditableCell(prevRow.cells.length); - - if (nextCell) { - - nextCell.edit(); - - return true; - } - } - } else { - - return true; - } - - return false; - }, - - left: function left() { - - nextCell = self.row.findPrevEditableCell(index); - - if (nextCell) { - - nextCell.edit(); - - return true; - } else { - - return false; - } - }, - - right: function right() { - - nextCell = self.row.findNextEditableCell(index); - - if (nextCell) { - - nextCell.edit(); - - return true; - } else { - - return false; - } - }, - - up: function up() { - - var nextRow = self.table.rowManager.prevDisplayRow(self.row, true); - - if (nextRow) { - - nextRow.cells[index].edit(); - } - }, - - down: function down() { - - var nextRow = self.table.rowManager.nextDisplayRow(self.row, true); - - if (nextRow) { - - nextRow.cells[index].edit(); - } - } - - }; - }; - - Cell.prototype.getIndex = function () { - - this.row.getCellIndex(this); - }; - - //////////////// Object Generation ///////////////// - - Cell.prototype.getComponent = function () { - - return new CellComponent(this); - }; - - var FooterManager = function FooterManager(table) { - - this.table = table; - - this.active = false; - - this.element = this.createElement(); //containing element - - this.external = false; - - this.links = []; - - this._initialize(); - }; - - FooterManager.prototype.createElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-footer"); - - return el; - }; - - FooterManager.prototype._initialize = function (element) { - - if (this.table.options.footerElement) { - - switch (_typeof(this.table.options.footerElement)) { - - case "string": - - if (this.table.options.footerElement[0] === "<") { - - this.element.innerHTML = this.table.options.footerElement; - } else { - - this.external = true; - - this.element = document.querySelector(this.table.options.footerElement); - } - - break; - - default: - - this.element = this.table.options.footerElement; - - break; - - } - } - }; - - FooterManager.prototype.getElement = function () { - - return this.element; - }; - - FooterManager.prototype.append = function (element, parent) { - - this.activate(parent); - - this.element.appendChild(element); - - this.table.rowManager.adjustTableSize(); - }; - - FooterManager.prototype.prepend = function (element, parent) { - - this.activate(parent); - - this.element.insertBefore(element, this.element.firstChild); - - this.table.rowManager.adjustTableSize(); - }; - - FooterManager.prototype.remove = function (element) { - - element.parentNode.removeChild(element); - - this.deactivate(); - }; - - FooterManager.prototype.deactivate = function (force) { - - if (!this.element.firstChild || force) { - - if (!this.external) { - - this.element.parentNode.removeChild(this.element); - } - - this.active = false; - } - - // this.table.rowManager.adjustTableSize(); - }; - - FooterManager.prototype.activate = function (parent) { - - if (!this.active) { - - this.active = true; - - if (!this.external) { - - this.table.element.appendChild(this.getElement()); - - this.table.element.style.display = ''; - } - } - - if (parent) { - - this.links.push(parent); - } - }; - - FooterManager.prototype.redraw = function () { - - this.links.forEach(function (link) { - - link.footerRedraw(); - }); - }; - - var Tabulator = function Tabulator(element, options) { - - this.options = {}; - - this.columnManager = null; // hold Column Manager - - this.rowManager = null; //hold Row Manager - - this.footerManager = null; //holder Footer Manager - - this.browser = ""; //hold current browser type - - this.browserSlow = false; //handle reduced functionality for slower browsers - - - this.modules = {}; //hold all modules bound to this table - - - this.initializeElement(element); - - this.initializeOptions(options || {}); - - this._create(); - - Tabulator.prototype.comms.register(this); //register table for inderdevice communication - }; - - //default setup options - - Tabulator.prototype.defaultOptions = { - - height: false, //height of tabulator - - - layout: "fitData", ///layout type "fitColumns" | "fitData" - - layoutColumnsOnNewData: false, //update column widths on setData - - - columnMinWidth: 40, //minimum global width for a column - - columnVertAlign: "top", //vertical alignment of column headers - - - resizableColumns: true, //resizable columns - - resizableRows: false, //resizable rows - - autoResize: true, //auto resize table - - - columns: [], //store for colum header info - - - data: [], //default starting data - - - nestedFieldSeparator: ".", //seperatpr for nested data - - - tooltips: false, //Tool tip value - - tooltipsHeader: false, //Tool tip for headers - - tooltipGenerationMode: "load", //when to generate tooltips - - - initialSort: false, //initial sorting criteria - - initialFilter: false, //initial filtering criteria - - - columnHeaderSortMulti: true, //multiple or single column sorting - - - sortOrderReverse: false, //reverse internal sort ordering - - - footerElement: false, //hold footer element - - - index: "id", //filed for row index - - - keybindings: [], //array for keybindings - - - clipboard: false, //enable clipboard - - clipboardCopyStyled: true, //formatted table data - - clipboardCopySelector: "active", //method of chosing which data is coppied to the clipboard - - clipboardCopyFormatter: "table", //convert data to a clipboard string - - clipboardPasteParser: "table", //convert pasted clipboard data to rows - - clipboardPasteAction: "insert", //how to insert pasted data into the table - - clipboardCopyConfig: false, //clipboard config - - - clipboardCopied: function clipboardCopied() {}, //data has been copied to the clipboard - - clipboardPasted: function clipboardPasted() {}, //data has been pasted into the table - - clipboardPasteError: function clipboardPasteError() {}, //data has not successfully been pasted into the table - - - downloadDataFormatter: false, //function to manipulate table data before it is downloaded - - downloadReady: function downloadReady(data, blob) { - return blob; - }, //function to manipulate download data - - downloadComplete: false, //function to manipulate download data - - downloadConfig: false, //download config - - - dataTree: false, //enable data tree - - dataTreeBranchElement: true, //show data tree branch element - - dataTreeChildIndent: 9, //data tree child indent in px - - dataTreeChildField: "_children", //data tre column field to look for child rows - - dataTreeCollapseElement: false, //data tree row collapse element - - dataTreeExpandElement: false, //data tree row expand element - - dataTreeStartExpanded: false, - - dataTreeRowExpanded: function dataTreeRowExpanded() {}, //row has been expanded - - dataTreeRowCollapsed: function dataTreeRowCollapsed() {}, //row has been collapsed - - - addRowPos: "bottom", //position to insert blank rows, top|bottom - - - selectable: "highlight", //highlight rows on hover - - selectableRangeMode: "drag", //highlight rows on hover - - selectableRollingSelection: true, //roll selection once maximum number of selectable rows is reached - - selectablePersistence: true, // maintain selection when table view is updated - - selectableCheck: function selectableCheck(data, row) { - return true; - }, //check wheather row is selectable - - - headerFilterPlaceholder: false, //placeholder text to display in header filters - - - history: false, //enable edit history - - - locale: false, //current system language - - langs: {}, - - virtualDom: true, //enable DOM virtualization - - - persistentLayout: false, //store column layout in memory - - persistentSort: false, //store sorting in memory - - persistentFilter: false, //store filters in memory - - persistenceID: "", //key for persistent storage - - persistenceMode: true, //mode for storing persistence information - - - responsiveLayout: false, //responsive layout flags - - responsiveLayoutCollapseStartOpen: true, //start showing collapsed data - - responsiveLayoutCollapseUseFormatters: true, //responsive layout collapse formatter - - responsiveLayoutCollapseFormatter: false, //responsive layout collapse formatter - - - pagination: false, //set pagination type - - paginationSize: false, //set number of rows to a page - - paginationButtonCount: 5, // set count of page button - - paginationElement: false, //element to hold pagination numbers - - paginationDataSent: {}, //pagination data sent to the server - - paginationDataReceived: {}, //pagination data received from the server - - paginationAddRow: "page", //add rows on table or page - - - ajaxURL: false, //url for ajax loading - - ajaxURLGenerator: false, - - ajaxParams: {}, //params for ajax loading - - ajaxConfig: "get", //ajax request type - - ajaxContentType: "form", //ajax request type - - ajaxRequestFunc: false, //promise function - - ajaxLoader: true, //show loader - - ajaxLoaderLoading: false, //loader element - - ajaxLoaderError: false, //loader element - - ajaxFiltering: false, - - ajaxSorting: false, - - ajaxProgressiveLoad: false, //progressive loading - - ajaxProgressiveLoadDelay: 0, //delay between requests - - ajaxProgressiveLoadScrollMargin: 0, //margin before scroll begins - - - groupBy: false, //enable table grouping and set field to group by - - groupStartOpen: true, //starting state of group - - groupValues: false, - - groupHeader: false, //header generation function - - - movableColumns: false, //enable movable columns - - - movableRows: false, //enable movable rows - - movableRowsConnectedTables: false, //tables for movable rows to be connected to - - movableRowsSender: false, - - movableRowsReceiver: "insert", - - movableRowsSendingStart: function movableRowsSendingStart() {}, - - movableRowsSent: function movableRowsSent() {}, - - movableRowsSentFailed: function movableRowsSentFailed() {}, - - movableRowsSendingStop: function movableRowsSendingStop() {}, - - movableRowsReceivingStart: function movableRowsReceivingStart() {}, - - movableRowsReceived: function movableRowsReceived() {}, - - movableRowsReceivedFailed: function movableRowsReceivedFailed() {}, - - movableRowsReceivingStop: function movableRowsReceivingStop() {}, - - scrollToRowPosition: "top", - - scrollToRowIfVisible: true, - - scrollToColumnPosition: "left", - - scrollToColumnIfVisible: true, - - rowFormatter: false, - - placeholder: false, - - //table building callbacks - - tableBuilding: function tableBuilding() {}, - - tableBuilt: function tableBuilt() {}, - - //render callbacks - - renderStarted: function renderStarted() {}, - - renderComplete: function renderComplete() {}, - - //row callbacks - - rowClick: false, - - rowDblClick: false, - - rowContext: false, - - rowTap: false, - - rowDblTap: false, - - rowTapHold: false, - - rowAdded: function rowAdded() {}, - - rowDeleted: function rowDeleted() {}, - - rowMoved: function rowMoved() {}, - - rowUpdated: function rowUpdated() {}, - - rowSelectionChanged: function rowSelectionChanged() {}, - - rowSelected: function rowSelected() {}, - - rowDeselected: function rowDeselected() {}, - - rowResized: function rowResized() {}, - - //cell callbacks - - //row callbacks - - cellClick: false, - - cellDblClick: false, - - cellContext: false, - - cellTap: false, - - cellDblTap: false, - - cellTapHold: false, - - cellEditing: function cellEditing() {}, - - cellEdited: function cellEdited() {}, - - cellEditCancelled: function cellEditCancelled() {}, - - //column callbacks - - columnMoved: false, - - columnResized: function columnResized() {}, - - columnTitleChanged: function columnTitleChanged() {}, - - columnVisibilityChanged: function columnVisibilityChanged() {}, - - //HTML iport callbacks - - htmlImporting: function htmlImporting() {}, - - htmlImported: function htmlImported() {}, - - //data callbacks - - dataLoading: function dataLoading() {}, - - dataLoaded: function dataLoaded() {}, - - dataEdited: function dataEdited() {}, - - //ajax callbacks - - ajaxRequesting: function ajaxRequesting() {}, - - ajaxResponse: false, - - ajaxError: function ajaxError() {}, - - //filtering callbacks - - dataFiltering: false, - - dataFiltered: false, - - //sorting callbacks - - dataSorting: function dataSorting() {}, - - dataSorted: function dataSorted() {}, - - //grouping callbacks - - groupToggleElement: "arrow", - - groupClosedShowCalcs: false, - - dataGrouping: function dataGrouping() {}, - - dataGrouped: false, - - groupVisibilityChanged: function groupVisibilityChanged() {}, - - groupClick: false, - - groupDblClick: false, - - groupContext: false, - - groupTap: false, - - groupDblTap: false, - - groupTapHold: false, - - columnCalcs: true, - - //pagination callbacks - - pageLoaded: function pageLoaded() {}, - - //localization callbacks - - localized: function localized() {}, - - //validation has failed - - validationFailed: function validationFailed() {}, - - //history callbacks - - historyUndo: function historyUndo() {}, - - historyRedo: function historyRedo() {} - - }; - - Tabulator.prototype.initializeOptions = function (options) { - - for (var key in this.defaultOptions) { - - if (key in options) { - - this.options[key] = options[key]; - } else { - - if (Array.isArray(this.defaultOptions[key])) { - - this.options[key] = []; - } else if (_typeof(this.defaultOptions[key]) === "object") { - - this.options[key] = {}; - } else { - - this.options[key] = this.defaultOptions[key]; - } - } - } - }; - - Tabulator.prototype.initializeElement = function (element) { - - if (element instanceof HTMLElement) { - - this.element = element; - - return true; - } else if (typeof element === "string") { - - this.element = document.querySelector(element); - - if (this.element) { - - return true; - } else { - - console.error("Tabulator Creation Error - no element found matching selector: ", element); - - return false; - } - } else { - - console.error("Tabulator Creation Error - Invalid element provided:", element); - - return false; - } - }; - - //convert depricated functionality to new functions - - Tabulator.prototype._mapDepricatedFunctionality = function () {}; - - //concreate table - - Tabulator.prototype._create = function () { - - this._clearObjectPointers(); - - this._mapDepricatedFunctionality(); - - this.bindModules(); - - if (this.element.tagName === "TABLE") { - - if (this.modExists("htmlTableImport", true)) { - - this.modules.htmlTableImport.parseTable(); - } - } - - this.columnManager = new ColumnManager(this); - - this.rowManager = new RowManager(this); - - this.footerManager = new FooterManager(this); - - this.columnManager.setRowManager(this.rowManager); - - this.rowManager.setColumnManager(this.columnManager); - - this._buildElement(); - - this._loadInitialData(); - }; - - //clear pointers to objects in default config object - - Tabulator.prototype._clearObjectPointers = function () { - - this.options.columns = this.options.columns.slice(0); - - this.options.data = this.options.data.slice(0); - }; - - //build tabulator element - - Tabulator.prototype._buildElement = function () { - - var element = this.element, - mod = this.modules, - options = this.options; - - options.tableBuilding.call(this); - - element.classList.add("tabulator"); - - element.setAttribute("role", "grid"); - - //empty element - - while (element.firstChild) { - element.removeChild(element.firstChild); - } //set table height - - if (options.height) { - - options.height = isNaN(options.height) ? options.height : options.height + "px"; - - element.style.height = options.height; - } - - this.rowManager.initialize(); - - this._detectBrowser(); - - if (this.modExists("layout", true)) { - - mod.layout.initialize(options.layout); - } - - //set localization - - if (options.headerFilterPlaceholder !== false) { - - mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder); - } - - for (var locale in options.langs) { - - mod.localize.installLang(locale, options.langs[locale]); - } - - mod.localize.setLocale(options.locale); - - //configure placeholder element - - if (typeof options.placeholder == "string") { - - var el = document.createElement("div"); - - el.classList.add("tabulator-placeholder"); - - var span = document.createElement("span"); - - span.innerHTML = options.placeholder; - - el.appendChild(span); - - options.placeholder = el; - } - - //build table elements - - element.appendChild(this.columnManager.getElement()); - - element.appendChild(this.rowManager.getElement()); - - if (options.footerElement) { - - this.footerManager.activate(); - } - - if (options.dataTree && this.modExists("dataTree", true)) { - - mod.dataTree.initialize(); - } - - if ((options.persistentLayout || options.persistentSort || options.persistentFilter) && this.modExists("persistence", true)) { - - mod.persistence.initialize(options.persistenceMode, options.persistenceID); - } - - if (options.persistentLayout && this.modExists("persistence", true)) { - - options.columns = mod.persistence.load("columns", options.columns); - } - - if (options.movableRows && this.modExists("moveRow")) { - - mod.moveRow.initialize(); - } - - if (this.modExists("columnCalcs")) { - - mod.columnCalcs.initialize(); - } - - this.columnManager.setColumns(options.columns); - - if (this.modExists("frozenRows")) { - - this.modules.frozenRows.initialize(); - } - - if ((options.persistentSort || options.initialSort) && this.modExists("sort", true)) { - - var sorters = []; - - if (options.persistentSort && this.modExists("persistence", true)) { - - sorters = mod.persistence.load("sort"); - - if (sorters === false && options.initialSort) { - - sorters = options.initialSort; - } - } else if (options.initialSort) { - - sorters = options.initialSort; - } - - mod.sort.setSort(sorters); - } - - if ((options.persistentFilter || options.initialFilter) && this.modExists("filter", true)) { - - var filters = []; - - if (options.persistentFilter && this.modExists("persistence", true)) { - - filters = mod.persistence.load("filter"); - - if (filters === false && options.initialFilter) { - - filters = options.initialFilter; - } - } else if (options.initialFilter) { - - filters = options.initialFilter; - } - - mod.filter.setFilter(filters); - - // this.setFilter(filters); - } - - if (this.modExists("ajax")) { - - mod.ajax.initialize(); - } - - if (options.pagination && this.modExists("page", true)) { - - mod.page.initialize(); - } - - if (options.groupBy && this.modExists("groupRows", true)) { - - mod.groupRows.initialize(); - } - - if (this.modExists("keybindings")) { - - mod.keybindings.initialize(); - } - - if (this.modExists("selectRow")) { - - mod.selectRow.clearSelectionData(true); - } - - if (options.autoResize && this.modExists("resizeTable")) { - - mod.resizeTable.initialize(); - } - - if (this.modExists("clipboard")) { - - mod.clipboard.initialize(); - } - - options.tableBuilt.call(this); - }; - - Tabulator.prototype._loadInitialData = function () { - - var self = this; - - if (self.options.pagination && self.modExists("page")) { - - self.modules.page.reset(true); - - if (self.options.pagination == "local") { - - if (self.options.data.length) { - - self.rowManager.setData(self.options.data); - } else { - - if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) { - - self.modules.ajax.loadData(); - } else { - - self.rowManager.setData(self.options.data); - } - } - } else { - - self.modules.page.setPage(1); - } - } else { - - if (self.options.data.length) { - - self.rowManager.setData(self.options.data); - } else { - - if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) { - - self.modules.ajax.loadData(); - } else { - - self.rowManager.setData(self.options.data); - } - } - } - }; - - //deconstructor - - Tabulator.prototype.destroy = function () { - - var element = this.element; - - Tabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication - - - //clear row data - - this.rowManager.rows.forEach(function (row) { - - row.wipe(); - }); - - this.rowManager.rows = []; - - this.rowManager.activeRows = []; - - this.rowManager.displayRows = []; - - //clear event bindings - - if (this.options.autoResize && this.modExists("resizeTable")) { - - this.modules.resizeTable.clearBindings(); - } - - if (this.modExists("keybindings")) { - - this.modules.keybindings.clearBindings(); - } - - //clear DOM - - while (element.firstChild) { - element.removeChild(element.firstChild); - }element.classList.remove("tabulator"); - }; - - Tabulator.prototype._detectBrowser = function () { - - var ua = navigator.userAgent; - - if (ua.indexOf("Trident") > -1) { - - this.browser = "ie"; - - this.browserSlow = true; - } else if (ua.indexOf("Edge") > -1) { - - this.browser = "edge"; - - this.browserSlow = true; - } else if (ua.indexOf("Firefox") > -1) { - - this.browser = "firefox"; - - this.browserSlow = false; - } else { - - this.browser = "other"; - - this.browserSlow = false; - } - }; - - ////////////////// Data Handling ////////////////// - - - //load data - - Tabulator.prototype.setData = function (data, params, config) { - - if (this.modExists("ajax")) { - - this.modules.ajax.blockActiveRequest(); - } - - return this._setData(data, params, config); - }; - - Tabulator.prototype._setData = function (data, params, config, inPosition) { - - var self = this; - - if (typeof data === "string") { - - if (data.indexOf("{") == 0 || data.indexOf("[") == 0) { - - //data is a json encoded string - - return self.rowManager.setData(JSON.parse(data), inPosition); - } else { - - if (self.modExists("ajax", true)) { - - if (params) { - - self.modules.ajax.setParams(params); - } - - if (config) { - - self.modules.ajax.setConfig(config); - } - - self.modules.ajax.setUrl(data); - - if (self.options.pagination == "remote" && self.modExists("page", true)) { - - self.modules.page.reset(true); - - return self.modules.page.setPage(1); - } else { - - //assume data is url, make ajax call to url to get data - - return self.modules.ajax.loadData(inPosition); - } - } - } - } else { - - if (data) { - - //asume data is already an object - - return self.rowManager.setData(data, inPosition); - } else { - - //no data provided, check if ajaxURL is present; - - if (self.modExists("ajax") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)) { - - if (self.options.pagination == "remote" && self.modExists("page", true)) { - - self.modules.page.reset(true); - - return self.modules.page.setPage(1); - } else { - - return self.modules.ajax.loadData(inPosition); - } - } else { - - //empty data - - return self.rowManager.setData([], inPosition); - } - } - } - }; - - //clear data - - Tabulator.prototype.clearData = function () { - - if (this.modExists("ajax")) { - - this.modules.ajax.blockActiveRequest(); - } - - this.rowManager.clearData(); - }; - - //get table data array - - Tabulator.prototype.getData = function (active) { - - return this.rowManager.getData(active); - }; - - //get table data array count - - Tabulator.prototype.getDataCount = function (active) { - - return this.rowManager.getDataCount(active); - }; - - //search for specific row components - - Tabulator.prototype.searchRows = function (field, type, value) { - - if (this.modExists("filter", true)) { - - return this.modules.filter.search("rows", field, type, value); - } - }; - - //search for specific data - - Tabulator.prototype.searchData = function (field, type, value) { - - if (this.modExists("filter", true)) { - - return this.modules.filter.search("data", field, type, value); - } - }; - - //get table html - - Tabulator.prototype.getHtml = function (active) { - - return this.rowManager.getHtml(active); - }; - - //retrieve Ajax URL - - Tabulator.prototype.getAjaxUrl = function () { - - if (this.modExists("ajax", true)) { - - return this.modules.ajax.getUrl(); - } - }; - - //replace data, keeping table in position with same sort - - Tabulator.prototype.replaceData = function (data, params, config) { - - if (this.modExists("ajax")) { - - this.modules.ajax.blockActiveRequest(); - } - - return this._setData(data, params, config, true); - }; - - //update table data - - Tabulator.prototype.updateData = function (data) { - var _this7 = this; - - var self = this; - - var responses = 0; - - return new Promise(function (resolve, reject) { - - if (_this7.modExists("ajax")) { - - _this7.modules.ajax.blockActiveRequest(); - } - - if (typeof data === "string") { - - data = JSON.parse(data); - } - - if (data) { - - data.forEach(function (item) { - - var row = self.rowManager.findRow(item[self.options.index]); - - if (row) { - - responses++; - - row.updateData(item).then(function () { - - responses--; - - if (!responses) { - - resolve(); - } - }); - } - }); - } else { - - console.warn("Update Error - No data provided"); - - reject("Update Error - No data provided"); - } - }); - }; - - Tabulator.prototype.addData = function (data, pos, index) { - var _this8 = this; - - return new Promise(function (resolve, reject) { - - if (_this8.modExists("ajax")) { - - _this8.modules.ajax.blockActiveRequest(); - } - - if (typeof data === "string") { - - data = JSON.parse(data); - } - - if (data) { - - _this8.rowManager.addRows(data, pos, index).then(function (rows) { - - var output = []; - - rows.forEach(function (row) { - - output.push(row.getComponent()); - }); - - resolve(output); - }); - } else { - - console.warn("Update Error - No data provided"); - - reject("Update Error - No data provided"); - } - }); - }; - - //update table data - - Tabulator.prototype.updateOrAddData = function (data) { - var _this9 = this; - - var self = this, - rows = [], - responses = 0; - - return new Promise(function (resolve, reject) { - - if (_this9.modExists("ajax")) { - - _this9.modules.ajax.blockActiveRequest(); - } - - if (typeof data === "string") { - - data = JSON.parse(data); - } - - if (data) { - - data.forEach(function (item) { - - var row = self.rowManager.findRow(item[self.options.index]); - - responses++; - - if (row) { - - row.updateData(item).then(function () { - - responses--; - - rows.push(row.getComponent()); - - if (!responses) { - - resolve(rows); - } - }); - } else { - - self.rowManager.addRows(item).then(function (newRows) { - - responses--; - - rows.push(newRows[0].getComponent()); - - if (!responses) { - - resolve(rows); - } - }); - } - }); - } else { - - console.warn("Update Error - No data provided"); - - reject("Update Error - No data provided"); - } - }); - }; - - //get row object - - Tabulator.prototype.getRow = function (index) { - - var row = this.rowManager.findRow(index); - - if (row) { - - return row.getComponent(); - } else { - - console.warn("Find Error - No matching row found:", index); - - return false; - } - }; - - //get row object - - Tabulator.prototype.getRowFromPosition = function (position, active) { - - var row = this.rowManager.getRowFromPosition(position, active); - - if (row) { - - return row.getComponent(); - } else { - - console.warn("Find Error - No matching row found:", position); - - return false; - } - }; - - //delete row from table - - Tabulator.prototype.deleteRow = function (index) { - var _this10 = this; - - return new Promise(function (resolve, reject) { - - var row = _this10.rowManager.findRow(index); - - if (row) { - - row.delete().then(function () { - - resolve(); - }).catch(function (err) { - - reject(err); - }); - } else { - - console.warn("Delete Error - No matching row found:", index); - - reject("Delete Error - No matching row found"); - } - }); - }; - - //add row to table - - Tabulator.prototype.addRow = function (data, pos, index) { - var _this11 = this; - - return new Promise(function (resolve, reject) { - - if (typeof data === "string") { - - data = JSON.parse(data); - } - - _this11.rowManager.addRows(data, pos, index).then(function (rows) { - - //recalc column calculations if present - - if (_this11.modExists("columnCalcs")) { - - _this11.modules.columnCalcs.recalc(_this11.rowManager.activeRows); - } - - resolve(rows[0].getComponent()); - }); - }); - }; - - //update a row if it exitsts otherwise create it - - Tabulator.prototype.updateOrAddRow = function (index, data) { - var _this12 = this; - - return new Promise(function (resolve, reject) { - - var row = _this12.rowManager.findRow(index); - - if (typeof data === "string") { - - data = JSON.parse(data); - } - - if (row) { - - row.updateData(data).then(function () { - - //recalc column calculations if present - - if (_this12.modExists("columnCalcs")) { - - _this12.modules.columnCalcs.recalc(_this12.rowManager.activeRows); - } - - resolve(row.getComponent()); - }).catch(function (err) { - - reject(err); - }); - } else { - - row = _this12.rowManager.addRows(data).then(function (rows) { - - //recalc column calculations if present - - if (_this12.modExists("columnCalcs")) { - - _this12.modules.columnCalcs.recalc(_this12.rowManager.activeRows); - } - - resolve(rows[0].getComponent()); - }).catch(function (err) { - - reject(err); - }); - } - }); - }; - - //update row data - - Tabulator.prototype.updateRow = function (index, data) { - var _this13 = this; - - return new Promise(function (resolve, reject) { - - var row = _this13.rowManager.findRow(index); - - if (typeof data === "string") { - - data = JSON.parse(data); - } - - if (row) { - - row.updateData(data).then(function () { - - resolve(row.getComponent()); - }).catch(function (err) { - - reject(err); - }); - } else { - - console.warn("Update Error - No matching row found:", index); - - reject("Update Error - No matching row found"); - } - }); - }; - - //scroll to row in DOM - - Tabulator.prototype.scrollToRow = function (index, position, ifVisible) { - var _this14 = this; - - return new Promise(function (resolve, reject) { - - var row = _this14.rowManager.findRow(index); - - if (row) { - - _this14.rowManager.scrollToRow(row, position, ifVisible).then(function () { - - resolve(); - }).catch(function (err) { - - reject(err); - }); - } else { - - console.warn("Scroll Error - No matching row found:", index); - - reject("Scroll Error - No matching row found"); - } - }); - }; - - Tabulator.prototype.getRows = function (active) { - - return this.rowManager.getComponents(active); - }; - - //get position of row in table - - Tabulator.prototype.getRowPosition = function (index, active) { - - var row = this.rowManager.findRow(index); - - if (row) { - - return this.rowManager.getRowPosition(row, active); - } else { - - console.warn("Position Error - No matching row found:", index); - - return false; - } - }; - - //copy table data to clipboard - - Tabulator.prototype.copyToClipboard = function (selector, selectorParams, formatter, formatterParams) { - - if (this.modExists("clipboard", true)) { - - this.modules.clipboard.copy(selector, selectorParams, formatter, formatterParams); - } - }; - - /////////////// Column Functions /////////////// - - - Tabulator.prototype.setColumns = function (definition) { - - this.columnManager.setColumns(definition); - }; - - Tabulator.prototype.getColumns = function (structured) { - - return this.columnManager.getComponents(structured); - }; - - Tabulator.prototype.getColumn = function (field) { - - var col = this.columnManager.findColumn(field); - - if (col) { - - return col.getComponent(); - } else { - - console.warn("Find Error - No matching column found:", field); - - return false; - } - }; - - Tabulator.prototype.getColumnDefinitions = function () { - - return this.columnManager.getDefinitionTree(); - }; - - Tabulator.prototype.getColumnLayout = function () { - - if (this.modExists("persistence", true)) { - - return this.modules.persistence.parseColumns(this.columnManager.getColumns()); - } - }; - - Tabulator.prototype.setColumnLayout = function (layout) { - - if (this.modExists("persistence", true)) { - - this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout)); - - return true; - } - - return false; - }; - - Tabulator.prototype.showColumn = function (field) { - - var column = this.columnManager.findColumn(field); - - if (column) { - - column.show(); - - if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) { - - this.modules.responsiveLayout.update(); - } - } else { - - console.warn("Column Show Error - No matching column found:", field); - - return false; - } - }; - - Tabulator.prototype.hideColumn = function (field) { - - var column = this.columnManager.findColumn(field); - - if (column) { - - column.hide(); - - if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) { - - this.modules.responsiveLayout.update(); - } - } else { - - console.warn("Column Hide Error - No matching column found:", field); - - return false; - } - }; - - Tabulator.prototype.toggleColumn = function (field) { - - var column = this.columnManager.findColumn(field); - - if (column) { - - if (column.visible) { - - column.hide(); - } else { - - column.show(); - } - } else { - - console.warn("Column Visibility Toggle Error - No matching column found:", field); - - return false; - } - }; - - Tabulator.prototype.addColumn = function (definition, before, field) { - - var column = this.columnManager.findColumn(field); - - this.columnManager.addColumn(definition, before, column); - }; - - Tabulator.prototype.deleteColumn = function (field) { - - var column = this.columnManager.findColumn(field); - - if (column) { - - column.delete(); - } else { - - console.warn("Column Delete Error - No matching column found:", field); - - return false; - } - }; - - //scroll to column in DOM - - Tabulator.prototype.scrollToColumn = function (field, position, ifVisible) { - var _this15 = this; - - return new Promise(function (resolve, reject) { - - var column = _this15.columnManager.findColumn(field); - - if (column) { - - _this15.columnManager.scrollToColumn(column, position, ifVisible).then(function () { - - resolve(); - }).catch(function (err) { - - reject(err); - }); - } else { - - console.warn("Scroll Error - No matching column found:", field); - - reject("Scroll Error - No matching column found"); - } - }); - }; - - //////////// Localization Functions //////////// - - Tabulator.prototype.setLocale = function (locale) { - - this.modules.localize.setLocale(locale); - }; - - Tabulator.prototype.getLocale = function () { - - return this.modules.localize.getLocale(); - }; - - Tabulator.prototype.getLang = function (locale) { - - return this.modules.localize.getLang(locale); - }; - - //////////// General Public Functions //////////// - - - //redraw list without updating data - - Tabulator.prototype.redraw = function (force) { - - this.columnManager.redraw(force); - - this.rowManager.redraw(force); - }; - - Tabulator.prototype.setHeight = function (height) { - - this.options.height = isNaN(height) ? height : height + "px"; - - this.element.style.height = this.options.height; - - this.rowManager.redraw(); - }; - - ///////////////////// Sorting //////////////////// - - - //trigger sort - - Tabulator.prototype.setSort = function (sortList, dir) { - - if (this.modExists("sort", true)) { - - this.modules.sort.setSort(sortList, dir); - - this.rowManager.sorterRefresh(); - } - }; - - Tabulator.prototype.getSorters = function () { - - if (this.modExists("sort", true)) { - - return this.modules.sort.getSort(); - } - }; - - Tabulator.prototype.clearSort = function () { - - if (this.modExists("sort", true)) { - - this.modules.sort.clear(); - - this.rowManager.sorterRefresh(); - } - }; - - ///////////////////// Filtering //////////////////// - - - //set standard filters - - Tabulator.prototype.setFilter = function (field, type, value) { - - if (this.modExists("filter", true)) { - - this.modules.filter.setFilter(field, type, value); - - this.rowManager.filterRefresh(); - } - }; - - //add filter to array - - Tabulator.prototype.addFilter = function (field, type, value) { - - if (this.modExists("filter", true)) { - - this.modules.filter.addFilter(field, type, value); - - this.rowManager.filterRefresh(); - } - }; - - //get all filters - - Tabulator.prototype.getFilters = function (all) { - - if (this.modExists("filter", true)) { - - return this.modules.filter.getFilters(all); - } - }; - - Tabulator.prototype.setHeaderFilterFocus = function (field) { - - if (this.modExists("filter", true)) { - - var column = this.columnManager.findColumn(field); - - if (column) { - - this.modules.filter.setHeaderFilterFocus(column); - } else { - - console.warn("Column Filter Focus Error - No matching column found:", field); - - return false; - } - } - }; - - Tabulator.prototype.setHeaderFilterValue = function (field, value) { - - if (this.modExists("filter", true)) { - - var column = this.columnManager.findColumn(field); - - if (column) { - - this.modules.filter.setHeaderFilterValue(column, value); - } else { - - console.warn("Column Filter Error - No matching column found:", field); - - return false; - } - } - }; - - Tabulator.prototype.getHeaderFilters = function () { - - if (this.modExists("filter", true)) { - - return this.modules.filter.getHeaderFilters(); - } - }; - - //remove filter from array - - Tabulator.prototype.removeFilter = function (field, type, value) { - - if (this.modExists("filter", true)) { - - this.modules.filter.removeFilter(field, type, value); - - this.rowManager.filterRefresh(); - } - }; - - //clear filters - - Tabulator.prototype.clearFilter = function (all) { - - if (this.modExists("filter", true)) { - - this.modules.filter.clearFilter(all); - - this.rowManager.filterRefresh(); - } - }; - - //clear header filters - - Tabulator.prototype.clearHeaderFilter = function () { - - if (this.modExists("filter", true)) { - - this.modules.filter.clearHeaderFilter(); - - this.rowManager.filterRefresh(); - } - }; - - ///////////////////// Filtering //////////////////// - - Tabulator.prototype.selectRow = function (rows) { - - if (this.modExists("selectRow", true)) { - - this.modules.selectRow.selectRows(rows); - } - }; - - Tabulator.prototype.deselectRow = function (rows) { - - if (this.modExists("selectRow", true)) { - - this.modules.selectRow.deselectRows(rows); - } - }; - - Tabulator.prototype.toggleSelectRow = function (row) { - - if (this.modExists("selectRow", true)) { - - this.modules.selectRow.toggleRow(row); - } - }; - - Tabulator.prototype.getSelectedRows = function () { - - if (this.modExists("selectRow", true)) { - - return this.modules.selectRow.getSelectedRows(); - } - }; - - Tabulator.prototype.getSelectedData = function () { - - if (this.modExists("selectRow", true)) { - - return this.modules.selectRow.getSelectedData(); - } - }; - - //////////// Pagination Functions //////////// - - - Tabulator.prototype.setMaxPage = function (max) { - - if (this.options.pagination && this.modExists("page")) { - - this.modules.page.setMaxPage(max); - } else { - - return false; - } - }; - - Tabulator.prototype.setPage = function (page) { - - if (this.options.pagination && this.modExists("page")) { - - this.modules.page.setPage(page); - } else { - - return false; - } - }; - - Tabulator.prototype.setPageSize = function (size) { - - if (this.options.pagination && this.modExists("page")) { - - this.modules.page.setPageSize(size); - - this.modules.page.setPage(1); - } else { - - return false; - } - }; - - Tabulator.prototype.getPageSize = function () { - - if (this.options.pagination && this.modExists("page", true)) { - - return this.modules.page.getPageSize(); - } - }; - - Tabulator.prototype.previousPage = function () { - - if (this.options.pagination && this.modExists("page")) { - - this.modules.page.previousPage(); - } else { - - return false; - } - }; - - Tabulator.prototype.nextPage = function () { - - if (this.options.pagination && this.modExists("page")) { - - this.modules.page.nextPage(); - } else { - - return false; - } - }; - - Tabulator.prototype.getPage = function () { - - if (this.options.pagination && this.modExists("page")) { - - return this.modules.page.getPage(); - } else { - - return false; - } - }; - - Tabulator.prototype.getPageMax = function () { - - if (this.options.pagination && this.modExists("page")) { - - return this.modules.page.getPageMax(); - } else { - - return false; - } - }; - - ///////////////// Grouping Functions /////////////// - - - Tabulator.prototype.setGroupBy = function (groups) { - - if (this.modExists("groupRows", true)) { - - this.options.groupBy = groups; - - this.modules.groupRows.initialize(); - - this.rowManager.refreshActiveData("display"); - } else { - - return false; - } - }; - - Tabulator.prototype.setGroupStartOpen = function (values) { - - if (this.modExists("groupRows", true)) { - - this.options.groupStartOpen = values; - - this.modules.groupRows.initialize(); - - if (this.options.groupBy) { - - this.rowManager.refreshActiveData("group"); - } else { - - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } else { - - return false; - } - }; - - Tabulator.prototype.setGroupHeader = function (values) { - - if (this.modExists("groupRows", true)) { - - this.options.groupHeader = values; - - this.modules.groupRows.initialize(); - - if (this.options.groupBy) { - - this.rowManager.refreshActiveData("group"); - } else { - - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } else { - - return false; - } - }; - - Tabulator.prototype.getGroups = function (values) { - - if (this.modExists("groupRows", true)) { - - return this.modules.groupRows.getGroups(true); - } else { - - return false; - } - }; - - // get grouped table data in the same format as getData() - - Tabulator.prototype.getGroupedData = function () { - - if (this.modExists("groupRows", true)) { - - return this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData(); - } - }; - - ///////////////// Column Calculation Functions /////////////// - - Tabulator.prototype.getCalcResults = function () { - - if (this.modExists("columnCalcs", true)) { - - return this.modules.columnCalcs.getResults(); - } else { - - return false; - } - }; - - /////////////// Navigation Management ////////////// - - - Tabulator.prototype.navigatePrev = function () { - - var cell = false; - - if (this.modExists("edit", true)) { - - cell = this.modules.edit.currentCell; - - if (cell) { - - e.preventDefault(); - - return cell.nav().prev(); - } - } - - return false; - }; - - Tabulator.prototype.navigateNext = function () { - - var cell = false; - - if (this.modExists("edit", true)) { - - cell = this.modules.edit.currentCell; - - if (cell) { - - e.preventDefault(); - - return cell.nav().next(); - } - } - - return false; - }; - - Tabulator.prototype.navigateLeft = function () { - - var cell = false; - - if (this.modExists("edit", true)) { - - cell = this.modules.edit.currentCell; - - if (cell) { - - e.preventDefault(); - - return cell.nav().left(); - } - } - - return false; - }; - - Tabulator.prototype.navigateRight = function () { - - var cell = false; - - if (this.modExists("edit", true)) { - - cell = this.modules.edit.currentCell; - - if (cell) { - - e.preventDefault(); - - return cell.nav().right(); - } - } - - return false; - }; - - Tabulator.prototype.navigateUp = function () { - - var cell = false; - - if (this.modExists("edit", true)) { - - cell = this.modules.edit.currentCell; - - if (cell) { - - e.preventDefault(); - - return cell.nav().up(); - } - } - - return false; - }; - - Tabulator.prototype.navigateDown = function () { - - var cell = false; - - if (this.modExists("edit", true)) { - - cell = this.modules.edit.currentCell; - - if (cell) { - - e.preventDefault(); - - return cell.nav().dpwn(); - } - } - - return false; - }; - - /////////////// History Management ////////////// - - Tabulator.prototype.undo = function () { - - if (this.options.history && this.modExists("history", true)) { - - return this.modules.history.undo(); - } else { - - return false; - } - }; - - Tabulator.prototype.redo = function () { - - if (this.options.history && this.modExists("history", true)) { - - return this.modules.history.redo(); - } else { - - return false; - } - }; - - Tabulator.prototype.getHistoryUndoSize = function () { - - if (this.options.history && this.modExists("history", true)) { - - return this.modules.history.getHistoryUndoSize(); - } else { - - return false; - } - }; - - Tabulator.prototype.getHistoryRedoSize = function () { - - if (this.options.history && this.modExists("history", true)) { - - return this.modules.history.getHistoryRedoSize(); - } else { - - return false; - } - }; - - /////////////// Download Management ////////////// - - - Tabulator.prototype.download = function (type, filename, options) { - - if (this.modExists("download", true)) { - - this.modules.download.download(type, filename, options); - } - }; - - /////////// Inter Table Communications /////////// - - - Tabulator.prototype.tableComms = function (table, module, action, data) { - - this.modules.comms.receive(table, module, action, data); - }; - - ////////////// Extension Management ////////////// - - - //object to hold module - - Tabulator.prototype.moduleBindings = {}; - - //extend module - - Tabulator.prototype.extendModule = function (name, property, values) { - - if (Tabulator.prototype.moduleBindings[name]) { - - var source = Tabulator.prototype.moduleBindings[name].prototype[property]; - - if (source) { - - if ((typeof values === 'undefined' ? 'undefined' : _typeof(values)) == "object") { - - for (var key in values) { - - source[key] = values[key]; - } - } else { - - console.warn("Module Error - Invalid value type, it must be an object"); - } - } else { - - console.warn("Module Error - property does not exist:", property); - } - } else { - - console.warn("Module Error - module does not exist:", name); - } - }; - - //add module to tabulator - - Tabulator.prototype.registerModule = function (name, module) { - - var self = this; - - Tabulator.prototype.moduleBindings[name] = module; - }; - - //ensure that module are bound to instantiated function - - Tabulator.prototype.bindModules = function () { - - this.modules = {}; - - for (var name in Tabulator.prototype.moduleBindings) { - - this.modules[name] = new Tabulator.prototype.moduleBindings[name](this); - } - }; - - //Check for module - - Tabulator.prototype.modExists = function (plugin, required) { - - if (this.modules[plugin]) { - - return true; - } else { - - if (required) { - - console.error("Tabulator Module Not Installed: " + plugin); - } - - return false; - } - }; - - Tabulator.prototype.helpers = { - - elVisible: function elVisible(el) { - - return !(el.offsetWidth <= 0 && el.offsetHeight <= 0); - }, - - elOffset: function elOffset(el) { - - var box = el.getBoundingClientRect(); - - return { - - top: box.top + window.pageYOffset - document.documentElement.clientTop, - - left: box.left + window.pageXOffset - document.documentElement.clientLeft - - }; - }, - - deepClone: function deepClone(obj) { - - var clone = Array.isArray(obj) ? [] : {}; - - for (var i in obj) { - - if (obj[i] != null && _typeof(obj[i]) === "object") { - - if (obj[i] instanceof Date) { - - clone[i] = new Date(obj[i]); - } else { - - clone[i] = this.deepClone(obj[i]); - } - } else { - - clone[i] = obj[i]; - } - } - - return clone; - } - - }; - - Tabulator.prototype.comms = { - - tables: [], - - register: function register(table) { - - Tabulator.prototype.comms.tables.push(table); - }, - - deregister: function deregister(table) { - - var index = Tabulator.prototype.comms.tables.indexOf(table); - - if (index > -1) { - - Tabulator.prototype.comms.tables.splice(index, 1); - } - }, - - lookupTable: function lookupTable(query) { - - var results = [], - matches, - match; - - if (typeof query === "string") { - - matches = document.querySelectorAll(query); - - if (matches.length) { - - for (var i = 0; i < matches.length; i++) { - - match = Tabulator.prototype.comms.matchElement(matches[i]); - - if (match) { - - results.push(match); - } - } - } - } else if (query instanceof HTMLElement || query instanceof Tabulator) { - - match = Tabulator.prototype.comms.matchElement(query); - - if (match) { - - results.push(match); - } - } else if (Array.isArray(query)) { - - query.forEach(function (item) { - - results = results.concat(Tabulator.prototype.comms.lookupTable(item)); - }); - } else { - - console.warn("Table Connection Error - Invalid Selector", query); - } - - return results; - }, - - matchElement: function matchElement(element) { - - return Tabulator.prototype.comms.tables.find(function (table) { - - return element instanceof Tabulator ? table === element : table.element === element; - }); - } - - }; - - var Layout = function Layout(table) { - - this.table = table; - - this.mode = null; - }; - - //initialize layout system - - - Layout.prototype.initialize = function (layout) { - - if (this.modes[layout]) { - - this.mode = layout; - } else { - - console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout); - - this.mode = 'fitData'; - } - - this.table.element.setAttribute("tabulator-layout", this.mode); - }; - - Layout.prototype.getMode = function () { - - return this.mode; - }; - - //trigger table layout - - - Layout.prototype.layout = function () { - - this.modes[this.mode].call(this, this.table.columnManager.columnsByIndex); - }; - - //layout render functions - - - Layout.prototype.modes = { - - //resize columns to fit data the contain - - - "fitData": function fitData(columns) { - - columns.forEach(function (column) { - - column.reinitializeWidth(); - }); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - }, - - //resize columns to fit data the contain - - - "fitDataFill": function fitDataFill(columns) { - - columns.forEach(function (column) { - - column.reinitializeWidth(); - }); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - }, - - //resize columns to fit - - - "fitColumns": function fitColumns(columns) { - - var self = this; - - var totalWidth = self.table.element.clientWidth; //table element width - - - var fixedWidth = 0; //total width of columns with a defined width - - - var flexWidth = 0; //total width available to flexible columns - - - var flexGrowUnits = 0; //total number of widthGrow blocks accross all columns - - - var flexColWidth = 0; //desired width of flexible columns - - - var flexColumns = []; //array of flexible width columns - - - var fixedShrinkColumns = []; //array of fixed width columns that can shrink - - - var flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns - - - var overflowWidth = 0; //horizontal overflow width - - - var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps - - - function calcWidth(width) { - - var colWidth; - - if (typeof width == "string") { - - if (width.indexOf("%") > -1) { - - colWidth = totalWidth / 100 * parseInt(width); - } else { - - colWidth = parseInt(width); - } - } else { - - colWidth = width; - } - - return colWidth; - } - - //ensure columns resize to take up the correct amount of space - - - function scaleColumns(columns, freeSpace, colWidth, shrinkCols) { - - var oversizeCols = [], - oversizeSpace = 0, - remainingSpace = 0, - nextColWidth = 0, - gap = 0, - changeUnits = 0, - undersizeCols = []; - - function calcGrow(col) { - - return colWidth * (col.column.definition.widthGrow || 1); - } - - function calcShrink(col) { - - return calcWidth(col.width) - colWidth * (col.column.definition.widthShrink || 0); - } - - columns.forEach(function (col, i) { - - var width = shrinkCols ? calcShrink(col) : calcGrow(col); - - if (col.column.minWidth >= width) { - - oversizeCols.push(col); - } else { - - undersizeCols.push(col); - - changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1; - } - }); - - if (oversizeCols.length) { - - oversizeCols.forEach(function (col) { - - oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth; - - col.width = col.column.minWidth; - }); - - remainingSpace = freeSpace - oversizeSpace; - - nextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace; - - gap = remainingSpace - nextColWidth * changeUnits; - - gap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols); - } else { - - gap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace; - - undersizeCols.forEach(function (column) { - - column.width = shrinkCols ? calcShrink(column) : calcGrow(column); - }); - } - - return gap; - } - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - - //adjust for vertical scrollbar if present - - - if (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) { - - totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth; - } - - columns.forEach(function (column) { - - var width, minWidth, colWidth; - - if (column.visible) { - - width = column.definition.width; - - minWidth = parseInt(column.minWidth); - - if (width) { - - colWidth = calcWidth(width); - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - - if (column.definition.widthShrink) { - - fixedShrinkColumns.push({ - - column: column, - - width: colWidth > minWidth ? colWidth : minWidth - - }); - - flexShrinkUnits += column.definition.widthShrink; - } - } else { - - flexColumns.push({ - - column: column, - - width: 0 - - }); - - flexGrowUnits += column.definition.widthGrow || 1; - } - } - }); - - //calculate available space - - - flexWidth = totalWidth - fixedWidth; - - //calculate correct column size - - - flexColWidth = Math.floor(flexWidth / flexGrowUnits); - - //generate column widths - - - var gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false); - - //increase width of last column to account for rounding errors - - - if (flexColumns.length && gapFill > 0) { - - flexColumns[flexColumns.length - 1].width += +gapFill; - } - - //caculate space for columns to be shrunk into - - - flexColumns.forEach(function (col) { - - flexWidth -= col.width; - }); - - overflowWidth = Math.abs(gapFill) + flexWidth; - - //shrink oversize columns if there is no available space - - - if (overflowWidth > 0 && flexShrinkUnits) { - - gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true); - } - - //decrease width of last column to account for rounding errors - - - if (fixedShrinkColumns.length) { - - fixedShrinkColumns[fixedShrinkColumns.length - 1].width -= gapFill; - } - - flexColumns.forEach(function (col) { - - col.column.setWidth(col.width); - }); - - fixedShrinkColumns.forEach(function (col) { - - col.column.setWidth(col.width); - }); - } - - }; - - Tabulator.prototype.registerModule("layout", Layout); - - var Localize = function Localize(table) { - - this.table = table; //hold Tabulator object - - this.locale = "default"; //current locale - - this.lang = false; //current language - - this.bindings = {}; //update events to call when locale is changed - }; - - //set header placehoder - - Localize.prototype.setHeaderFilterPlaceholder = function (placeholder) { - - this.langs.default.headerFilters.default = placeholder; - }; - - //set header filter placeholder by column - - Localize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) { - - this.langs.default.headerFilters.columns[column] = placeholder; - - if (this.lang && !this.lang.headerFilters.columns[column]) { - - this.lang.headerFilters.columns[column] = placeholder; - } - }; - - //setup a lang description object - - Localize.prototype.installLang = function (locale, lang) { - - if (this.langs[locale]) { - - this._setLangProp(this.langs[locale], lang); - } else { - - this.langs[locale] = lang; - } - }; - - Localize.prototype._setLangProp = function (lang, values) { - - for (var key in values) { - - if (lang[key] && _typeof(lang[key]) == "object") { - - this._setLangProp(lang[key], values[key]); - } else { - - lang[key] = values[key]; - } - } - }; - - //set current locale - - Localize.prototype.setLocale = function (desiredLocale) { - - var self = this; - - desiredLocale = desiredLocale || "default"; - - //fill in any matching languge values - - function traverseLang(trans, path) { - - for (var prop in trans) { - - if (_typeof(trans[prop]) == "object") { - - if (!path[prop]) { - - path[prop] = {}; - } - - traverseLang(trans[prop], path[prop]); - } else { - - path[prop] = trans[prop]; - } - } - } - - //determing correct locale to load - - if (desiredLocale === true && navigator.language) { - - //get local from system - - desiredLocale = navigator.language.toLowerCase(); - } - - if (desiredLocale) { - - //if locale is not set, check for matching top level locale else use default - - if (!self.langs[desiredLocale]) { - - var prefix = desiredLocale.split("-")[0]; - - if (self.langs[prefix]) { - - console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix); - - desiredLocale = prefix; - } else { - - console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale); - - desiredLocale = "default"; - } - } - } - - self.locale = desiredLocale; - - //load default lang template - - self.lang = Tabulator.prototype.helpers.deepClone(self.langs.default || {}); - - if (desiredLocale != "default") { - - traverseLang(self.langs[desiredLocale], self.lang); - } - - self.table.options.localized.call(self.table, self.locale, self.lang); - - self._executeBindings(); - }; - - //get current locale - - Localize.prototype.getLocale = function (locale) { - - return self.locale; - }; - - //get lang object for given local or current if none provided - - Localize.prototype.getLang = function (locale) { - - return locale ? this.langs[locale] : this.lang; - }; - - //get text for current locale - - Localize.prototype.getText = function (path, value) { - - var path = value ? path + "|" + value : path, - pathArray = path.split("|"), - text = this._getLangElement(pathArray, this.locale); - - // if(text === false){ - - // console.warn("Localization Error - Matching localized text not found for given path: ", path); - - // } - - - return text || ""; - }; - - //traverse langs object and find localized copy - - Localize.prototype._getLangElement = function (path, locale) { - - var self = this; - - var root = self.lang; - - path.forEach(function (level) { - - var rootPath; - - if (root) { - - rootPath = root[level]; - - if (typeof rootPath != "undefined") { - - root = rootPath; - } else { - - root = false; - } - } - }); - - return root; - }; - - //set update binding - - Localize.prototype.bind = function (path, callback) { - - if (!this.bindings[path]) { - - this.bindings[path] = []; - } - - this.bindings[path].push(callback); - - callback(this.getText(path), this.lang); - }; - - //itterate through bindings and trigger updates - - Localize.prototype._executeBindings = function () { - - var self = this; - - var _loop = function _loop(path) { - - self.bindings[path].forEach(function (binding) { - - binding(self.getText(path), self.lang); - }); - }; - - for (var path in self.bindings) { - _loop(path); - } - }; - - //Localized text listings - - Localize.prototype.langs = { - - "default": { //hold default locale text - - "groups": { - - "item": "item", - - "items": "items" - - }, - - "columns": {}, - - "ajax": { - - "loading": "Loading", - - "error": "Error" - - }, - - "pagination": { - - "first": "First", - - "first_title": "First Page", - - "last": "Last", - - "last_title": "Last Page", - - "prev": "Prev", - - "prev_title": "Prev Page", - - "next": "Next", - - "next_title": "Next Page" - - }, - - "headerFilters": { - - "default": "filter column...", - - "columns": {} - - } - - } - - }; - - Tabulator.prototype.registerModule("localize", Localize); - - var Comms = function Comms(table) { - - this.table = table; - }; - - Comms.prototype.getConnections = function (selectors) { - - var self = this, - connections = [], - connection; - - connection = Tabulator.prototype.comms.lookupTable(selectors); - - connection.forEach(function (con) { - - if (self.table !== con) { - - connections.push(con); - } - }); - - return connections; - }; - - Comms.prototype.send = function (selectors, module, action, data) { - - var self = this, - connections = this.getConnections(selectors); - - connections.forEach(function (connection) { - - connection.tableComms(self.table.element, module, action, data); - }); - - if (!connections.length && selectors) { - - console.warn("Table Connection Error - No tables matching selector found", selectors); - } - }; - - Comms.prototype.receive = function (table, module, action, data) { - - if (this.table.modExists(module)) { - - return this.table.modules[module].commsReceived(table, action, data); - } else { - - console.warn("Inter-table Comms Error - no such module:", module); - } - }; - - Tabulator.prototype.registerModule("comms", Comms); - - var Accessor = function Accessor(table) { - this.table = table; //hold Tabulator object - this.allowedTypes = ["", "data", "download", "clipboard"]; //list of accessor types - }; - - //initialize column accessor - Accessor.prototype.initializeColumn = function (column) { - var self = this, - match = false, - config = {}; - - this.allowedTypes.forEach(function (type) { - var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), - accessor; - - if (column.definition[key]) { - accessor = self.lookupAccessor(column.definition[key]); - - if (accessor) { - match = true; - - config[key] = { - accessor: accessor, - params: column.definition[key + "Params"] || {} - }; - } - } - }); - - if (match) { - column.modules.accessor = config; - } - }, Accessor.prototype.lookupAccessor = function (value) { - var accessor = false; - - //set column accessor - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - case "string": - if (this.accessors[value]) { - accessor = this.accessors[value]; - } else { - console.warn("Accessor Error - No such accessor found, ignoring: ", value); - } - break; - - case "function": - accessor = value; - break; - } - - return accessor; - }; - - //apply accessor to row - Accessor.prototype.transformRow = function (dataIn, type) { - var self = this, - key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)); - - //clone data object with deep copy to isolate internal data from returned result - var data = Tabulator.prototype.helpers.deepClone(dataIn || {}); - - self.table.columnManager.traverse(function (column) { - var value, accessor, params, component; - - if (column.modules.accessor) { - - accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false; - - if (accessor) { - value = column.getFieldValue(data); - - if (value != "undefined") { - component = column.getComponent(); - params = typeof accessor.params === "function" ? accessor.params(value, data, type, component) : accessor.params; - column.setFieldValue(data, accessor.accessor(value, data, type, params, component)); - } - } - } - }); - - return data; - }, - - //default accessors - Accessor.prototype.accessors = {}; - - Tabulator.prototype.registerModule("accessor", Accessor); - var Ajax = function Ajax(table) { - - this.table = table; //hold Tabulator object - this.config = false; //hold config object for ajax request - this.url = ""; //request URL - this.urlGenerator = false; - this.params = false; //request parameters - - this.loaderElement = this.createLoaderElement(); //loader message div - this.msgElement = this.createMsgElement(); //message element - this.loadingElement = false; - this.errorElement = false; - this.loaderPromise = false; - - this.progressiveLoad = false; - this.loading = false; - - this.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request - }; - - //initialize setup options - Ajax.prototype.initialize = function () { - this.loaderElement.appendChild(this.msgElement); - - if (this.table.options.ajaxLoaderLoading) { - this.loadingElement = this.table.options.ajaxLoaderLoading; - } - - this.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise; - - this.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator; - - if (this.table.options.ajaxLoaderError) { - this.errorElement = this.table.options.ajaxLoaderError; - } - - if (this.table.options.ajaxParams) { - this.setParams(this.table.options.ajaxParams); - } - - if (this.table.options.ajaxConfig) { - this.setConfig(this.table.options.ajaxConfig); - } - - if (this.table.options.ajaxURL) { - this.setUrl(this.table.options.ajaxURL); - } - - if (this.table.options.ajaxProgressiveLoad) { - if (this.table.options.pagination) { - this.progressiveLoad = false; - console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"); - } else { - if (this.table.modExists("page")) { - this.progressiveLoad = this.table.options.ajaxProgressiveLoad; - this.table.modules.page.initializeProgressive(this.progressiveLoad); - } else { - console.error("Pagination plugin is required for progressive ajax loading"); - } - } - } - }; - - Ajax.prototype.createLoaderElement = function () { - var el = document.createElement("div"); - el.classList.add("tabulator-loader"); - return el; - }; - - Ajax.prototype.createMsgElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-loader-msg"); - el.setAttribute("role", "alert"); - - return el; - }; - - //set ajax params - Ajax.prototype.setParams = function (params, update) { - if (update) { - this.params = this.params || {}; - - for (var key in params) { - this.params[key] = params[key]; - } - } else { - this.params = params; - } - }; - - Ajax.prototype.getParams = function () { - return this.params || {}; - }; - - //load config object - Ajax.prototype.setConfig = function (config) { - this._loadDefaultConfig(); - - if (typeof config == "string") { - this.config.method = config; - } else { - for (var key in config) { - this.config[key] = config[key]; - } - } - }; - - //create config object from default - Ajax.prototype._loadDefaultConfig = function (force) { - var self = this; - if (!self.config || force) { - - self.config = {}; - - //load base config from defaults - for (var key in self.defaultConfig) { - self.config[key] = self.defaultConfig[key]; - } - } - }; - - //set request url - Ajax.prototype.setUrl = function (url) { - this.url = url; - }; - - //get request url - Ajax.prototype.getUrl = function () { - return this.url; - }; - - //lstandard loading function - Ajax.prototype.loadData = function (inPosition) { - var self = this; - - if (this.progressiveLoad) { - return this._loadDataProgressive(); - } else { - return this._loadDataStandard(inPosition); - } - }; - - Ajax.prototype.nextPage = function (diff) { - var margin; - - if (!this.loading) { - - margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.getElement().clientHeight * 2; - - if (diff < margin) { - this.table.modules.page.nextPage().then(function () {}).catch(function () {}); - } - } - }; - - Ajax.prototype.blockActiveRequest = function () { - this.requestOrder++; - }; - - Ajax.prototype._loadDataProgressive = function () { - this.table.rowManager.setData([]); - return this.table.modules.page.setPage(1); - }; - - Ajax.prototype._loadDataStandard = function (inPosition) { - var _this16 = this; - - return new Promise(function (resolve, reject) { - _this16.sendRequest(inPosition).then(function (data) { - _this16.table.rowManager.setData(data, inPosition); - resolve(); - }).catch(function (e) { - reject(); - }); - }); - }; - - Ajax.prototype.generateParamsList = function (data, prefix) { - var self = this, - output = []; - - prefix = prefix || ""; - - if (Array.isArray(data)) { - data.forEach(function (item, i) { - output = output.concat(self.generateParamsList(item, prefix ? prefix + "[" + i + "]" : i)); - }); - } else if ((typeof data === 'undefined' ? 'undefined' : _typeof(data)) === "object") { - for (var key in data) { - output = output.concat(self.generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key)); - } - } else { - output.push({ key: prefix, value: data }); - } - - return output; - }; - - Ajax.prototype.serializeParams = function (params) { - var output = this.generateParamsList(params), - encoded = []; - - output.forEach(function (item) { - encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value)); - }); - - return encoded.join("&"); - }; - - //send ajax request - Ajax.prototype.sendRequest = function (silent) { - var _this17 = this; - - var self = this, - url = self.url, - requestNo, - esc, - query; - - self.requestOrder++; - requestNo = self.requestOrder; - - self._loadDefaultConfig(); - - return new Promise(function (resolve, reject) { - if (self.table.options.ajaxRequesting.call(_this17.table, self.url, self.params) !== false) { - - self.loading = true; - - if (!silent) { - self.showLoader(); - } - - _this17.loaderPromise(url, self.config, self.params).then(function (data) { - if (requestNo === self.requestOrder) { - if (self.table.options.ajaxResponse) { - data = self.table.options.ajaxResponse.call(self.table, self.url, self.params, data); - } - resolve(data); - } else { - console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made"); - } - - self.hideLoader(); - - self.loading = false; - }).catch(function (error) { - console.error("Ajax Load Error: ", error); - self.table.options.ajaxError.call(self.table, error); - - self.showError(); - - setTimeout(function () { - self.hideLoader(); - }, 3000); - - self.loading = false; - - reject(); - }); - } else { - reject(); - } - }); - }; - - Ajax.prototype.showLoader = function () { - var shouldLoad = typeof this.table.options.ajaxLoader === "function" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader; - - if (shouldLoad) { - - this.hideLoader(); - - while (this.msgElement.firstChild) { - this.msgElement.removeChild(this.msgElement.firstChild); - }this.msgElement.classList.remove("tabulator-error"); - this.msgElement.classList.add("tabulator-loading"); - - if (this.loadingElement) { - this.msgElement.appendChild(this.loadingElement); - } else { - this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|loading"); - } - - this.table.element.appendChild(this.loaderElement); - } - }; - - Ajax.prototype.showError = function () { - this.hideLoader(); - - while (this.msgElement.firstChild) { - this.msgElement.removeChild(this.msgElement.firstChild); - }this.msgElement.classList.remove("tabulator-loading"); - this.msgElement.classList.add("tabulator-error"); - - if (this.errorElement) { - this.msgElement.appendChild(this.errorElement); - } else { - this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|error"); - } - - this.table.element.appendChild(this.loaderElement); - }; - - Ajax.prototype.hideLoader = function () { - if (this.loaderElement.parentNode) { - this.loaderElement.parentNode.removeChild(this.loaderElement); - } - }; - - //default ajax config object - Ajax.prototype.defaultConfig = { - method: "GET" - }; - - Ajax.prototype.defaultURLGenerator = function (url, config, params) { - if (params && Object.keys(params).length) { - if (!config.method || config.method.toLowerCase() == "get") { - config.method = "get"; - url += "?" + this.serializeParams(params); - } - } - - return url; - }; - - Ajax.prototype.defaultLoaderPromise = function (url, config, params) { - var self = this, - contentType; - - return new Promise(function (resolve, reject) { - - //set url - url = self.urlGenerator(url, config, params); - - //set body content if not GET request - if (config.method != "get") { - contentType = _typeof(self.table.options.ajaxContentType) === "object" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType]; - if (contentType) { - - for (var key in contentType.headers) { - if (!config.headers) { - config.headers = {}; - } - - if (typeof config.headers[key] === "undefined") { - config.headers[key] = contentType.headers[key]; - } - } - - config.body = contentType.body.call(self, url, config, params); - } else { - console.warn("Ajax Error - Invalid ajaxContentType value:", self.table.options.ajaxContentType); - } - } - - if (url) { - - //configure headers - if (typeof config.credentials === "undefined") { - config.credentials = 'include'; - } - - if (typeof config.headers === "undefined") { - config.headers = {}; - } - - if (typeof config.headers.Accept === "undefined") { - config.headers.Accept = "application/json"; - } - - if (typeof config.headers["X-Requested-With"] === "undefined") { - config.headers["X-Requested-With"] = "XMLHttpRequest"; - } - - //send request - fetch(url, config).then(function (response) { - if (response.ok) { - response.json().then(function (data) { - resolve(data); - }).catch(function (error) { - reject(error); - console.warn("Ajax Load Error - Invalid JSON returned", error); - }); - } else { - console.error("Ajax Load Error - Connection Error: " + response.status, response.statusText); - reject(response); - } - }).catch(function (error) { - console.error("Ajax Load Error - Connection Error: ", error); - reject(error); - }); - } else { - reject("No URL Set"); - } - }); - }; - - Ajax.prototype.contentTypeFormatters = { - "json": { - headers: { - 'Content-Type': 'application/json' - }, - body: function body(url, config, params) { - return JSON.stringify(params); - } - }, - "form": { - headers: {}, - body: function body(url, config, params) { - var output = this.generateParamsList(params), - form = new FormData(); - - output.forEach(function (item) { - form.append(item.key, item.value); - }); - - return form; - } - } - }; - - Tabulator.prototype.registerModule("ajax", Ajax); - var ColumnCalcs = function ColumnCalcs(table) { - this.table = table; //hold Tabulator object - this.topCalcs = []; - this.botCalcs = []; - this.genColumn = false; - this.topElement = this.createElement(); - this.botElement = this.createElement(); - this.topRow = false; - this.botRow = false; - this.topInitialized = false; - this.botInitialized = false; - - this.initialize(); - }; - - ColumnCalcs.prototype.createElement = function () { - var el = document.createElement("div"); - el.classList.add("tabulator-calcs-holder"); - return el; - }; - - ColumnCalcs.prototype.initialize = function () { - this.genColumn = new Column({ field: "value" }, this); - }; - - //dummy functions to handle being mock column manager - ColumnCalcs.prototype.registerColumnField = function () {}; - - //initialize column calcs - ColumnCalcs.prototype.initializeColumn = function (column) { - var def = column.definition; - - var config = { - topCalcParams: def.topCalcParams || {}, - botCalcParams: def.bottomCalcParams || {} - }; - - if (def.topCalc) { - - switch (_typeof(def.topCalc)) { - case "string": - if (this.calculations[def.topCalc]) { - config.topCalc = this.calculations[def.topCalc]; - } else { - console.warn("Column Calc Error - No such calculation found, ignoring: ", def.topCalc); - } - break; - - case "function": - config.topCalc = def.topCalc; - break; - - } - - if (config.topCalc) { - column.modules.columnCalcs = config; - this.topCalcs.push(column); - - if (this.table.options.columnCalcs != "group") { - this.initializeTopRow(); - } - } - } - - if (def.bottomCalc) { - switch (_typeof(def.bottomCalc)) { - case "string": - if (this.calculations[def.bottomCalc]) { - config.botCalc = this.calculations[def.bottomCalc]; - } else { - console.warn("Column Calc Error - No such calculation found, ignoring: ", def.bottomCalc); - } - break; - - case "function": - config.botCalc = def.bottomCalc; - break; - - } - - if (config.botCalc) { - column.modules.columnCalcs = config; - this.botCalcs.push(column); - - if (this.table.options.columnCalcs != "group") { - this.initializeBottomRow(); - } - } - } - }; - - ColumnCalcs.prototype.removeCalcs = function () { - var changed = false; - - if (this.topInitialized) { - this.topInitialized = false; - this.topElement.parentNode.removeChild(this.topElement); - changed = true; - } - - if (this.botInitialized) { - this.botInitialized = false; - this.table.footerManager.remove(this.botElement); - changed = true; - } - - if (changed) { - this.table.rowManager.adjustTableSize(); - } - }; - - ColumnCalcs.prototype.initializeTopRow = function () { - if (!this.topInitialized) { - // this.table.columnManager.headersElement.after(this.topElement); - this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling); - this.topInitialized = true; - } - }; - - ColumnCalcs.prototype.initializeBottomRow = function () { - if (!this.botInitialized) { - this.table.footerManager.prepend(this.botElement); - this.botInitialized = true; - } - }; - - ColumnCalcs.prototype.scrollHorizontal = function (left) { - var hozAdjust = 0, - scrollWidth = this.table.columnManager.getElement().scrollWidth - this.table.element.clientWidth; - - if (this.botInitialized) { - this.botRow.getElement().style.marginLeft = -left + "px"; - } - }; - - ColumnCalcs.prototype.recalc = function (rows) { - var data, row; - - if (this.topInitialized || this.botInitialized) { - data = this.rowsToData(rows); - - if (this.topInitialized) { - row = this.generateRow("top", this.rowsToData(rows)); - this.topRow = row; - while (this.topElement.firstChild) { - this.topElement.removeChild(this.topElement.firstChild); - }this.topElement.appendChild(row.getElement()); - row.initialize(true); - } - - if (this.botInitialized) { - row = this.generateRow("bottom", this.rowsToData(rows)); - this.botRow = row; - while (this.botElement.firstChild) { - this.botElement.removeChild(this.botElement.firstChild); - }this.botElement.appendChild(row.getElement()); - row.initialize(true); - } - - this.table.rowManager.adjustTableSize(); - - //set resizable handles - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.layout(); - } - } - }; - - ColumnCalcs.prototype.recalcRowGroup = function (row) { - this.recalcGroup(this.table.modules.groupRows.getRowGroup(row)); - }; - - ColumnCalcs.prototype.recalcGroup = function (group) { - var data, rowData; - - if (group) { - if (group.calcs) { - if (group.calcs.bottom) { - data = this.rowsToData(group.rows); - rowData = this.generateRowData("bottom", data); - - group.calcs.bottom.updateData(rowData); - group.calcs.bottom.reinitialize(); - } - - if (group.calcs.top) { - data = this.rowsToData(group.rows); - rowData = this.generateRowData("top", data); - - group.calcs.top.updateData(rowData); - group.calcs.top.reinitialize(); - } - } - } - }; - - //generate top stats row - ColumnCalcs.prototype.generateTopRow = function (rows) { - return this.generateRow("top", this.rowsToData(rows)); - }; - //generate bottom stats row - ColumnCalcs.prototype.generateBottomRow = function (rows) { - return this.generateRow("bottom", this.rowsToData(rows)); - }; - - ColumnCalcs.prototype.rowsToData = function (rows) { - var data = []; - - rows.forEach(function (row) { - data.push(row.getData()); - }); - - return data; - }; - - //generate stats row - ColumnCalcs.prototype.generateRow = function (pos, data) { - var self = this, - rowData = this.generateRowData(pos, data), - row; - - if (self.table.modExists("mutator")) { - self.table.modules.mutator.disable(); - } - - row = new Row(rowData, this); - - if (self.table.modExists("mutator")) { - self.table.modules.mutator.enable(); - } - - row.getElement().classList.add("tabulator-calcs", "tabulator-calcs-" + pos); - row.type = "calc"; - - row.generateCells = function () { - - var cells = []; - - self.table.columnManager.columnsByIndex.forEach(function (column) { - - if (column.visible) { - //set field name of mock column - self.genColumn.setField(column.getField()); - self.genColumn.hozAlign = column.hozAlign; - - if (column.definition[pos + "CalcFormatter"] && self.table.modExists("format")) { - - self.genColumn.modules.format = { - formatter: self.table.modules.format.getFormatter(column.definition[pos + "CalcFormatter"]), - params: column.definition[pos + "CalcFormatterParams"] - }; - } else { - self.genColumn.modules.format = { - formatter: self.table.modules.format.getFormatter("plaintext"), - params: {} - }; - } - - //generate cell and assign to correct column - var cell = new Cell(self.genColumn, row); - cell.column = column; - cell.setWidth(column.width); - - column.cells.push(cell); - cells.push(cell); - } - }); - - this.cells = cells; - }; - - return row; - }; - - //generate stats row - ColumnCalcs.prototype.generateRowData = function (pos, data) { - var rowData = {}, - calcs = pos == "top" ? this.topCalcs : this.botCalcs, - type = pos == "top" ? "topCalc" : "botCalc", - params, - paramKey; - - calcs.forEach(function (column) { - var values = []; - - if (column.modules.columnCalcs && column.modules.columnCalcs[type]) { - data.forEach(function (item) { - values.push(column.getFieldValue(item)); - }); - - paramKey = type + "Params"; - params = typeof column.modules.columnCalcs[paramKey] === "function" ? column.modules.columnCalcs[paramKey](value, data) : column.modules.columnCalcs[paramKey]; - - column.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params)); - } - }); - - return rowData; - }; - - ColumnCalcs.prototype.hasTopCalcs = function () { - return !!this.topCalcs.length; - }, ColumnCalcs.prototype.hasBottomCalcs = function () { - return !!this.botCalcs.length; - }, - - //handle table redraw - ColumnCalcs.prototype.redraw = function () { - if (this.topRow) { - this.topRow.normalizeHeight(true); - } - if (this.botRow) { - this.botRow.normalizeHeight(true); - } - }; - - //return the calculated - ColumnCalcs.prototype.getResults = function () { - var self = this, - results = {}, - groups; - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - groups = this.table.modules.groupRows.getGroups(true); - - groups.forEach(function (group) { - results[group.getKey()] = self.getGroupResults(group); - }); - } else { - results = { - top: this.topRow ? this.topRow.getData() : {}, - bottom: this.botRow ? this.botRow.getData() : {} - }; - } - - return results; - }; - - //get results from a group - ColumnCalcs.prototype.getGroupResults = function (group) { - var self = this, - groupObj = group._getSelf(), - subGroups = group.getSubGroups(), - subGroupResults = {}, - results = {}; - - subGroups.forEach(function (subgroup) { - subGroupResults[subgroup.getKey()] = self.getGroupResults(subgroup); - }); - - results = { - top: groupObj.calcs.top ? groupObj.calcs.top.getData() : {}, - bottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {}, - groups: subGroupResults - }; - - return results; - }; - - //default calculations - ColumnCalcs.prototype.calculations = { - "avg": function avg(values, data, calcParams) { - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : 2; - - if (values.length) { - output = values.reduce(function (sum, value) { - value = Number(value); - return sum + value; - }); - - output = output / values.length; - - output = precision !== false ? output.toFixed(precision) : output; - } - - return parseFloat(output).toString(); - }, - "max": function max(values, data, calcParams) { - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function (value) { - - value = Number(value); - - if (value > output || output === null) { - output = value; - } - }); - - return output !== null ? precision !== false ? output.toFixed(precision) : output : ""; - }, - "min": function min(values, data, calcParams) { - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function (value) { - - value = Number(value); - - if (value < output || output === null) { - output = value; - } - }); - - return output !== null ? precision !== false ? output.toFixed(precision) : output : ""; - }, - "sum": function sum(values, data, calcParams) { - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - if (values.length) { - values.forEach(function (value) { - value = Number(value); - - output += !isNaN(value) ? Number(value) : 0; - }); - } - - return precision !== false ? output.toFixed(precision) : output; - }, - "concat": function concat(values, data, calcParams) { - var output = 0; - - if (values.length) { - output = values.reduce(function (sum, value) { - return String(sum) + String(value); - }); - } - - return output; - }, - "count": function count(values, data, calcParams) { - var output = 0; - - if (values.length) { - values.forEach(function (value) { - if (value) { - output++; - } - }); - } - - return output; - } - }; - - Tabulator.prototype.registerModule("columnCalcs", ColumnCalcs); - var Clipboard = function Clipboard(table) { - this.table = table; - this.mode = true; - this.copySelector = false; - this.copySelectorParams = {}; - this.copyFormatter = false; - this.copyFormatterParams = {}; - this.pasteParser = function () {}; - this.pasteAction = function () {}; - this.htmlElement = false; - this.config = {}; - - this.blocked = true; //block copy actions not originating from this command - }; - - Clipboard.prototype.initialize = function () { - var self = this; - - this.mode = this.table.options.clipboard; - - if (this.mode === true || this.mode === "copy") { - this.table.element.addEventListener("copy", function (e) { - var data; - - self.processConfig(); - - if (!self.blocked) { - e.preventDefault(); - - data = self.generateContent(); - - if (window.clipboardData && window.clipboardData.setData) { - window.clipboardData.setData('Text', data); - } else if (e.clipboardData && e.clipboardData.setData) { - e.clipboardData.setData('text/plain', data); - if (self.htmlElement) { - e.clipboardData.setData('text/html', self.htmlElement.outerHTML); - } - } else if (e.originalEvent && e.originalEvent.clipboardData.setData) { - e.originalEvent.clipboardData.setData('text/plain', data); - if (self.htmlElement) { - e.originalEvent.clipboardData.setData('text/html', self.htmlElement.outerHTML); - } - } - - self.table.options.clipboardCopied.call(this.table, data); - - self.reset(); - } - }); - } - - if (this.mode === true || this.mode === "paste") { - this.table.element.addEventListener("paste", function (e) { - self.paste(e); - }); - } - - this.setPasteParser(this.table.options.clipboardPasteParser); - this.setPasteAction(this.table.options.clipboardPasteAction); - }; - - Clipboard.prototype.processConfig = function () { - var config = { - columnHeaders: "groups", - rowGroups: true - }; - - if (typeof this.table.options.clipboardCopyHeader !== "undefined") { - config.columnHeaders = this.table.options.clipboardCopyHeader; - console.warn("DEPRECATION WANRING - clipboardCopyHeader option has been depricated, please use the columnHeaders property on the clipboardCopyConfig option"); - } - - if (this.table.options.clipboardCopyConfig) { - for (var key in this.table.options.clipboardCopyConfig) { - config[key] = this.table.options.clipboardCopyConfig[key]; - } - } - - if (config.rowGroups && this.table.options.groupBy && this.table.modExists("groupRows")) { - this.config.rowGroups = true; - } - - if (config.columnHeaders) { - if ((config.columnHeaders === "groups" || config === true) && this.table.columnManager.columns.length != this.table.columnManager.columnsByIndex.length) { - this.config.columnHeaders = "groups"; - } else { - this.config.columnHeaders = "columns"; - } - } else { - this.config.columnHeaders = false; - } - }; - - Clipboard.prototype.reset = function () { - this.blocked = false; - this.originalSelectionText = ""; - }; - - Clipboard.prototype.setPasteAction = function (action) { - - switch (typeof action === 'undefined' ? 'undefined' : _typeof(action)) { - case "string": - this.pasteAction = this.pasteActions[action]; - - if (!this.pasteAction) { - console.warn("Clipboard Error - No such paste action found:", action); - } - break; - - case "function": - this.pasteAction = action; - break; - } - }; - - Clipboard.prototype.setPasteParser = function (parser) { - switch (typeof parser === 'undefined' ? 'undefined' : _typeof(parser)) { - case "string": - this.pasteParser = this.pasteParsers[parser]; - - if (!this.pasteParser) { - console.warn("Clipboard Error - No such paste parser found:", parser); - } - break; - - case "function": - this.pasteParser = parser; - break; - } - }; - - Clipboard.prototype.paste = function (e) { - var data, rowData, rows; - - if (this.checkPaseOrigin(e)) { - - data = this.getPasteData(e); - - rowData = this.pasteParser.call(this, data); - - if (rowData) { - e.preventDefault(); - - if (this.table.modExists("mutator")) { - rowData = this.mutateData(rowData); - } - - rows = this.pasteAction.call(this, rowData); - this.table.options.clipboardPasted.call(this.table, data, rowData, rows); - } else { - this.table.options.clipboardPasteError.call(this.table, data); - } - } - }; - - Clipboard.prototype.mutateData = function (data) { - var self = this, - output = []; - - if (Array.isArray(data)) { - data.forEach(function (row) { - output.push(self.table.modules.mutator.transformRow(row, "clipboard")); - }); - } else { - output = data; - } - - return output; - }; - - Clipboard.prototype.checkPaseOrigin = function (e) { - var valid = true; - - if (e.target.tagName != "DIV" || this.table.modules.edit.currentCell) { - valid = false; - } - - return valid; - }; - - Clipboard.prototype.getPasteData = function (e) { - var data; - - if (window.clipboardData && window.clipboardData.getData) { - data = window.clipboardData.getData('Text'); - } else if (e.clipboardData && e.clipboardData.getData) { - data = e.clipboardData.getData('text/plain'); - } else if (e.originalEvent && e.originalEvent.clipboardData.getData) { - data = e.originalEvent.clipboardData.getData('text/plain'); - } - - return data; - }; - - Clipboard.prototype.copy = function (selector, selectorParams, formatter, formatterParams, internal) { - var range, sel; - this.blocked = false; - - if (this.mode === true || this.mode === "copy") { - - if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") { - range = document.createRange(); - range.selectNodeContents(this.table.element); - sel = window.getSelection(); - - if (sel.toString() && internal) { - selector = "userSelection"; - formatter = "raw"; - selectorParams = sel.toString(); - } - - sel.removeAllRanges(); - sel.addRange(range); - } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") { - textRange = document.body.createTextRange(); - textRange.moveToElementText(this.table.element); - textRange.select(); - } - - this.setSelector(selector); - this.copySelectorParams = typeof selectorParams != "undefined" && selectorParams != null ? selectorParams : this.config.columnHeaders; - this.setFormatter(formatter); - this.copyFormatterParams = typeof formatterParams != "undefined" && formatterParams != null ? formatterParams : {}; - - document.execCommand('copy'); - - if (sel) { - sel.removeAllRanges(); - } - } - }; - - Clipboard.prototype.setSelector = function (selector) { - selector = selector || this.table.options.clipboardCopySelector; - - switch (typeof selector === 'undefined' ? 'undefined' : _typeof(selector)) { - case "string": - if (this.copySelectors[selector]) { - this.copySelector = this.copySelectors[selector]; - } else { - console.warn("Clipboard Error - No such selector found:", selector); - } - break; - - case "function": - this.copySelector = selector; - break; - } - }; - - Clipboard.prototype.setFormatter = function (formatter) { - - formatter = formatter || this.table.options.clipboardCopyFormatter; - - switch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) { - case "string": - if (this.copyFormatters[formatter]) { - this.copyFormatter = this.copyFormatters[formatter]; - } else { - console.warn("Clipboard Error - No such formatter found:", formatter); - } - break; - - case "function": - this.copyFormatter = formatter; - break; - } - }; - - Clipboard.prototype.generateContent = function () { - var data; - - this.htmlElement = false; - data = this.copySelector.call(this, this.config, this.copySelectorParams); - - return this.copyFormatter.call(this, data, this.config, this.copyFormatterParams); - }; - - Clipboard.prototype.generateSimpleHeaders = function (columns) { - var headers = []; - - columns.forEach(function (column) { - headers.push(column.definition.title); - }); - - return headers; - }; - - Clipboard.prototype.generateColumnGroupHeaders = function (columns) { - var _this18 = this; - - var output = []; - - this.table.columnManager.columns.forEach(function (column) { - var colData = _this18.processColumnGroup(column); - - if (colData) { - output.push(colData); - } - }); - - return output; - }; - - Clipboard.prototype.processColumnGroup = function (column) { - var _this19 = this; - - var subGroups = column.columns; - - var groupData = { - type: "group", - title: column.definition.title, - column: column - }; - - if (subGroups.length) { - groupData.subGroups = []; - groupData.width = 0; - - subGroups.forEach(function (subGroup) { - var subGroupData = _this19.processColumnGroup(subGroup); - - if (subGroupData) { - groupData.width += subGroupData.width; - groupData.subGroups.push(subGroupData); - } - }); - - if (!groupData.width) { - return false; - } - } else { - if (column.field && column.visible) { - groupData.width = 1; - } else { - return false; - } - } - - return groupData; - }; - - Clipboard.prototype.groupHeadersToRows = function (columns) { - - var headers = []; - - function parseColumnGroup(column, level) { - - if (typeof headers[level] === "undefined") { - headers[level] = []; - } - - headers[level].push(column.title); - - if (column.subGroups) { - column.subGroups.forEach(function (subGroup) { - parseColumnGroup(subGroup, level + 1); - }); - } else { - padColumnheaders(); - } - } - - function padColumnheaders() { - var max = 0; - - headers.forEach(function (title) { - var len = title.length; - if (len > max) { - max = len; - } - }); - - headers.forEach(function (title) { - var len = title.length; - if (len < max) { - for (var i = len; i < max; i++) { - title.push(""); - } - } - }); - } - - columns.forEach(function (column) { - parseColumnGroup(column, 0); - }); - - return headers; - }; - - Clipboard.prototype.rowsToData = function (rows, config, params) { - var columns = this.table.columnManager.columnsByIndex, - data = []; - - rows.forEach(function (row) { - var rowArray = [], - rowData = row.getData("clipboard"); - - columns.forEach(function (column) { - var value = column.getFieldValue(rowData); - - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - case "object": - value = JSON.stringify(value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = value; - } - - rowArray.push(value); - }); - - data.push(rowArray); - }); - - return data; - }; - - Clipboard.prototype.buildComplexRows = function (config) { - var _this20 = this; - - var output = [], - groups = this.table.modules.groupRows.getGroups(); - - groups.forEach(function (group) { - output.push(_this20.processGroupData(group)); - }); - - return output; - }; - - Clipboard.prototype.processGroupData = function (group) { - var _this21 = this; - - var subGroups = group.getSubGroups(); - - var groupData = { - type: "group", - key: group.key - }; - - if (subGroups.length) { - groupData.subGroups = []; - - subGroups.forEach(function (subGroup) { - groupData.subGroups.push(_this21.processGroupData(subGroup)); - }); - } else { - groupData.rows = group.getRows(true); - } - - return groupData; - }; - - Clipboard.prototype.buildOutput = function (rows, config, params) { - var _this22 = this; - - var output = [], - columns = this.table.columnManager.columnsByIndex; - - if (config.columnHeaders) { - - if (config.columnHeaders == "groups") { - columns = this.generateColumnGroupHeaders(this.table.columnManager.columns); - - output = output.concat(this.groupHeadersToRows(columns)); - } else { - output.push(this.generateSimpleHeaders(columns)); - } - } - - //generate styled content - if (this.table.options.clipboardCopyStyled) { - this.generateHTML(rows, columns, config, params); - } - - //generate unstyled content - if (config.rowGroups) { - rows.forEach(function (row) { - output = output.concat(_this22.parseRowGroupData(row, config, params)); - }); - } else { - output = output.concat(this.rowsToData(rows, config, params)); - } - - return output; - }; - - Clipboard.prototype.parseRowGroupData = function (group, config, params) { - var _this23 = this; - - var groupData = []; - - groupData.push([group.key]); - - if (group.subGroups) { - group.subGroups.forEach(function (subGroup) { - groupData = groupData.concat(_this23.parseRowGroupData(subGroup, config, params)); - }); - } else { - - groupData = groupData.concat(this.rowsToData(group.rows, config, params)); - } - - return groupData; - }; - - Clipboard.prototype.generateHTML = function (rows, columns, config, params) { - var self = this, - data = [], - headers = [], - body, - oddRow, - evenRow, - firstRow, - firstCell, - firstGroup, - lastCell, - styleCells; - - //create table element - this.htmlElement = document.createElement("table"); - self.mapElementStyles(this.table.element, this.htmlElement, ["border-top", "border-left", "border-right", "border-bottom"]); - - function generateSimpleHeaders() { - var headerEl = document.createElement("tr"); - - columns.forEach(function (column) { - var columnEl = document.createElement("th"); - columnEl.innerHTML = column.definition.title; - - self.mapElementStyles(column.getElement(), columnEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - headerEl.appendChild(columnEl); - }); - - self.mapElementStyles(self.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - self.htmlElement.appendChild(document.createElement("thead").appendChild(headerEl)); - } - - function generateHeaders(headers) { - - var headerHolderEl = document.createElement("thead"); - - headers.forEach(function (columns) { - var headerEl = document.createElement("tr"); - - columns.forEach(function (column) { - var columnEl = document.createElement("th"); - - if (column.width > 1) { - columnEl.colSpan = column.width; - } - - if (column.height > 1) { - columnEl.rowSpan = column.height; - } - - columnEl.innerHTML = column.title; - - self.mapElementStyles(column.element, columnEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - headerEl.appendChild(columnEl); - }); - - self.mapElementStyles(self.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - headerHolderEl.appendChild(headerEl); - }); - - self.htmlElement.appendChild(headerHolderEl); - } - - function parseColumnGroup(column, level) { - - if (typeof headers[level] === "undefined") { - headers[level] = []; - } - - headers[level].push({ - title: column.title, - width: column.width, - height: 1, - children: !!column.subGroups, - element: column.column.getElement() - }); - - if (column.subGroups) { - column.subGroups.forEach(function (subGroup) { - parseColumnGroup(subGroup, level + 1); - }); - } - } - - function padVerticalColumnheaders() { - headers.forEach(function (row, index) { - row.forEach(function (header) { - if (!header.children) { - header.height = headers.length - index; - } - }); - }); - } - - //create headers if needed - if (config.columnHeaders) { - if (config.columnHeaders == "groups") { - columns.forEach(function (column) { - parseColumnGroup(column, 0); - }); - - padVerticalColumnheaders(); - generateHeaders(headers); - } else { - generateSimpleHeaders(); - } - } - - columns = this.table.columnManager.columnsByIndex; - - //create table body - body = document.createElement("tbody"); - - //lookup row styles - if (window.getComputedStyle) { - oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"); - evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"); - firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"); - firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0]; - - if (firstRow) { - styleCells = firstRow.getElementsByClassName("tabulator-cell"); - firstCell = styleCells[0]; - lastCell = styleCells[styleCells.length - 1]; - } - } - - function processRows(rowArray) { - //add rows to table - rowArray.forEach(function (row, i) { - var rowEl = document.createElement("tr"), - rowData = row.getData("clipboard"), - styleRow = firstRow; - - columns.forEach(function (column, j) { - var cellEl = document.createElement("td"), - value = column.getFieldValue(rowData); - - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - case "object": - value = JSON.stringify(value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = value; - } - - cellEl.innerHTML = value; - - if (column.definition.align) { - cellEl.style.textAlign = column.definition.align; - } - - if (j < columns.length - 1) { - if (firstCell) { - self.mapElementStyles(firstCell, cellEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]); - } - } else { - if (firstCell) { - self.mapElementStyles(firstCell, cellEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]); - } - } - - rowEl.appendChild(cellEl); - }); - - if (!(i % 2) && oddRow) { - styleRow = oddRow; - } - - if (i % 2 && evenRow) { - styleRow = evenRow; - } - - if (styleRow) { - self.mapElementStyles(styleRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - } - - body.appendChild(rowEl); - }); - } - - function processGroup(group) { - var groupEl = document.createElement("tr"), - groupCellEl = document.createElement("td"); - - groupCellEl.colSpan = columns.length; - - groupCellEl.innerHTML = group.key; - - groupEl.appendChild(groupCellEl); - body.appendChild(groupEl); - - self.mapElementStyles(firstGroup, groupEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - - if (group.subGroups) { - group.subGroups.forEach(function (subGroup) { - processGroup(subGroup); - }); - } else { - processRows(group.rows); - } - } - - if (config.rowGroups) { - rows.forEach(function (group) { - processGroup(group); - }); - } else { - processRows(rows); - } - - this.htmlElement.appendChild(body); - }; - - Clipboard.prototype.mapElementStyles = function (from, to, props) { - - var lookup = { - "background-color": "backgroundColor", - "color": "fontColor", - "font-weight": "fontWeight", - "font-family": "fontFamily", - "font-size": "fontSize", - "border-top": "borderTop", - "border-left": "borderLeft", - "border-right": "borderRight", - "border-bottom": "borderBottom" - }; - - if (window.getComputedStyle) { - var fromStyle = window.getComputedStyle(from); - - props.forEach(function (prop) { - to.style[lookup[prop]] = fromStyle.getPropertyValue(prop); - }); - } - - // return window.getComputedStyle ? window.getComputedStyle(element, null).getPropertyValue(property) : element.style[property.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); })]; - }; - - Clipboard.prototype.copySelectors = { - userSelection: function userSelection(config, params) { - return params; - }, - selected: function selected(config, params) { - var rows = []; - - if (this.table.modExists("selectRow", true)) { - rows = this.table.modules.selectRow.getSelectedRows(); - } - - if (config.rowGroups) { - console.warn("Clipboard Warning - select coptSelector does not support row groups"); - } - - return this.buildOutput(rows, config, params); - }, - table: function table(config, params) { - if (config.rowGroups) { - console.warn("Clipboard Warning - table coptSelector does not support row groups"); - } - - return this.buildOutput(this.table.rowManager.getComponents(), config, params); - }, - active: function active(config, params) { - var rows; - - if (config.rowGroups) { - rows = this.buildComplexRows(config); - } else { - rows = this.table.rowManager.getComponents(true); - } - - return this.buildOutput(rows, config, params); - } - }; - - Clipboard.prototype.copyFormatters = { - raw: function raw(data, params) { - return data; - }, - table: function table(data, params) { - var output = []; - - data.forEach(function (row) { - row.forEach(function (value) { - if (typeof value == "undefined") { - value = ""; - } - - value = typeof value == "undefined" || value === null ? "" : value.toString(); - - if (value.match(/\r|\n/)) { - value = value.split('"').join('""'); - value = '"' + value + '"'; - } - }); - - output.push(row.join("\t")); - }); - - return output.join("\n"); - } - }; - - Clipboard.prototype.pasteParsers = { - table: function table(clipboard) { - var data = [], - success = false, - headerFindSuccess = true, - columns = this.table.columnManager.columns, - columnMap = [], - rows = []; - - //get data from clipboard into array of columns and rows. - clipboard = clipboard.split("\n"); - - clipboard.forEach(function (row) { - data.push(row.split("\t")); - }); - - if (data.length && !(data.length === 1 && data[0].length < 2)) { - success = true; - - //check if headers are present by title - data[0].forEach(function (value) { - var column = columns.find(function (column) { - return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim(); - }); - - if (column) { - columnMap.push(column); - } else { - headerFindSuccess = false; - } - }); - - //check if column headers are present by field - if (!headerFindSuccess) { - headerFindSuccess = true; - columnMap = []; - - data[0].forEach(function (value) { - var column = columns.find(function (column) { - return value && column.field && value.trim() && column.field.trim() === value.trim(); - }); - - if (column) { - columnMap.push(column); - } else { - headerFindSuccess = false; - } - }); - - if (!headerFindSuccess) { - columnMap = this.table.columnManager.columnsByIndex; - } - } - - //remove header row if found - if (headerFindSuccess) { - data.shift(); - } - - data.forEach(function (item) { - var row = {}; - - item.forEach(function (value, i) { - if (columnMap[i]) { - row[columnMap[i].field] = value; - } - }); - - rows.push(row); - }); - - return rows; - } else { - return false; - } - } - }; - - Clipboard.prototype.pasteActions = { - replace: function replace(rows) { - return this.table.setData(rows); - }, - update: function update(rows) { - return this.table.updateOrAddData(rows); - }, - insert: function insert(rows) { - return this.table.addData(rows); - } - }; - - Tabulator.prototype.registerModule("clipboard", Clipboard); - - var DataTree = function DataTree(table) { - this.table = table; - this.indent = 10; - this.field = ""; - this.collapseEl = null; - this.expandEl = null; - this.branchEl = null; - - this.startOpen = function () {}; - - this.displayIndex = 0; - }; - - DataTree.prototype.initialize = function () { - var dummyEl = null, - options = this.table.options; - - this.field = options.dataTreeChildField; - this.indent = options.dataTreeChildIndent; - - if (options.dataTreeBranchElement) { - - if (options.dataTreeBranchElement === true) { - this.branchEl = document.createElement("div"); - this.branchEl.classList.add("tabulator-data-tree-branch"); - } else { - if (typeof options.dataTreeBranchElement === "string") { - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeBranchElement; - this.branchEl = dummyEl.firstChild; - } else { - this.branchEl = options.dataTreeBranchElement; - } - } - } - - if (options.dataTreeCollapseElement) { - if (typeof options.dataTreeCollapseElement === "string") { - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeCollapseElement; - this.collapseEl = dummyEl.firstChild; - } else { - this.collapseEl = options.dataTreeCollapseElement; - } - } else { - this.collapseEl = document.createElement("div"); - this.collapseEl.classList.add("tabulator-data-tree-control"); - this.collapseEl.innerHTML = "
"; - } - - if (options.dataTreeExpandElement) { - if (typeof options.dataTreeExpandElement === "string") { - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeExpandElement; - this.expandEl = dummyEl.firstChild; - } else { - this.expandEl = options.dataTreeExpandElement; - } - } else { - this.expandEl = document.createElement("div"); - this.expandEl.classList.add("tabulator-data-tree-control"); - this.expandEl.innerHTML = "
"; - } - - switch (_typeof(options.dataTreeStartExpanded)) { - case "boolean": - this.startOpen = function (row, index) { - return options.dataTreeStartExpanded; - }; - break; - - case "function": - this.startOpen = options.dataTreeStartExpanded; - break; - - default: - this.startOpen = function (row, index) { - return options.dataTreeStartExpanded[index]; - }; - break; - } - }; - - DataTree.prototype.initializeRow = function (row) { - - var children = typeof row.getData()[this.field] !== "undefined"; - - row.modules.dataTree = { - index: 0, - open: children ? this.startOpen(row.getComponent(), 0) : false, - controlEl: false, - branchEl: false, - parent: false, - children: children - }; - }; - - DataTree.prototype.layoutRow = function (row) { - var cell = row.getCells()[0], - el = cell.getElement(), - config = row.modules.dataTree; - - el.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + config.index * this.indent + "px"; - - if (config.branchEl) { - config.branchEl.parentNode.removeChild(config.branchEl); - } - - this.generateControlElement(row, el); - - if (config.index && this.branchEl) { - config.branchEl = this.branchEl.cloneNode(true); - el.insertBefore(config.branchEl, el.firstChild); - el.style.paddingLeft = parseInt(el.style.paddingLeft) + (config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1) + "px"; - } - }; - - DataTree.prototype.generateControlElement = function (row, el) { - var _this24 = this; - - var config = row.modules.dataTree, - el = el || row.getCells()[0].getElement(), - oldControl = config.controlEl; - - if (config.children !== false) { - - if (config.open) { - config.controlEl = this.collapseEl.cloneNode(true); - config.controlEl.addEventListener("click", function (e) { - e.stopPropagation(); - _this24.collapseRow(row); - }); - } else { - config.controlEl = this.expandEl.cloneNode(true); - config.controlEl.addEventListener("click", function (e) { - e.stopPropagation(); - _this24.expandRow(row); - }); - } - - config.controlEl.addEventListener("mousedown", function (e) { - e.stopPropagation(); - }); - - if (oldControl && oldControl.parentNode === el) { - oldControl.parentNode.replaceChild(config.controlEl, oldControl); - } else { - el.insertBefore(config.controlEl, el.firstChild); - } - } - }; - - DataTree.prototype.setDisplayIndex = function (index) { - this.displayIndex = index; - }; - - DataTree.prototype.getDisplayIndex = function () { - return this.displayIndex; - }; - - DataTree.prototype.getRows = function (rows) { - var _this25 = this; - - var output = []; - - rows.forEach(function (row, i) { - var config = row.modules.dataTree.children, - children; - - output.push(row); - - if (!config.index && config.children !== false) { - children = _this25.getChildren(row); - - children.forEach(function (child) { - output.push(child); - }); - } - }); - - return output; - }; - - DataTree.prototype.getChildren = function (row) { - var _this26 = this; - - var config = row.modules.dataTree, - output = []; - - if (config.children !== false && config.open) { - if (!Array.isArray(config.children)) { - config.children = this.generateChildren(row); - } - - config.children.forEach(function (child) { - output.push(child); - - var subChildren = _this26.getChildren(child); - - subChildren.forEach(function (sub) { - output.push(sub); - }); - }); - } - - return output; - }; - - DataTree.prototype.generateChildren = function (row) { - var _this27 = this; - - var children = []; - - row.getData()[this.field].forEach(function (childData) { - var childRow = new Row(childData || {}, _this27.table.rowManager); - childRow.modules.dataTree.index = row.modules.dataTree.index + 1; - childRow.modules.dataTree.parent = row; - childRow.modules.dataTree.open = _this27.startOpen(row, childRow.modules.dataTree.index); - children.push(childRow); - }); - - return children; - }; - - DataTree.prototype.expandRow = function (row, silent) { - var config = row.modules.dataTree; - - if (config.children !== false) { - config.open = true; - - row.reinitialize(); - - this.table.rowManager.refreshActiveData("tree", false, true); - - this.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index); - } - }; - - DataTree.prototype.collapseRow = function (row) { - var config = row.modules.dataTree; - - if (config.children !== false) { - config.open = false; - - row.reinitialize(); - - this.table.rowManager.refreshActiveData("tree", false, true); - - this.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index); - } - }; - - DataTree.prototype.toggleRow = function (row) { - var config = row.modules.dataTree; - - if (config.children !== false) { - if (config.open) { - this.collapseRow(row); - } else { - this.expandRow(row); - } - } - }; - - DataTree.prototype.getTreeParent = function (row) { - return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false; - }; - - DataTree.prototype.getTreeChildren = function (row) { - var config = row.modules.dataTree, - output = []; - - if (config.children) { - - if (!Array.isArray(config.children)) { - config.children = this.generateChildren(row); - } - - config.children.forEach(function (childRow) { - if (childRow instanceof Row) { - output.push(childRow.getComponent()); - } - }); - } - - return output; - }; - - DataTree.prototype.checkForRestyle = function (cell) { - if (!cell.row.cells.indexOf(cell)) { - if (cell.row.modules.dataTree.children !== false) { - cell.row.reinitialize(); - } - } - }; - - Tabulator.prototype.registerModule("dataTree", DataTree); - var Download = function Download(table) { - this.table = table; //hold Tabulator object - this.fields = {}; //hold filed multi dimension arrays - this.columnsByIndex = []; //hold columns in their order in the table - this.columnsByField = {}; //hold columns with lookup by field name - this.config = {}; - }; - - //trigger file download - Download.prototype.download = function (type, filename, options, interceptCallback) { - var self = this, - downloadFunc = false; - this.processConfig(); - - function buildLink(data, mime) { - if (interceptCallback) { - interceptCallback(data); - } else { - self.triggerDownload(data, mime, type, filename); - } - } - - if (typeof type == "function") { - downloadFunc = type; - } else { - if (self.downloaders[type]) { - downloadFunc = self.downloaders[type]; - } else { - console.warn("Download Error - No such download type found: ", type); - } - } - - this.processColumns(); - - if (downloadFunc) { - downloadFunc.call(this, self.processDefinitions(), self.processData(), options || {}, buildLink, this.config); - } - }; - - Download.prototype.processConfig = function () { - var config = { //download config - columnGroups: true, - rowGroups: true - }; - - if (this.table.options.downloadConfig) { - for (var key in this.table.options.downloadConfig) { - config[key] = this.table.options.downloadConfig[key]; - } - } - - if (config.rowGroups && this.table.options.groupBy && this.table.modExists("groupRows")) { - this.config.rowGroups = true; - } - - if (config.columnGroups && this.table.columnManager.columns.length != this.table.columnManager.columnsByIndex.length) { - this.config.columnGroups = true; - } - }; - - Download.prototype.processColumns = function () { - var self = this; - - self.columnsByIndex = []; - self.columnsByField = {}; - - self.table.columnManager.columnsByIndex.forEach(function (column) { - - if (column.field && column.visible && column.definition.download !== false) { - self.columnsByIndex.push(column); - self.columnsByField[column.field] = column; - } - }); - }; - - Download.prototype.processDefinitions = function () { - var self = this, - processedDefinitions = []; - - if (this.config.columnGroups) { - self.table.columnManager.columns.forEach(function (column) { - var colData = self.processColumnGroup(column); - - if (colData) { - processedDefinitions.push(colData); - } - }); - } else { - self.columnsByIndex.forEach(function (column) { - if (column.download !== false) { - //isolate definiton from defintion object - processedDefinitions.push(self.processDefinition(column)); - } - }); - } - - return processedDefinitions; - }; - - Download.prototype.processColumnGroup = function (column) { - var _this28 = this; - - var subGroups = column.columns; - - var groupData = { - type: "group", - title: column.definition.title - }; - - if (subGroups.length) { - groupData.subGroups = []; - groupData.width = 0; - - subGroups.forEach(function (subGroup) { - var subGroupData = _this28.processColumnGroup(subGroup); - - if (subGroupData) { - groupData.width += subGroupData.width; - groupData.subGroups.push(subGroupData); - } - }); - - if (!groupData.width) { - return false; - } - } else { - if (column.field && column.visible && column.definition.download !== false) { - groupData.width = 1; - groupData.definition = this.processDefinition(column); - } else { - return false; - } - } - - return groupData; - }; - - Download.prototype.processDefinition = function (column) { - var def = {}; - - for (var key in column.definition) { - def[key] = column.definition[key]; - } - - if (typeof column.definition.downloadTitle != "undefined") { - def.title = column.definition.downloadTitle; - } - - return def; - }; - - Download.prototype.processData = function () { - var _this29 = this; - - var self = this, - data = [], - groups = []; - - if (this.config.rowGroups) { - groups = this.table.modules.groupRows.getGroups(); - - groups.forEach(function (group) { - data.push(_this29.processGroupData(group)); - }); - } else { - data = self.table.rowManager.getData(true, "download"); - } - - //bulk data processing - if (typeof self.table.options.downloadDataFormatter == "function") { - data = self.table.options.downloadDataFormatter(data); - } - - return data; - }; - - Download.prototype.processGroupData = function (group) { - var _this30 = this; - - var subGroups = group.getSubGroups(); - - var groupData = { - type: "group", - key: group.key - }; - - if (subGroups.length) { - groupData.subGroups = []; - - subGroups.forEach(function (subGroup) { - groupData.subGroups.push(_this30.processGroupData(subGroup)); - }); - } else { - groupData.rows = group.getData(true, "download"); - } - - return groupData; - }; - - Download.prototype.triggerDownload = function (data, mime, type, filename) { - var element = document.createElement('a'), - blob = new Blob([data], { type: mime }), - filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type); - - blob = this.table.options.downloadReady.call(this.table, data, blob); - - if (blob) { - - if (navigator.msSaveOrOpenBlob) { - navigator.msSaveOrOpenBlob(blob, filename); - } else { - element.setAttribute('href', window.URL.createObjectURL(blob)); - - //set file title - element.setAttribute('download', filename); - - //trigger download - element.style.display = 'none'; - document.body.appendChild(element); - element.click(); - - //remove temporary link element - document.body.removeChild(element); - } - - if (this.table.options.downloadComplete) { - this.table.options.downloadComplete(); - } - } - }; - - //nested field lookup - Download.prototype.getFieldValue = function (field, data) { - var column = this.columnsByField[field]; - - if (column) { - return column.getFieldValue(data); - } - - return false; - }; - - Download.prototype.commsReceived = function (table, action, data) { - switch (action) { - case "intercept": - this.download(data.type, "", data.options, data.intercept); - break; - } - }; - - //downloaders - Download.prototype.downloaders = { - csv: function csv(columns, data, options, setFileContents, config) { - var self = this, - titles = [], - fields = [], - delimiter = options && options.delimiter ? options.delimiter : ",", - fileContents; - - //build column headers - function parseSimpleTitles() { - columns.forEach(function (column) { - titles.push('"' + String(column.title).split('"').join('""') + '"'); - fields.push(column.field); - }); - } - - function parseColumnGroup(column, level) { - if (column.subGroups) { - column.subGroups.forEach(function (subGroup) { - parseColumnGroup(subGroup, level + 1); - }); - } else { - titles.push('"' + String(column.title).split('"').join('""') + '"'); - fields.push(column.definition.field); - } - } - - if (config.columnGroups) { - console.warn("Download Warning - CSV downloader cannot process column groups"); - - columns.forEach(function (column) { - parseColumnGroup(column, 0); - }); - } else { - parseSimpleTitles(); - } - - //generate header row - fileContents = [titles.join(delimiter)]; - - function parseRows(data) { - //generate each row of the table - data.forEach(function (row) { - var rowData = []; - - fields.forEach(function (field) { - var value = self.getFieldValue(field, row); - - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - case "object": - value = JSON.stringify(value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = value; - } - - //escape quotation marks - rowData.push('"' + String(value).split('"').join('""') + '"'); - }); - - fileContents.push(rowData.join(delimiter)); - }); - } - - function parseGroup(group) { - if (group.subGroups) { - group.subGroups.forEach(function (subGroup) { - parseGroup(subGroup); - }); - } else { - parseRows(group.rows); - } - } - - if (config.rowGroups) { - console.warn("Download Warning - CSV downloader cannot process row groups"); - - data.forEach(function (group) { - parseGroup(group); - }); - } else { - parseRows(data); - } - - setFileContents(fileContents.join("\n"), "text/csv"); - }, - - json: function json(columns, data, options, setFileContents, config) { - var fileContents = JSON.stringify(data, null, '\t'); - - setFileContents(fileContents, "application/json"); - }, - - pdf: function pdf(columns, data, options, setFileContents, config) { - var self = this, - fields = [], - header = [], - body = [], - table = "", - groupRowIndexs = [], - autoTableParams = {}, - rowGroupStyles = {}, - jsPDFParams = options.jsPDF || {}, - title = options && options.title ? options.title : ""; - - if (!jsPDFParams.orientation) { - jsPDFParams.orientation = options.orientation || "landscape"; - } - - if (!jsPDFParams.unit) { - jsPDFParams.unit = "pt"; - } - - //build column headers - function parseSimpleTitles() { - columns.forEach(function (column) { - if (column.field) { - header.push(column.title || ""); - fields.push(column.field); - } - }); - } - - function parseColumnGroup(column, level) { - if (column.subGroups) { - column.subGroups.forEach(function (subGroup) { - parseColumnGroup(subGroup, level + 1); - }); - } else { - header.push(column.title || ""); - fields.push(column.definition.field); - } - } - - if (config.columnGroups) { - console.warn("Download Warning - PDF downloader cannot process column groups"); - - columns.forEach(function (column) { - parseColumnGroup(column, 0); - }); - } else { - parseSimpleTitles(); - } - - function parseValue(value) { - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - case "object": - value = JSON.stringify(value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = value; - } - - return value; - } - - function parseRows(data) { - //build table rows - data.forEach(function (row) { - var rowData = []; - - fields.forEach(function (field) { - var value = self.getFieldValue(field, row); - rowData.push(parseValue(value)); - }); - - body.push(rowData); - }); - } - - function parseGroup(group) { - var groupData = []; - - groupData.push(parseValue(group.key)); - - groupRowIndexs.push(body.length); - - body.push(groupData); - - if (group.subGroups) { - group.subGroups.forEach(function (subGroup) { - parseGroup(subGroup); - }); - } else { - parseRows(group.rows); - } - } - - if (config.rowGroups) { - data.forEach(function (group) { - parseGroup(group); - }); - } else { - parseRows(data); - } - - var doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables - - if (options && options.autoTable) { - if (typeof options.autoTable === "function") { - autoTableParams = options.autoTable(doc) || {}; - } else { - autoTableParams = options.autoTable; - } - } - - if (config.rowGroups) { - var createdCell = function createdCell(cell, data) { - if (groupRowIndexs.indexOf(data.row.index) > -1) { - for (var key in rowGroupStyles) { - cell.styles[key] = rowGroupStyles[key]; - } - } - }; - - rowGroupStyles = options.rowGroupStyles || { - fontStyle: "bold", - fontSize: 12, - cellPadding: 6, - fillColor: 220 - }; - - if (!autoTableParams.createdCell) { - autoTableParams.createdCell = createdCell; - } else { - var createdCellHolder = autoTableParams.createdCell; - - autoTableParams.createdCell = function (cell, data) { - createdCell(cell, data); - createdCellHolder(cell, data); - }; - } - } - - if (title) { - autoTableParams.addPageContent = function (data) { - doc.text(title, 40, 30); - }; - } - - doc.autoTable(header, body, autoTableParams); - - setFileContents(doc.output("arraybuffer"), "application/pdf"); - }, - - xlsx: function xlsx(columns, data, options, setFileContents, config) { - var self = this, - sheetName = options.sheetName || "Sheet1", - workbook = { SheetNames: [], Sheets: {} }, - groupRowIndexs = [], - groupColumnIndexs = [], - output; - - function generateSheet() { - var titles = [], - fields = [], - rows = [], - worksheet; - - //convert rows to worksheet - function rowsToSheet() { - var sheet = {}; - var range = { s: { c: 0, r: 0 }, e: { c: fields.length, r: rows.length } }; - - XLSX.utils.sheet_add_aoa(sheet, rows); - - sheet['!ref'] = XLSX.utils.encode_range(range); - - var merges = generateMerges(); - - if (merges.length) { - sheet["!merges"] = merges; - } - - return sheet; - } - - function parseSimpleTitles() { - //get field lists - columns.forEach(function (column) { - titles.push(column.title); - fields.push(column.field); - }); - - rows.push(titles); - } - - function parseColumnGroup(column, level) { - - if (typeof titles[level] === "undefined") { - titles[level] = []; - } - - if (typeof groupColumnIndexs[level] === "undefined") { - groupColumnIndexs[level] = []; - } - - if (column.width > 1) { - - groupColumnIndexs[level].push({ - type: "hoz", - start: titles[level].length, - end: titles[level].length + column.width - 1 - }); - } - - titles[level].push(column.title); - - if (column.subGroups) { - column.subGroups.forEach(function (subGroup) { - parseColumnGroup(subGroup, level + 1); - }); - } else { - fields.push(column.definition.field); - padColumnTitles(fields.length - 1, level); - - groupColumnIndexs[level].push({ - type: "vert", - start: fields.length - 1 - }); - } - } - - function padColumnTitles() { - var max = 0; - - titles.forEach(function (title) { - var len = title.length; - if (len > max) { - max = len; - } - }); - - titles.forEach(function (title) { - var len = title.length; - if (len < max) { - for (var i = len; i < max; i++) { - title.push(""); - } - } - }); - } - - if (config.columnGroups) { - columns.forEach(function (column) { - parseColumnGroup(column, 0); - }); - - titles.forEach(function (title) { - rows.push(title); - }); - } else { - parseSimpleTitles(); - } - - function generateMerges() { - var output = []; - - groupRowIndexs.forEach(function (index) { - output.push({ s: { r: index, c: 0 }, e: { r: index, c: fields.length - 1 } }); - }); - - groupColumnIndexs.forEach(function (merges, level) { - merges.forEach(function (merge) { - if (merge.type === "hoz") { - output.push({ s: { r: level, c: merge.start }, e: { r: level, c: merge.end } }); - } else { - if (level != titles.length - 1) { - output.push({ s: { r: level, c: merge.start }, e: { r: titles.length - 1, c: merge.start } }); - } - } - }); - }); - - return output; - } - - //generate each row of the table - function parseRows(data) { - data.forEach(function (row) { - var rowData = []; - - fields.forEach(function (field) { - var value = self.getFieldValue(field, row); - - rowData.push((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === "object" ? JSON.stringify(value) : value); - }); - - rows.push(rowData); - }); - } - - function parseGroup(group) { - var groupData = []; - - groupData.push(group.key); - - groupRowIndexs.push(rows.length); - - rows.push(groupData); - - if (group.subGroups) { - group.subGroups.forEach(function (subGroup) { - parseGroup(subGroup); - }); - } else { - parseRows(group.rows); - } - } - - if (config.rowGroups) { - data.forEach(function (group) { - parseGroup(group); - }); - } else { - parseRows(data); - } - - worksheet = rowsToSheet(); - - return worksheet; - } - - if (options.sheetOnly) { - setFileContents(generateSheet()); - return; - } - - if (options.sheets) { - for (var sheet in options.sheets) { - - if (options.sheets[sheet] === true) { - workbook.SheetNames.push(sheet); - workbook.Sheets[sheet] = generateSheet(); - } else { - - workbook.SheetNames.push(sheet); - - this.table.modules.comms.send(options.sheets[sheet], "download", "intercept", { - type: "xlsx", - options: { sheetOnly: true }, - intercept: function intercept(data) { - workbook.Sheets[sheet] = data; - } - }); - } - } - } else { - workbook.SheetNames.push(sheetName); - workbook.Sheets[sheetName] = generateSheet(); - } - - //convert workbook to binary array - function s2ab(s) { - var buf = new ArrayBuffer(s.length); - var view = new Uint8Array(buf); - for (var i = 0; i != s.length; ++i) { - view[i] = s.charCodeAt(i) & 0xFF; - }return buf; - } - - output = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' }); - - setFileContents(s2ab(output), "application/octet-stream"); - } - - }; - - Tabulator.prototype.registerModule("download", Download); - var Edit = function Edit(table) { - this.table = table; //hold Tabulator object - this.currentCell = false; //hold currently editing cell - this.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening - this.recursionBlock = false; //prevent focus recursion - this.invalidEdit = false; - }; - - //initialize column editor - Edit.prototype.initializeColumn = function (column) { - var self = this, - config = { - editor: false, - blocked: false, - check: column.definition.editable, - params: column.definition.editorParams || {} - }; - - //set column editor - switch (_typeof(column.definition.editor)) { - case "string": - - if (column.definition.editor === "tick") { - column.definition.editor = "tickCross"; - console.warn("DEPRECATION WANRING - the tick editor has been depricated, please use the tickCross editor"); - } - - if (self.editors[column.definition.editor]) { - config.editor = self.editors[column.definition.editor]; - } else { - console.warn("Editor Error - No such editor found: ", column.definition.editor); - } - break; - - case "function": - config.editor = column.definition.editor; - break; - - case "boolean": - - if (column.definition.editor === true) { - - if (typeof column.definition.formatter !== "function") { - - if (column.definition.formatter === "tick") { - column.definition.formatter = "tickCross"; - console.warn("DEPRECATION WANRING - the tick editor has been depricated, please use the tickCross editor"); - } - - if (self.editors[column.definition.formatter]) { - config.editor = self.editors[column.definition.formatter]; - } else { - config.editor = self.editors["input"]; - } - } else { - console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter); - } - } - break; - } - - if (config.editor) { - column.modules.edit = config; - } - }; - - Edit.prototype.getCurrentCell = function () { - return this.currentCell ? this.currentCell.getComponent() : false; - }; - - Edit.prototype.clearEditor = function () { - var cell = this.currentCell, - cellEl; - - this.invalidEdit = false; - - if (cell) { - this.currentCell = false; - - cellEl = cell.getElement(); - cellEl.classList.remove("tabulator-validation-fail"); - cellEl.classList.remove("tabulator-editing"); - while (cellEl.firstChild) { - cellEl.removeChild(cellEl.firstChild); - }cell.row.getElement().classList.remove("tabulator-row-editing"); - } - }; - - Edit.prototype.cancelEdit = function () { - - if (this.currentCell) { - var cell = this.currentCell; - var component = this.currentCell.getComponent(); - - this.clearEditor(); - cell.setValueActual(cell.getValue()); - - if (cell.column.cellEvents.cellEditCancelled) { - cell.column.cellEvents.cellEditCancelled.call(this.table, component); - } - - this.table.options.cellEditCancelled.call(this.table, component); - } - }; - - //return a formatted value for a cell - Edit.prototype.bindEditor = function (cell) { - var self = this, - element = cell.getElement(); - - element.setAttribute("tabindex", 0); - - element.addEventListener("click", function (e) { - if (!element.classList.contains("tabulator-editing")) { - element.focus(); - } - }); - - element.addEventListener("mousedown", function (e) { - self.mouseClick = true; - }); - - element.addEventListener("focus", function (e) { - if (!self.recursionBlock) { - self.edit(cell, e, false); - } - }); - }; - - Edit.prototype.focusCellNoEvent = function (cell) { - this.recursionBlock = true; - cell.getElement().focus(); - this.recursionBlock = false; - }; - - Edit.prototype.editCell = function (cell, forceEdit) { - this.focusCellNoEvent(cell); - this.edit(cell, false, forceEdit); - }; - - Edit.prototype.edit = function (cell, e, forceEdit) { - var self = this, - allowEdit = true, - rendered = function rendered() {}, - element = cell.getElement(), - cellEditor, - component, - params; - - //prevent editing if another cell is refusing to leave focus (eg. validation fail) - if (this.currentCell) { - if (!this.invalidEdit) { - this.cancelEdit(); - } - return; - } - - //handle successfull value change - function success(value) { - - if (self.currentCell === cell) { - var valid = true; - - if (cell.column.modules.validate && self.table.modExists("validate")) { - valid = self.table.modules.validate.validate(cell.column.modules.validate, cell.getComponent(), value); - } - - if (valid === true) { - self.clearEditor(); - cell.setValue(value, true); - - if (self.table.options.dataTree && self.table.modExists("dataTree")) { - self.table.modules.dataTree.checkForRestyle(cell); - } - } else { - self.invalidEdit = true; - element.classList.add("tabulator-validation-fail"); - self.focusCellNoEvent(cell); - rendered(); - self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid); - } - } else { - // console.warn("Edit Success Error - cannot call success on a cell that is no longer being edited"); - } - } - - //handle aborted edit - function cancel() { - if (self.currentCell === cell) { - self.cancelEdit(); - - if (self.table.options.dataTree && self.table.modExists("dataTree")) { - self.table.modules.dataTree.checkForRestyle(cell); - } - } else { - // console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited"); - } - } - - function onRendered(callback) { - rendered = callback; - } - - if (!cell.column.modules.edit.blocked) { - if (e) { - e.stopPropagation(); - } - - switch (_typeof(cell.column.modules.edit.check)) { - case "function": - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - break; - - case "boolean": - allowEdit = cell.column.modules.edit.check; - break; - } - - if (allowEdit || forceEdit) { - - self.cancelEdit(); - - self.currentCell = cell; - - component = cell.getComponent(); - - if (this.mouseClick) { - this.mouseClick = false; - - if (cell.column.cellEvents.cellClick) { - cell.column.cellEvents.cellClick.call(this.table, e, component); - } - } - - if (cell.column.cellEvents.cellEditing) { - cell.column.cellEvents.cellEditing.call(this.table, component); - } - - self.table.options.cellEditing.call(this.table, component); - - params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params; - - cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params); - - //if editor returned, add to DOM, if false, abort edit - if (cellEditor !== false) { - - if (cellEditor instanceof Node) { - element.classList.add("tabulator-editing"); - cell.row.getElement().classList.add("tabulator-row-editing"); - while (element.firstChild) { - element.removeChild(element.firstChild); - }element.appendChild(cellEditor); - - //trigger onRendered Callback - rendered(); - - //prevent editing from triggering rowClick event - var children = element.children; - - for (var i = 0; i < children.length; i++) { - children[i].addEventListener("click", function (e) { - e.stopPropagation(); - }); - } - } else { - console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor); - element.blur(); - return false; - } - } else { - element.blur(); - return false; - } - - return true; - } else { - this.mouseClick = false; - element.blur(); - return false; - } - } else { - this.mouseClick = false; - element.blur(); - return false; - } - }; - - //default data editors - Edit.prototype.editors = { - - //input element - input: function input(cell, onRendered, success, cancel, editorParams) { - - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - input.value = typeof cellValue !== "undefined" ? cellValue : ""; - - onRendered(function () { - input.focus(); - input.style.height = "100%"; - }); - - function onChange(e) { - if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value != cellValue) { - success(input.value); - } else { - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - //submit new value on enter - input.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 13: - success(input.value); - break; - - case 27: - cancel(); - break; - } - }); - - return input; - }, - - //resizable text area element - textarea: function textarea(cell, onRendered, success, cancel, editorParams) { - var self = this, - cellValue = cell.getValue(), - value = String(typeof cellValue == "null" || typeof cellValue == "undefined" ? "" : cellValue), - count = (value.match(/(?:\r\n|\r|\n)/g) || []).length + 1, - input = document.createElement("textarea"), - scrollHeight = 0; - - //create and style input - input.style.display = "block"; - input.style.padding = "2px"; - input.style.height = "100%"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - input.style.whiteSpace = "pre-wrap"; - input.style.resize = "none"; - - input.value = value; - - onRendered(function () { - input.focus(); - input.style.height = "100%"; - }); - - function onChange(e) { - - if ((cellValue === null || typeof cellValue === "undefined") && input.value !== "" || input.value != cellValue) { - success(input.value); - setTimeout(function () { - cell.getRow().normalizeHeight(); - }, 300); - } else { - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - input.addEventListener("keyup", function () { - - input.style.height = ""; - - var heightNow = input.scrollHeight; - - input.style.height = heightNow + "px"; - - if (heightNow != scrollHeight) { - scrollHeight = heightNow; - cell.getRow().normalizeHeight(); - } - }); - - input.addEventListener("keydown", function (e) { - if (e.keyCode == 27) { - cancel(); - } - }); - - return input; - }, - - //input element with type of number - number: function number(cell, onRendered, success, cancel, editorParams) { - - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", "number"); - - if (typeof editorParams.max != "undefined") { - input.setAttribute("max", editorParams.max); - } - - if (typeof editorParams.min != "undefined") { - input.setAttribute("min", editorParams.min); - } - - if (typeof editorParams.step != "undefined") { - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - input.value = cellValue; - - onRendered(function () { - input.focus(); - input.style.height = "100%"; - }); - - function onChange() { - var value = input.value; - - if (!isNaN(value) && value !== "") { - value = Number(value); - } - - if (value != cellValue) { - success(value); - } else { - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function (e) { - onChange(); - }); - - //submit new value on enter - input.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 13: - case 9: - onChange(); - break; - - case 27: - cancel(); - break; - } - }); - - return input; - }, - - //input element with type of number - range: function range(cell, onRendered, success, cancel, editorParams) { - - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", "range"); - - if (typeof editorParams.max != "undefined") { - input.setAttribute("max", editorParams.max); - } - - if (typeof editorParams.min != "undefined") { - input.setAttribute("min", editorParams.min); - } - - if (typeof editorParams.step != "undefined") { - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - input.value = cellValue; - - onRendered(function () { - input.focus(); - input.style.height = "100%"; - }); - - function onChange() { - var value = input.value; - - if (!isNaN(value) && value !== "") { - value = Number(value); - } - - if (value != cellValue) { - success(value); - } else { - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function (e) { - onChange(); - }); - - //submit new value on enter - input.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 13: - case 9: - onChange(); - break; - - case 27: - cancel(); - break; - } - }); - - return input; - }, - - //select - select: function select(cell, onRendered, success, cancel, editorParams) { - var self = this, - cellEl = cell.getElement(), - initialValue = cell.getValue(), - input = document.createElement("input"), - listEl = document.createElement("div"), - dataItems = [], - displayItems = [], - currentItem = {}, - blurable = true; - - if (Array.isArray(editorParams) || !Array.isArray(editorParams) && (typeof editorParams === 'undefined' ? 'undefined' : _typeof(editorParams)) === "object" && !editorParams.values) { - console.warn("DEPRECATION WANRING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"); - editorParams = { values: editorParams }; - } - - function getUniqueColumnValues() { - var output = {}, - column = cell.getColumn()._getSelf(), - data = self.table.getData(); - - data.forEach(function (row) { - var val = column.getFieldValue(row); - - if (val !== null && typeof val !== "undefined" && val !== "") { - output[val] = true; - } - }); - - return Object.keys(output); - } - - function parseItems(inputValues, curentValue) { - var dataList = []; - var displayList = []; - - function processComplexListItem(item) { - var item = { - label: editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label) : item.label, - value: item.value, - element: false - }; - - if (item.value === curentValue) { - setCurrentItem(item); - } - - dataList.push(item); - displayList.push(item); - - return item; - } - - if (typeof inputValues == "function") { - inputValues = inputValues(cell); - } - - if (Array.isArray(inputValues)) { - inputValues.forEach(function (value) { - var item; - - if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === "object") { - - if (value.options) { - item = { - label: value.label, - group: true, - element: false - }; - - displayList.push(item); - - value.options.forEach(function (item) { - processComplexListItem(item); - }); - } else { - processComplexListItem(value); - } - } else { - item = { - label: editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value, - value: value, - element: false - }; - - if (item.value === curentValue) { - setCurrentItem(item); - } - - dataList.push(item); - displayList.push(item); - } - }); - } else { - for (var key in inputValues) { - var item = { - label: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key], - value: key, - element: false - }; - - if (item.value === curentValue) { - setCurrentItem(item); - } - - dataList.push(item); - displayList.push(item); - } - } - - dataItems = dataList; - displayItems = displayList; - - fillList(); - } - - function fillList() { - while (listEl.firstChild) { - listEl.removeChild(listEl.firstChild); - }displayItems.forEach(function (item) { - var el = item.element; - - if (!el) { - - if (item.group) { - el = document.createElement("div"); - el.classList.add("tabulator-edit-select-list-group"); - el.tabIndex = 0; - el.innerHTML = item.label === "" ? " " : item.label; - } else { - el = document.createElement("div"); - el.classList.add("tabulator-edit-select-list-item"); - el.tabIndex = 0; - el.innerHTML = item.label === "" ? " " : item.label; - - el.addEventListener("click", function () { - setCurrentItem(item); - chooseItem(); - }); - - if (item === currentItem) { - el.classList.add("active"); - } - } - - el.addEventListener("mousedown", function () { - blurable = false; - - setTimeout(function () { - blurable = true; - }, 10); - }); - - item.element = el; - } - - listEl.appendChild(el); - }); - } - - function setCurrentItem(item) { - - if (currentItem && currentItem.element) { - currentItem.element.classList.remove("active"); - } - - currentItem = item; - input.value = item.label === " " ? "" : item.label; - - if (item.element) { - item.element.classList.add("active"); - } - } - - function chooseItem() { - hideList(); - - if (initialValue !== currentItem.value) { - initialValue = currentItem.value; - success(currentItem.value); - } else { - cancel(); - } - } - - function cancelItem() { - hideList(); - cancel(); - } - - function showList() { - if (!listEl.parentNode) { - - if (editorParams.values === true) { - parseItems(getUniqueColumnValues(), initialValue); - } else { - parseItems(editorParams.values || [], initialValue); - } - - var offset = Tabulator.prototype.helpers.elOffset(cellEl); - - listEl.style.minWidth = cellEl.offsetWidth + "px"; - - listEl.style.top = offset.top + cellEl.offsetHeight + "px"; - listEl.style.left = offset.left + "px"; - document.body.appendChild(listEl); - } - } - - function hideList() { - if (listEl.parentNode) { - listEl.parentNode.removeChild(listEl); - } - } - - //style input - input.setAttribute("type", "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - input.readonly = true; - - //allow key based navigation - input.addEventListener("keydown", function (e) { - var index; - - switch (e.keyCode) { - case 38: - //up arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - - index = dataItems.indexOf(currentItem); - - if (index > 0) { - setCurrentItem(dataItems[index - 1]); - } - break; - - case 40: - //down arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - - index = dataItems.indexOf(currentItem); - - if (index < dataItems.length - 1) { - if (index == -1) { - setCurrentItem(dataItems[0]); - } else { - setCurrentItem(dataItems[index + 1]); - } - } - break; - - case 13: - //enter - chooseItem(); - break; - - case 27: - //escape - cancelItem(); - break; - } - }); - - input.addEventListener("blur", function (e) { - if (blurable) { - cancelItem(); - } - }); - - input.addEventListener("focus", function (e) { - showList(); - }); - - //style list element - listEl = document.createElement("div"); - listEl.classList.add("tabulator-edit-select-list"); - - onRendered(function () { - input.style.height = "100%"; - input.focus(); - }); - - return input; - }, - - //autocomplete - autocomplete: function autocomplete(cell, onRendered, success, cancel, editorParams) { - var self = this, - cellEl = cell.getElement(), - initialValue = cell.getValue(), - input = document.createElement("input"), - listEl = document.createElement("div"), - allItems = [], - displayItems = [], - currentItem = {}, - blurable = true; - - function getUniqueColumnValues() { - var output = {}, - column = cell.getColumn()._getSelf(), - data = self.table.getData(); - - data.forEach(function (row) { - var val = column.getFieldValue(row); - - if (val !== null && typeof val !== "undefined" && val !== "") { - output[val] = true; - } - }); - - return Object.keys(output); - } - - function parseItems(inputValues, curentValue) { - var itemList = []; - - if (Array.isArray(inputValues)) { - inputValues.forEach(function (value) { - var item = { - title: editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value, - value: value, - element: false - }; - - if (item.value === curentValue) { - setCurrentItem(item); - } - - itemList.push(item); - }); - } else { - for (var key in inputValues) { - var item = { - title: editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key], - value: key, - element: false - }; - - if (item.value === curentValue) { - setCurrentItem(item); - } - - itemList.push(item); - } - } - - allItems = itemList; - } - - function filterList(term) { - var matches = []; - - if (editorParams.searchFunc) { - matches = editorParams.searchFunc(term, values); - } else { - if (term === "") { - - if (editorParams.showListOnEmpty) { - allItems.forEach(function (item) { - matches.push(item); - }); - } - } else { - allItems.forEach(function (item) { - - if (item.value !== null || typeof item.value !== "undefined") { - if (String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1) { - matches.push(item); - } - } - }); - } - } - - displayItems = matches; - - fillList(); - } - - function fillList() { - var current = false; - - while (listEl.firstChild) { - listEl.removeChild(listEl.firstChild); - }displayItems.forEach(function (item) { - var el = item.element; - - if (!el) { - el = document.createElement("div"); - el.classList.add("tabulator-edit-select-list-item"); - el.tabIndex = 0; - el.innerHTML = item.title; - - el.addEventListener("click", function () { - setCurrentItem(item); - chooseItem(); - }); - - el.addEventListener("mousedown", function () { - blurable = false; - - setTimeout(function () { - blurable = true; - }, 10); - }); - - item.element = el; - - if (item === currentItem) { - item.element.classList.add("active"); - current = true; - } - } - - listEl.appendChild(el); - }); - - if (!current) { - setCurrentItem(false); - } - } - - function setCurrentItem(item, showInputValue) { - if (currentItem && currentItem.element) { - currentItem.element.classList.remove("active"); - } - - currentItem = item; - - if (item && item.element) { - item.element.classList.add("active"); - } - } - - function chooseItem() { - hideList(); - - if (currentItem) { - if (initialValue !== currentItem.value) { - initialValue = currentItem.value; - input.value = currentItem.value; - success(input.value); - } else { - cancel(); - } - } else { - if (editorParams.freetext) { - initialValue = input.value; - success(input.value); - } else { - if (editorParams.allowEmpty && input.value === "") { - initialValue = input.value; - success(input.value); - } else { - cancel(); - } - } - } - } - - function cancelItem() { - hideList(); - cancel(); - } - - function showList() { - if (!listEl.parentNode) { - while (listEl.firstChild) { - listEl.removeChild(listEl.firstChild); - }if (editorParams.values === true) { - parseItems(getUniqueColumnValues(), initialValue); - } else { - parseItems(editorParams.values || [], initialValue); - } - - var offset = Tabulator.prototype.helpers.elOffset(cellEl); - - listEl.style.minWidth = cellEl.offsetWidth + "px"; - - listEl.style.top = offset.top + cellEl.offsetHeight + "px"; - listEl.style.left = offset.left + "px"; - document.body.appendChild(listEl); - } - } - - function hideList() { - if (listEl.parentNode) { - listEl.parentNode.removeChild(listEl); - } - } - - //style input - input.setAttribute("type", "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - //allow key based navigation - input.addEventListener("keydown", function (e) { - var index; - - switch (e.keyCode) { - case 38: - //up arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - - index = displayItems.indexOf(currentItem); - - if (index > 0) { - setCurrentItem(displayItems[index - 1]); - } else { - setCurrentItem(false); - } - break; - - case 40: - //down arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - - index = displayItems.indexOf(currentItem); - - if (index < displayItems.length - 1) { - if (index == -1) { - setCurrentItem(displayItems[0]); - } else { - setCurrentItem(displayItems[index + 1]); - } - } - break; - - case 13: - //enter - chooseItem(); - break; - - case 27: - //escape - cancelItem(); - break; - } - }); - - input.addEventListener("keyup", function (e) { - - switch (e.keyCode) { - case 38: //up arrow - case 37: //left arrow - case 39: //up arrow - case 40: //right arrow - case 13: //enter - case 27: - //escape - break; - - default: - filterList(input.value); - } - }); - - input.addEventListener("blur", function (e) { - if (blurable) { - chooseItem(); - } - }); - - input.addEventListener("focus", function (e) { - showList(); - input.value = initialValue; - filterList(initialValue); - }); - - //style list element - listEl = document.createElement("div"); - listEl.classList.add("tabulator-edit-select-list"); - - onRendered(function () { - input.style.height = "100%"; - input.focus(); - }); - - return input; - }, - - //start rating - star: function star(cell, onRendered, success, cancel, editorParams) { - var self = this, - element = cell.getElement(), - value = cell.getValue(), - maxStars = element.getElementsByTagName("svg").length || 5, - size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14, - stars = [], - starsHolder = document.createElement("div"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"); - - //change star type - function starChange(val) { - stars.forEach(function (star, i) { - if (i < val) { - if (self.table.browser == "ie") { - star.setAttribute("class", "tabulator-star-active"); - } else { - star.classList.replace("tabulator-star-inactive", "tabulator-star-active"); - } - - star.innerHTML = ''; - } else { - if (self.table.browser == "ie") { - star.setAttribute("class", "tabulator-star-inactive"); - } else { - star.classList.replace("tabulator-star-active", "tabulator-star-inactive"); - } - - star.innerHTML = ''; - } - }); - } - - //build stars - function buildStar(i) { - var nextStar = star.cloneNode(true); - - stars.push(nextStar); - - nextStar.addEventListener("mouseover", function (e) { - e.stopPropagation(); - starChange(i); - }); - - nextStar.addEventListener("click", function (e) { - e.stopPropagation(); - success(i); - }); - - starsHolder.appendChild(nextStar); - } - - //handle keyboard navigation value change - function changeValue(val) { - value = val; - starChange(val); - } - - //style cell - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - //style holding element - starsHolder.style.verticalAlign = "middle"; - starsHolder.style.display = "inline-block"; - starsHolder.style.padding = "4px"; - - //style star - star.setAttribute("width", size); - star.setAttribute("height", size); - star.setAttribute("viewBox", "0 0 512 512"); - star.setAttribute("xml:space", "preserve"); - star.style.padding = "0 1px"; - - //create correct number of stars - for (var i = 1; i <= maxStars; i++) { - buildStar(i); - } - - //ensure value does not exceed number of stars - value = Math.min(parseInt(value), maxStars); - - // set initial styling of stars - starChange(value); - - starsHolder.addEventListener("mouseover", function (e) { - starChange(0); - }); - - starsHolder.addEventListener("click", function (e) { - success(0); - }); - - element.addEventListener("blur", function (e) { - cancel(); - }); - - //allow key based navigation - element.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 39: - //right arrow - changeValue(value + 1); - break; - - case 37: - //left arrow - changeValue(value - 1); - break; - - case 13: - //enter - success(value); - break; - - case 27: - //escape - cancel(); - break; - } - }); - - return starsHolder; - }, - - //draggable progress bar - progress: function progress(cell, onRendered, success, cancel, editorParams) { - var element = cell.getElement(), - max = typeof editorParams.max === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("max") || 100 : editorParams.max, - min = typeof editorParams.min === "undefined" ? element.getElementsByTagName("div")[0].getAttribute("min") || 0 : editorParams.min, - percent = (max - min) / 100, - value = cell.getValue() || 0, - handle = document.createElement("div"), - bar = document.createElement("div"), - mouseDrag, - mouseDragWidth; - - //set new value - function updateValue() { - var calcVal = percent * Math.round(bar.offsetWidth / (element.clientWidth / 100)) + min; - success(calcVal); - element.setAttribute("aria-valuenow", calcVal); - element.setAttribute("aria-label", value); - } - - //style handle - handle.style.position = "absolute"; - handle.style.right = "0"; - handle.style.top = "0"; - handle.style.bottom = "0"; - handle.style.width = "5px"; - handle.classList.add("tabulator-progress-handle"); - - //style bar - bar.style.display = "inline-block"; - bar.style.position = "absolute"; - bar.style.top = "8px"; - bar.style.bottom = "8px"; - bar.style.left = "4px"; - bar.style.marginRight = "4px"; - bar.style.backgroundColor = "#488CE9"; - bar.style.maxWidth = "100%"; - bar.style.minWidth = "0%"; - - //style cell - element.style.padding = "0 4px"; - - //make sure value is in range - value = Math.min(parseFloat(value), max); - value = Math.max(parseFloat(value), min); - - //workout percentage - value = 100 - Math.round((value - min) / percent); - bar.style.right = value + "%"; - - element.setAttribute("aria-valuemin", min); - element.setAttribute("aria-valuemax", max); - - bar.appendChild(handle); - - handle.addEventListener("mousedown", function (e) { - mouseDrag = e.screenX; - mouseDragWidth = bar.offsetWidth; - }); - - handle.addEventListener("mouseover", function () { - handle.style.cursor = "ew-resize"; - }); - - element.addEventListener("mousemove", function (e) { - if (mouseDrag) { - bar.style.width = mouseDragWidth + e.screenX - mouseDrag + "px"; - } - }); - - element.addEventListener("mouseup", function (e) { - if (mouseDrag) { - e.stopPropagation(); - e.stopImmediatePropagation(); - - mouseDrag = false; - mouseDragWidth = false; - - updateValue(); - } - }); - - //allow key based navigation - element.addEventListener("keydown", function (e) { - switch (e.keyCode) { - case 39: - //right arrow - bar.style.width = bar.clientWidth + element.clientWidth / 100 + "px"; - break; - - case 37: - //left arrow - bar.style.width = bar.clientWidth - element.clientWidth / 100 + "px"; - break; - - case 13: - //enter - updateValue(); - break; - - case 27: - //escape - cancel(); - break; - - } - }); - - element.addEventListener("blur", function () { - cancel(); - }); - - return bar; - }, - - //checkbox - tickCross: function tickCross(cell, onRendered, success, cancel, editorParams) { - var value = cell.getValue(), - input = document.createElement("input"), - tristate = editorParams.tristate, - indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue, - indetermState = false; - - input.setAttribute("type", "checkbox"); - input.style.marginTop = "5px"; - input.style.boxSizing = "border-box"; - - input.value = value; - - if (tristate && (typeof value === "undefined" || value === indetermValue || value === "")) { - indetermState = true; - input.indeterminate = true; - } - - if (this.table.browser != "firefox") { - //prevent blur issue on mac firefox - onRendered(function () { - input.focus(); - }); - } - - input.checked = value === true || value === "true" || value === "True" || value === 1; - - function setValue(blur) { - if (tristate) { - if (!blur) { - if (input.checked && !indetermState) { - input.checked = false; - input.indeterminate = true; - indetermState = true; - return indetermValue; - } else { - indetermState = false; - return input.checked; - } - } else { - if (indetermState) { - return indetermValue; - } else { - return input.checked; - } - } - } else { - return input.checked; - } - } - - //submit new value on blur - input.addEventListener("change", function (e) { - success(setValue()); - }); - - input.addEventListener("blur", function (e) { - success(setValue(true)); - }); - - //submit new value on enter - input.addEventListener("keydown", function (e) { - if (e.keyCode == 13) { - success(setValue()); - } - if (e.keyCode == 27) { - cancel(); - } - }); - - return input; - } - }; - - Tabulator.prototype.registerModule("edit", Edit); - var Filter = function Filter(table) { - - this.table = table; //hold Tabulator object - - this.filterList = []; //hold filter list - this.headerFilters = {}; //hold column filters - this.headerFilterElements = []; //hold header filter elements for manipulation - this.headerFilterColumns = []; //hold columns that use header filters - - this.changed = false; //has filtering changed since last render - }; - - //initialize column header filter - Filter.prototype.initializeColumn = function (column, value) { - var self = this, - field = column.getField(), - prevSuccess, - params; - - //handle successfull value change - function success(value) { - var filterType = column.modules.filter.tagType == "input" && column.modules.filter.attrType == "text" || column.modules.filter.tagType == "textarea" ? "partial" : "match", - type = "", - filterFunc; - - if (typeof prevSuccess === "undefined" || prevSuccess !== value) { - - prevSuccess = value; - - if (!column.modules.filter.emptyFunc(value)) { - column.modules.filter.value = value; - - switch (_typeof(column.definition.headerFilterFunc)) { - case "string": - if (self.filters[column.definition.headerFilterFunc]) { - type = column.definition.headerFilterFunc; - filterFunc = function filterFunc(data) { - return self.filters[column.definition.headerFilterFunc](value, column.getFieldValue(data)); - }; - } else { - console.warn("Header Filter Error - Matching filter function not found: ", column.definition.headerFilterFunc); - } - break; - - case "function": - filterFunc = function filterFunc(data) { - var params = column.definition.headerFilterFuncParams || {}; - var fieldVal = column.getFieldValue(data); - - params = typeof params === "function" ? params(value, fieldVal, data) : params; - - return column.definition.headerFilterFunc(value, fieldVal, data, params); - }; - - type = filterFunc; - break; - } - - if (!filterFunc) { - switch (filterType) { - case "partial": - filterFunc = function filterFunc(data) { - return String(column.getFieldValue(data)).toLowerCase().indexOf(String(value).toLowerCase()) > -1; - }; - type = "like"; - break; - - default: - filterFunc = function filterFunc(data) { - return column.getFieldValue(data) == value; - }; - type = "="; - } - } - - self.headerFilters[field] = { value: value, func: filterFunc, type: type }; - } else { - delete self.headerFilters[field]; - } - - self.changed = true; - - self.table.rowManager.filterRefresh(); - } - } - - column.modules.filter = { - success: success, - attrType: false, - tagType: false, - emptyFunc: false - }; - - this.generateHeaderFilterElement(column); - }; - - Filter.prototype.generateHeaderFilterElement = function (column, initialValue) { - var self = this, - success = column.modules.filter.success, - field = column.getField(), - filterElement, - editor, - editorElement, - cellWrapper, - typingTimer, - searchTrigger, - params; - - //handle aborted edit - function cancel() {} - - if (column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode) { - column.modules.filter.headerElement.parentNode.removeChild(column.modules.filter.headerElement); - } - - if (field) { - - //set empty value function - column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function (value) { - return !value && value !== "0"; - }; - - filterElement = document.createElement("div"); - filterElement.classList.add("tabulator-header-filter"); - - //set column editor - switch (_typeof(column.definition.headerFilter)) { - case "string": - if (self.table.modules.edit.editors[column.definition.headerFilter]) { - editor = self.table.modules.edit.editors[column.definition.headerFilter]; - - if ((column.definition.headerFilter === "tick" || column.definition.headerFilter === "tickCross") && !column.definition.headerFilterEmptyCheck) { - column.modules.filter.emptyFunc = function (value) { - return value !== true && value !== false; - }; - } - } else { - console.warn("Filter Error - Cannot build header filter, No such editor found: ", column.definition.editor); - } - break; - - case "function": - editor = column.definition.headerFilter; - break; - - case "boolean": - if (column.modules.edit && column.modules.edit.editor) { - editor = column.modules.edit.editor; - } else { - if (column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]) { - editor = self.table.modules.edit.editors[column.definition.formatter]; - - if ((column.definition.formatter === "tick" || column.definition.formatter === "tickCross") && !column.definition.headerFilterEmptyCheck) { - column.modules.filter.emptyFunc = function (value) { - return value !== true && value !== false; - }; - } - } else { - editor = self.table.modules.edit.editors["input"]; - } - } - break; - } - - if (editor) { - - cellWrapper = { - getValue: function getValue() { - return typeof initialValue !== "undefined" ? initialValue : ""; - }, - getField: function getField() { - return column.definition.field; - }, - getElement: function getElement() { - return filterElement; - }, - getColumn: function getColumn() { - return column.getComponent(); - }, - getRow: function getRow() { - return { - normalizeHeight: function normalizeHeight() {} - }; - } - }; - - params = column.definition.headerFilterParams || {}; - - params = typeof params === "function" ? params.call(self.table) : params; - - editorElement = editor.call(this.table.modules.edit, cellWrapper, function () {}, success, cancel, params); - - if (!editorElement) { - console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false"); - return; - } - - if (!(editorElement instanceof Node)) { - console.warn("Filter Error - Cannot add filter to " + field + " column, editor should return an instance of Node, the editor returned:", editorElement); - return; - } - - //set Placeholder Text - if (field) { - self.table.modules.localize.bind("headerFilters|columns|" + column.definition.field, function (value) { - editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : self.table.modules.localize.getText("headerFilters|default")); - }); - } else { - self.table.modules.localize.bind("headerFilters|default", function (value) { - editorElement.setAttribute("placeholder", typeof self.column.definition.headerFilterPlaceholder !== "undefined" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value); - }); - } - - //focus on element on click - editorElement.addEventListener("click", function (e) { - e.stopPropagation(); - editorElement.focus(); - }); - - //live update filters as user types - typingTimer = false; - - searchTrigger = function searchTrigger(e) { - if (typingTimer) { - clearTimeout(typingTimer); - } - - typingTimer = setTimeout(function () { - success(editorElement.value); - }, 300); - }; - - column.modules.filter.headerElement = editorElement; - column.modules.filter.attrType = editorElement.hasAttribute("type") ? editorElement.getAttribute("type").toLowerCase() : ""; - column.modules.filter.tagType = editorElement.tagName.toLowerCase(); - - if (column.definition.headerFilterLiveFilter !== false) { - - if (!(column.definition.headerFilter === "autocomplete" || column.definition.editor === "autocomplete" && column.definition.headerFilter === true)) { - editorElement.addEventListener("keyup", searchTrigger); - editorElement.addEventListener("search", searchTrigger); - - //update number filtered columns on change - if (column.modules.filter.attrType == "number") { - editorElement.addEventListener("change", function (e) { - success(editorElement.value); - }); - } - - //change text inputs to search inputs to allow for clearing of field - if (column.modules.filter.attrType == "text" && this.table.browser !== "ie") { - editorElement.setAttribute("type", "search"); - // editorElement.off("change blur"); //prevent blur from triggering filter and preventing selection click - } - } - - //prevent input and select elements from propegating click to column sorters etc - if (column.modules.filter.tagType == "input" || column.modules.filter.tagType == "select" || column.modules.filter.tagType == "textarea") { - editorElement.addEventListener("mousedown", function (e) { - e.stopPropagation(); - }); - } - } - - filterElement.appendChild(editorElement); - - column.contentElement.appendChild(filterElement); - - self.headerFilterElements.push(editorElement); - self.headerFilterColumns.push(column); - } - } else { - console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title); - } - }; - - //hide all header filter elements (used to ensure correct column widths in "fitData" layout mode) - Filter.prototype.hideHeaderFilterElements = function () { - this.headerFilterElements.forEach(function (element) { - element.style.display = 'none'; - }); - }; - - //show all header filter elements (used to ensure correct column widths in "fitData" layout mode) - Filter.prototype.showHeaderFilterElements = function () { - this.headerFilterElements.forEach(function (element) { - element.style.display = ''; - }); - }; - - //programatically set value of header filter - Filter.prototype.setHeaderFilterFocus = function (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - column.modules.filter.headerElement.focus(); - } else { - console.warn("Column Filter Focus Error - No header filter set on column:", column.getField()); - } - }; - - //programatically set value of header filter - Filter.prototype.setHeaderFilterValue = function (column, value) { - if (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - this.generateHeaderFilterElement(column, value); - column.modules.filter.success(value); - } else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } - }; - - Filter.prototype.reloadHeaderFilter = function (column) { - if (column) { - if (column.modules.filter && column.modules.filter.headerElement) { - this.generateHeaderFilterElement(column, column.modules.filter.value); - } else { - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } - }; - - //check if the filters has changed since last use - Filter.prototype.hasChanged = function () { - var changed = this.changed; - this.changed = false; - return changed; - }; - - //set standard filters - Filter.prototype.setFilter = function (field, type, value) { - var self = this; - - self.filterList = []; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value }]; - } - - self.addFilter(field); - }; - - //add filter to array - Filter.prototype.addFilter = function (field, type, value) { - var self = this; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value }]; - } - - field.forEach(function (filter) { - - filter = self.findFilter(filter); - - if (filter) { - self.filterList.push(filter); - - self.changed = true; - } - }); - - if (this.table.options.persistentFilter && this.table.modExists("persistence", true)) { - this.table.modules.persistence.save("filter"); - } - }; - - Filter.prototype.findFilter = function (filter) { - var self = this, - column; - - if (Array.isArray(filter)) { - return this.findSubFilters(filter); - } - - var filterFunc = false; - - if (typeof filter.field == "function") { - filterFunc = function filterFunc(data) { - return filter.field(data, filter.type || {}); // pass params to custom filter function - }; - } else { - - if (self.filters[filter.type]) { - - column = self.table.columnManager.getColumnByField(filter.field); - - if (column) { - filterFunc = function filterFunc(data) { - return self.filters[filter.type](filter.value, column.getFieldValue(data)); - }; - } else { - filterFunc = function filterFunc(data) { - return self.filters[filter.type](filter.value, data[filter.field]); - }; - } - } else { - console.warn("Filter Error - No such filter type found, ignoring: ", filter.type); - } - } - - filter.func = filterFunc; - - return filter.func ? filter : false; - }; - - Filter.prototype.findSubFilters = function (filters) { - var self = this, - output = []; - - filters.forEach(function (filter) { - filter = self.findFilter(filter); - - if (filter) { - output.push(filter); - } - }); - - return output.length ? output : false; - }; - - //get all filters - Filter.prototype.getFilters = function (all, ajax) { - var self = this, - output = []; - - if (all) { - output = self.getHeaderFilters(); - } - - self.filterList.forEach(function (filter) { - output.push({ field: filter.field, type: filter.type, value: filter.value }); - }); - - if (ajax) { - output.forEach(function (item) { - if (typeof item.type == "function") { - item.type = "function"; - } - }); - } - - return output; - }; - - //get all filters - Filter.prototype.getHeaderFilters = function () { - var self = this, - output = []; - - for (var key in this.headerFilters) { - output.push({ field: key, type: this.headerFilters[key].type, value: this.headerFilters[key].value }); - } - - return output; - }; - - //remove filter from array - Filter.prototype.removeFilter = function (field, type, value) { - var self = this; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value }]; - } - - field.forEach(function (filter) { - var index = -1; - - if (_typeof(filter.field) == "object") { - index = self.filterList.findIndex(function (element) { - return filter === element; - }); - } else { - index = self.filterList.findIndex(function (element) { - return filter.field === element.field && filter.type === element.type && filter.value === element.value; - }); - } - - if (index > -1) { - self.filterList.splice(index, 1); - self.changed = true; - } else { - console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type); - } - }); - - if (this.table.options.persistentFilter && this.table.modExists("persistence", true)) { - this.table.modules.persistence.save("filter"); - } - }; - - //clear filters - Filter.prototype.clearFilter = function (all) { - this.filterList = []; - - if (all) { - this.clearHeaderFilter(); - } - - this.changed = true; - - if (this.table.options.persistentFilter && this.table.modExists("persistence", true)) { - this.table.modules.persistence.save("filter"); - } - }; - - //clear header filters - Filter.prototype.clearHeaderFilter = function () { - var self = this; - - this.headerFilters = {}; - - this.headerFilterColumns.forEach(function (column) { - column.modules.filter.value = null; - self.reloadHeaderFilter(column); - }); - - this.changed = true; - }; - - //search data and return matching rows - Filter.prototype.search = function (searchType, field, type, value) { - var self = this, - activeRows = [], - filterList = []; - - if (!Array.isArray(field)) { - field = [{ field: field, type: type, value: value }]; - } - - field.forEach(function (filter) { - filter = self.findFilter(filter); - - if (filter) { - filterList.push(filter); - } - }); - - this.table.rowManager.rows.forEach(function (row) { - var match = true; - - filterList.forEach(function (filter) { - if (!self.filterRecurse(filter, row.getData())) { - match = false; - } - }); - - if (match) { - activeRows.push(searchType === "data" ? row.getData("data") : row.getComponent()); - } - }); - - return activeRows; - }; - - //filter row array - Filter.prototype.filter = function (rowList, filters) { - var self = this, - activeRows = [], - activeRowComponents = []; - - if (self.table.options.dataFiltering) { - self.table.options.dataFiltering.call(self.table, self.getFilters()); - } - - if (!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)) { - - rowList.forEach(function (row) { - if (self.filterRow(row)) { - activeRows.push(row); - } - }); - } else { - activeRows = rowList.slice(0); - } - - if (self.table.options.dataFiltered) { - - activeRows.forEach(function (row) { - activeRowComponents.push(row.getComponent()); - }); - - self.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents); - } - - return activeRows; - }; - - //filter individual row - Filter.prototype.filterRow = function (row, filters) { - var self = this, - match = true, - data = row.getData(); - - self.filterList.forEach(function (filter) { - if (!self.filterRecurse(filter, data)) { - match = false; - } - }); - - for (var field in self.headerFilters) { - if (!self.headerFilters[field].func(data)) { - match = false; - } - } - - return match; - }; - - Filter.prototype.filterRecurse = function (filter, data) { - var self = this, - match = false; - - if (Array.isArray(filter)) { - filter.forEach(function (subFilter) { - if (self.filterRecurse(subFilter, data)) { - match = true; - } - }); - } else { - match = filter.func(data); - } - - return match; - }; - - //list of available filters - Filter.prototype.filters = { - - //equal to - "=": function _(filterVal, rowVal) { - return rowVal == filterVal ? true : false; - }, - - //less than - "<": function _(filterVal, rowVal) { - return rowVal < filterVal ? true : false; - }, - - //less than or equal to - "<=": function _(filterVal, rowVal) { - return rowVal <= filterVal ? true : false; - }, - - //greater than - ">": function _(filterVal, rowVal) { - return rowVal > filterVal ? true : false; - }, - - //greater than or equal to - ">=": function _(filterVal, rowVal) { - return rowVal >= filterVal ? true : false; - }, - - //not equal to - "!=": function _(filterVal, rowVal) { - return rowVal != filterVal ? true : false; - }, - - "regex": function regex(filterVal, rowVal) { - - if (typeof filterVal == "string") { - filterVal = new RegExp(filterVal); - } - - return filterVal.test(rowVal); - }, - - //contains the string - "like": function like(filterVal, rowVal) { - if (filterVal === null || typeof filterVal === "undefined") { - return rowVal === filterVal ? true : false; - } else { - if (typeof rowVal !== 'undefined' && rowVal !== null) { - return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1 ? true : false; - } else { - return false; - } - } - }, - - //in array - "in": function _in(filterVal, rowVal) { - if (Array.isArray(filterVal)) { - return filterVal.indexOf(rowVal) > -1; - } else { - console.warn("Filter Error - filter value is not an array:", filterVal); - return false; - } - } - }; - - Tabulator.prototype.registerModule("filter", Filter); - var Format = function Format(table) { - this.table = table; //hold Tabulator object - }; - - //initialize column formatter - Format.prototype.initializeColumn = function (column) { - var self = this, - config = { params: column.definition.formatterParams || {} }; - - //set column formatter - switch (_typeof(column.definition.formatter)) { - case "string": - - if (column.definition.formatter === "tick") { - column.definition.formatter = "tickCross"; - - if (typeof config.params.crossElement == "undefined") { - config.params.crossElement = false; - } - - console.warn("DEPRECATION WANRING - the tick formatter has been depricated, please use the tickCross formatter with the crossElement param set to false"); - } - - if (self.formatters[column.definition.formatter]) { - config.formatter = self.formatters[column.definition.formatter]; - } else { - console.warn("Formatter Error - No such formatter found: ", column.definition.formatter); - config.formatter = self.formatters.plaintext; - } - break; - - case "function": - config.formatter = column.definition.formatter; - break; - - default: - config.formatter = self.formatters.plaintext; - break; - } - - column.modules.format = config; - }; - - Format.prototype.cellRendered = function (cell) { - if (cell.column.modules.format.renderedCallback) { - cell.column.modules.format.renderedCallback(); - } - }; - - //return a formatted value for a cell - Format.prototype.formatValue = function (cell) { - var component = cell.getComponent(), - params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params; - - function onRendered(callback) { - cell.column.modules.format.renderedCallback = callback; - } - - return cell.column.modules.format.formatter.call(this, component, params, onRendered); - }; - - Format.prototype.sanitizeHTML = function (value) { - if (value) { - var entityMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '/': '/', - '`': '`', - '=': '=' - }; - - return String(value).replace(/[&<>"'`=\/]/g, function (s) { - return entityMap[s]; - }); - } else { - return value; - } - }; - - Format.prototype.emptyToSpace = function (value) { - return value === null || typeof value === "undefined" ? " " : value; - }; - - //get formatter for cell - Format.prototype.getFormatter = function (formatter) { - var formatter; - - switch (typeof formatter === 'undefined' ? 'undefined' : _typeof(formatter)) { - case "string": - if (this.formatters[formatter]) { - formatter = this.formatters[formatter]; - } else { - console.warn("Formatter Error - No such formatter found: ", formatter); - formatter = this.formatters.plaintext; - } - break; - - case "function": - formatter = formatter; - break; - - default: - formatter = this.formatters.plaintext; - break; - } - - return formatter; - }; - - //default data formatters - Format.prototype.formatters = { - //plain text value - plaintext: function plaintext(cell, formatterParams, onRendered) { - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - }, - - //html text value - html: function html(cell, formatterParams, onRendered) { - return cell.getValue(); - }, - - //multiline text area - textarea: function textarea(cell, formatterParams, onRendered) { - cell.getElement().style.whiteSpace = "pre-wrap"; - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - }, - - //currency formatting - money: function money(cell, formatterParams, onRendered) { - var floatVal = parseFloat(cell.getValue()), - number, - integer, - decimal, - rgx; - - var decimalSym = formatterParams.decimal || "."; - var thousandSym = formatterParams.thousand || ","; - var symbol = formatterParams.symbol || ""; - var after = !!formatterParams.symbolAfter; - var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2; - - if (isNaN(floatVal)) { - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - } - - number = precision !== false ? floatVal.toFixed(precision) : floatVal; - number = String(number).split("."); - - integer = number[0]; - decimal = number.length > 1 ? decimalSym + number[1] : ""; - - rgx = /(\d+)(\d{3})/; - - while (rgx.test(integer)) { - integer = integer.replace(rgx, "$1" + thousandSym + "$2"); - } - - return after ? integer + decimal + symbol : symbol + integer + decimal; - }, - - //clickable anchor tag - link: function link(cell, formatterParams, onRendered) { - var value = this.sanitizeHTML(cell.getValue()), - urlPrefix = formatterParams.urlPrefix || "", - label = this.emptyToSpace(value), - el = document.createElement("a"), - data; - - if (formatterParams.labelField) { - data = cell.getData(); - label = data[formatterParams.labelField]; - } - - if (formatterParams.label) { - switch (_typeof(formatterParams.label)) { - case "string": - label = formatterParams.label; - break; - - case "function": - label = formatterParams.label(cell); - break; - } - } - - if (formatterParams.urlField) { - data = cell.getData(); - value = data[formatterParams.urlField]; - } - - if (formatterParams.url) { - switch (_typeof(formatterParams.url)) { - case "string": - value = formatterParams.url; - break; - - case "function": - value = formatterParams.url(cell); - break; - } - } - - el.setAttribute("href", urlPrefix + value); - - if (formatterParams.target) { - el.setAttribute("target", formatterParams.target); - } - - el.innerHTML = this.emptyToSpace(label); - - return el; - }, - - //image element - image: function image(cell, formatterParams, onRendered) { - var el = document.createElement("img"); - el.setAttribute("src", cell.getValue()); - - switch (_typeof(formatterParams.height)) { - case "number": - element.style.height = formatterParams.height + "px"; - break; - - case "string": - element.style.height = formatterParams.height; - break; - } - - switch (_typeof(formatterParams.width)) { - case "number": - element.style.width = formatterParams.width + "px"; - break; - - case "string": - element.style.width = formatterParams.width; - break; - } - - el.addEventListener("load", function () { - cell.getRow().normalizeHeight(); - }); - - return el; - }, - - //tick or cross - tickCross: function tickCross(cell, formatterParams, onRendered) { - var value = cell.getValue(), - element = cell.getElement(), - empty = formatterParams.allowEmpty, - truthy = formatterParams.allowTruthy, - tick = typeof formatterParams.tickElement !== "undefined" ? formatterParams.tickElement : '', - cross = typeof formatterParams.crossElement !== "undefined" ? formatterParams.crossElement : ''; - - if (truthy && value || value === true || value === "true" || value === "True" || value === 1 || value === "1") { - element.setAttribute("aria-checked", true); - return tick || ""; - } else { - if (empty && (value === "null" || value === "" || value === null || typeof value === "undefined")) { - element.setAttribute("aria-checked", "mixed"); - return ""; - } else { - element.setAttribute("aria-checked", false); - return cross || ""; - } - } - }, - - datetime: function datetime(cell, formatterParams, onRendered) { - var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss"; - var outputFormat = formatterParams.outputFormat || "DD/MM/YYYY hh:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var value = cell.getValue(); - - var newDatetime = moment(value, inputFormat); - - if (newDatetime.isValid()) { - return newDatetime.format(outputFormat); - } else { - - if (invalid === true) { - return value; - } else if (typeof invalid === "function") { - return invalid(value); - } else { - return invalid; - } - } - }, - - datetimediff: function datetime(cell, formatterParams, onRendered) { - var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false; - var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : undefined; - var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false; - var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : moment(); - var value = cell.getValue(); - - var newDatetime = moment(value, inputFormat); - - if (newDatetime.isValid()) { - if (humanize) { - return moment.duration(newDatetime.diff(date)).humanize(suffix); - } else { - return newDatetime.diff(date, unit) + (suffix ? " " + suffix : ""); - } - } else { - - if (invalid === true) { - return value; - } else if (typeof invalid === "function") { - return invalid(value); - } else { - return invalid; - } - } - }, - - //select - lookup: function lookup(cell, formatterParams, onRendered) { - var value = cell.getValue(); - - if (typeof formatterParams[value] === "undefined") { - console.warn('Missing display value for ' + value); - return value; - } - - return formatterParams[value]; - }, - - //star rating - star: function star(cell, formatterParams, onRendered) { - var value = cell.getValue(), - element = cell.getElement(), - maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5, - stars = document.createElement("span"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"), - starActive = '', - starInactive = ''; - - //style stars holder - stars.style.verticalAlign = "middle"; - - //style star - star.setAttribute("width", "14"); - star.setAttribute("height", "14"); - star.setAttribute("viewBox", "0 0 512 512"); - star.setAttribute("xml:space", "preserve"); - star.style.padding = "0 1px"; - - value = parseInt(value) < maxStars ? parseInt(value) : maxStars; - - for (var i = 1; i <= maxStars; i++) { - var nextStar = star.cloneNode(true); - nextStar.innerHTML = i <= value ? starActive : starInactive; - - stars.appendChild(nextStar); - } - - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - element.setAttribute("aria-label", value); - - return stars; - }, - - //progress bar - progress: function progress(cell, formatterParams, onRendered) { - //progress bar - var value = this.sanitizeHTML(cell.getValue()) || 0, - element = cell.getElement(), - max = formatterParams && formatterParams.max ? formatterParams.max : 100, - min = formatterParams && formatterParams.min ? formatterParams.min : 0, - legendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : "center", - percent, - percentValue, - color, - legend, - legendColor, - top, - left, - right, - bottom; - - //make sure value is in range - percentValue = parseFloat(value) <= max ? parseFloat(value) : max; - percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min; - - //workout percentage - percent = (max - min) / 100; - percentValue = Math.round((percentValue - min) / percent); - - //set bar color - switch (_typeof(formatterParams.color)) { - case "string": - color = formatterParams.color; - break; - case "function": - color = formatterParams.color(value); - break; - case "object": - if (Array.isArray(formatterParams.color)) { - var unit = 100 / formatterParams.color.length; - var index = Math.floor(percentValue / unit); - - index = Math.min(index, formatterParams.color.length - 1); - index = Math.max(index, 0); - color = formatterParams.color[index]; - break; - } - default: - color = "#2DC214"; - } - - //generate legend - switch (_typeof(formatterParams.legend)) { - case "string": - legend = formatterParams.legend; - break; - case "function": - legend = formatterParams.legend(value); - break; - case "boolean": - legend = value; - break; - default: - legend = false; - } - - //set legend color - switch (_typeof(formatterParams.legendColor)) { - case "string": - legendColor = formatterParams.legendColor; - break; - case "function": - legendColor = formatterParams.legendColor(value); - break; - case "object": - if (Array.isArray(formatterParams.legendColor)) { - var unit = 100 / formatterParams.legendColor.length; - var index = Math.floor(percentValue / unit); - - index = Math.min(index, formatterParams.legendColor.length - 1); - index = Math.max(index, 0); - legendColor = formatterParams.legendColor[index]; - } - break; - default: - legendColor = "#000"; - } - - element.style.minWidth = "30px"; - element.style.position = "relative"; - - element.setAttribute("aria-label", percentValue); - - return "
" + (legend ? "
" + legend + "
" : ""); - }, - - //background color - color: function color(cell, formatterParams, onRendered) { - cell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue()); - return ""; - }, - - //tick icon - buttonTick: function buttonTick(cell, formatterParams, onRendered) { - return ''; - }, - - //cross icon - buttonCross: function buttonCross(cell, formatterParams, onRendered) { - return ''; - }, - - //current row number - rownum: function rownum(cell, formatterParams, onRendered) { - return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1; - }, - - //row handle - handle: function handle(cell, formatterParams, onRendered) { - cell.getElement().classList.add("tabulator-row-handle"); - return "
"; - }, - - responsiveCollapse: function responsiveCollapse(cell, formatterParams, onRendered) { - var self = this, - open = false, - el = document.createElement("div"); - - function toggleList(isOpen) { - var collapse = cell.getRow().getElement().getElementsByClassName("tabulator-responsive-collapse")[0]; - - open = isOpen; - - if (open) { - el.classList.add("open"); - if (collapse) { - collapse.style.display = ''; - } - } else { - el.classList.remove("open"); - if (collapse) { - collapse.style.display = 'none'; - } - } - } - - el.classList.add("tabulator-responsive-collapse-toggle"); - el.innerHTML = "+-"; - - cell.getElement().classList.add("tabulator-row-handle"); - - if (self.table.options.responsiveLayoutCollapseStartOpen) { - open = true; - } - - el.addEventListener("click", function () { - toggleList(!open); - }); - - toggleList(open); - - return el; - } - }; - - Tabulator.prototype.registerModule("format", Format); - var FrozenColumns = function FrozenColumns(table) { - this.table = table; //hold Tabulator object - this.leftColumns = []; - this.rightColumns = []; - this.leftMargin = 0; - this.rightMargin = 0; - this.initializationMode = "left"; - this.active = false; - }; - - //reset initial state - FrozenColumns.prototype.reset = function () { - this.initializationMode = "left"; - this.leftColumns = []; - this.rightColumns = []; - this.active = false; - }; - - //initialize specific column - FrozenColumns.prototype.initializeColumn = function (column) { - var config = { margin: 0, edge: false }; - - if (column.definition.frozen) { - - if (!column.parent.isGroup) { - - if (!column.isGroup) { - config.position = this.initializationMode; - - if (this.initializationMode == "left") { - this.leftColumns.push(column); - } else { - this.rightColumns.unshift(column); - } - - this.active = true; - - column.modules.frozen = config; - } else { - console.warn("Frozen Column Error - Column Groups cannot be frozen"); - } - } else { - console.warn("Frozen Column Error - Grouped columns cannot be frozen"); - } - } else { - this.initializationMode = "right"; - } - }; - - //layout columns appropropriatly - FrozenColumns.prototype.layout = function () { - var self = this, - tableHolder = this.table.rowManager.element, - rightMargin = 0; - - if (self.active) { - - //calculate row padding - - self.leftMargin = self._calcSpace(self.leftColumns, self.leftColumns.length); - self.table.columnManager.headersElement.style.marginLeft = self.leftMargin + "px"; - - self.rightMargin = self._calcSpace(self.rightColumns, self.rightColumns.length); - self.table.columnManager.element.style.paddingRight = self.rightMargin + "px"; - - self.table.rowManager.activeRows.forEach(function (row) { - self.layoutRow(row); - }); - - if (self.table.modExists("columnCalcs")) { - if (self.table.modules.columnCalcs.topInitialized && self.table.modules.columnCalcs.topRow) { - self.layoutRow(self.table.modules.columnCalcs.topRow); - } - if (self.table.modules.columnCalcs.botInitialized && self.table.modules.columnCalcs.botRow) { - self.layoutRow(self.table.modules.columnCalcs.botRow); - } - } - - //calculate left columns - self.leftColumns.forEach(function (column, i) { - column.modules.frozen.margin = self._calcSpace(self.leftColumns, i) + self.table.columnManager.scrollLeft; - - if (i == self.leftColumns.length - 1) { - column.modules.frozen.edge = true; - } else { - column.modules.frozen.edge = false; - } - - self.layoutColumn(column); - }); - - //calculate right frozen columns - rightMargin = self.table.rowManager.element.clientWidth + self.table.columnManager.scrollLeft; - - // if(tableHolder.scrollHeight > tableHolder.clientHeight){ - // rightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth; - // } - - self.rightColumns.forEach(function (column, i) { - column.modules.frozen.margin = rightMargin - self._calcSpace(self.rightColumns, i + 1); - - if (i == self.rightColumns.length - 1) { - column.modules.frozen.edge = true; - } else { - column.modules.frozen.edge = false; - } - - self.layoutColumn(column); - }); - - this.table.rowManager.tableElement.style.marginRight = this.rightMargin + "px"; - } - }; - - FrozenColumns.prototype.layoutColumn = function (column) { - var self = this; - - self.layoutElement(column.getElement(), column); - - column.cells.forEach(function (cell) { - self.layoutElement(cell.getElement(), column); - }); - }; - - FrozenColumns.prototype.layoutRow = function (row) { - var rowEl = row.getElement(); - - rowEl.style.paddingLeft = this.leftMargin + "px"; - // rowEl.style.paddingRight = this.rightMargin + "px"; - }; - - FrozenColumns.prototype.layoutElement = function (element, column) { - - if (column.modules.frozen) { - element.style.position = "absolute"; - element.style.left = column.modules.frozen.margin + "px"; - - element.classList.add("tabulator-frozen"); - - if (column.modules.frozen.edge) { - element.classList.add("tabulator-frozen-" + column.modules.frozen.position); - } - } - }; - - FrozenColumns.prototype._calcSpace = function (columns, index) { - var width = 0; - - for (var i = 0; i < index; i++) { - if (columns[i].visible) { - width += columns[i].getWidth(); - } - } - - return width; - }; - - Tabulator.prototype.registerModule("frozenColumns", FrozenColumns); - var FrozenRows = function FrozenRows(table) { - this.table = table; //hold Tabulator object - this.topElement = document.createElement("div"); - this.rows = []; - this.displayIndex = 0; //index in display pipeline - }; - - FrozenRows.prototype.initialize = function () { - this.rows = []; - - this.topElement.classList.add("tabulator-frozen-rows-holder"); - - // this.table.columnManager.element.append(this.topElement); - this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling); - }; - - FrozenRows.prototype.setDisplayIndex = function (index) { - this.displayIndex = index; - }; - - FrozenRows.prototype.getDisplayIndex = function () { - return this.displayIndex; - }; - - FrozenRows.prototype.isFrozen = function () { - return !!this.rows.length; - }; - - //filter frozen rows out of display data - FrozenRows.prototype.getRows = function (rows) { - var self = this, - frozen = [], - output = rows.slice(0); - - this.rows.forEach(function (row) { - var index = output.indexOf(row); - - if (index > -1) { - output.splice(index, 1); - } - }); - - return output; - }; - - FrozenRows.prototype.freezeRow = function (row) { - if (!row.modules.frozen) { - row.modules.frozen = true; - this.topElement.appendChild(row.getElement()); - row.initialize(); - row.normalizeHeight(); - this.table.rowManager.adjustTableSize(); - - this.rows.push(row); - - this.table.rowManager.refreshActiveData("display"); - - this.styleRows(); - } else { - console.warn("Freeze Error - Row is already frozen"); - } - }; - - FrozenRows.prototype.unfreezeRow = function (row) { - var index = this.rows.indexOf(row); - - if (row.modules.frozen) { - - row.modules.frozen = false; - - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - - this.table.rowManager.adjustTableSize(); - - this.rows.splice(index, 1); - - this.table.rowManager.refreshActiveData("display"); - - if (this.rows.length) { - this.styleRows(); - } - } else { - console.warn("Freeze Error - Row is already unfrozen"); - } - }; - - FrozenRows.prototype.styleRows = function (row) { - var self = this; - - this.rows.forEach(function (row, i) { - self.table.rowManager.styleRow(row, i); - }); - }; - - Tabulator.prototype.registerModule("frozenRows", FrozenRows); - - //public group object - var GroupComponent = function GroupComponent(group) { - this._group = group; - this.type = "GroupComponent"; - }; - - GroupComponent.prototype.getKey = function () { - return this._group.key; - }; - - GroupComponent.prototype.getElement = function () { - return this._group.element; - }; - - GroupComponent.prototype.getRows = function () { - return this._group.getRows(true); - }; - - GroupComponent.prototype.getSubGroups = function () { - return this._group.getSubGroups(true); - }; - - GroupComponent.prototype.getParentGroup = function () { - return this._group.parent ? this._group.parent.getComponent() : false; - }; - - GroupComponent.prototype.getVisibility = function () { - return this._group.visible; - }; - - GroupComponent.prototype.show = function () { - this._group.show(); - }; - - GroupComponent.prototype.hide = function () { - this._group.hide(); - }; - - GroupComponent.prototype.toggle = function () { - this._group.toggleVisibility(); - }; - - GroupComponent.prototype._getSelf = function () { - return this._group; - }; - - GroupComponent.prototype.getTable = function () { - return this._group.table; - }; - - ////////////////////////////////////////////////// - //////////////// Group Functions ///////////////// - ////////////////////////////////////////////////// - - var Group = function Group(groupManager, parent, level, key, field, generator, oldGroup) { - - this.groupManager = groupManager; - this.parent = parent; - this.key = key; - this.level = level; - this.field = field; - this.hasSubGroups = level < groupManager.groupIDLookups.length - 1; - this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow; - this.type = "group"; //type of element - this.old = oldGroup; - this.rows = []; - this.groups = []; - this.groupList = []; - this.generator = generator; - this.elementContents = false; - this.height = 0; - this.outerHeight = 0; - this.initialized = false; - this.calcs = {}; - this.initialized = false; - this.modules = {}; - - this.visible = oldGroup ? oldGroup.visible : typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0]; - - this.createElements(); - this.addBindings(); - - this.createValueGroups(); - }; - - Group.prototype.createElements = function () { - this.element = document.createElement("div"); - this.element.classList.add("tabulator-row"); - this.element.classList.add("tabulator-group"); - this.element.classList.add("tabulator-group-level-" + this.level); - this.element.setAttribute("role", "rowgroup"); - - this.arrowElement = document.createElement("div"); - this.arrowElement.classList.add("tabulator-arrow"); - }; - - Group.prototype.createValueGroups = function () { - var _this31 = this; - - var level = this.level + 1; - if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) { - this.groupManager.allowedValues[level].forEach(function (value) { - _this31._createGroup(value, level); - }); - } - }; - - Group.prototype.addBindings = function () { - var self = this, - dblTap, - tapHold, - tap, - toggleElement; - - //handle group click events - if (self.groupManager.table.options.groupClick) { - self.element.addEventListener("click", function (e) { - self.groupManager.table.options.groupClick(e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupDblClick) { - self.element.addEventListener("dblclick", function (e) { - self.groupManager.table.options.groupDblClick(e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupContext) { - self.element.addEventListener("contextmenu", function (e) { - self.groupManager.table.options.groupContext(e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupTap) { - - tap = false; - - self.element.addEventListener("touchstart", function (e) { - tap = true; - }); - - self.element.addEventListener("touchend", function (e) { - if (tap) { - self.groupManager.table.options.groupTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (self.groupManager.table.options.groupDblTap) { - - dblTap = null; - - self.element.addEventListener("touchend", function (e) { - - if (dblTap) { - clearTimeout(dblTap); - dblTap = null; - - self.groupManager.table.options.groupDblTap(e, self.getComponent()); - } else { - - dblTap = setTimeout(function () { - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - }); - } - - if (self.groupManager.table.options.groupTapHold) { - - tapHold = null; - - self.element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - tap = false; - self.groupManager.table.options.groupTapHold(e, self.getComponent()); - }, 1000); - }); - - self.element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; - }); - } - - if (self.groupManager.table.options.groupToggleElement) { - toggleElement = self.groupManager.table.options.groupToggleElement == "arrow" ? self.arrowElement : self.element; - - toggleElement.addEventListener("click", function (e) { - e.stopPropagation(); - e.stopImmediatePropagation(); - self.toggleVisibility(); - }); - } - }; - - Group.prototype._createGroup = function (groupID, level) { - var groupKey = level + "_" + groupID; - var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false); - - this.groups[groupKey] = group; - this.groupList.push(group); - }; - - Group.prototype._addRowToGroup = function (row) { - - var level = this.level + 1; - - if (this.hasSubGroups) { - var groupID = this.groupManager.groupIDLookups[level].func(row.getData()), - groupKey = level + "_" + groupID; - - if (this.groupManager.allowedValues && this.groupManager.allowedValues[level]) { - if (this.groups[groupKey]) { - this.groups[groupKey].addRow(row); - } - } else { - if (!this.groups[groupKey]) { - this._createGroup(groupID, level); - } - - this.groups[groupKey].addRow(row); - } - } - }; - - Group.prototype._addRow = function (row) { - this.rows.push(row); - row.modules.group = this; - }; - - Group.prototype.insertRow = function (row, to, after) { - var data = this.conformRowData({}); - - row.updateData(data); - - var toIndex = this.rows.indexOf(to); - - if (toIndex > -1) { - if (after) { - this.rows.splice(toIndex + 1, 0, row); - } else { - this.rows.splice(toIndex, 0, row); - } - } else { - if (after) { - this.rows.push(row); - } else { - this.rows.unshift(row); - } - } - - row.modules.group = this; - - this.generateGroupHeaderContents(); - - if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") { - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - }; - - Group.prototype.getRowIndex = function (row) {}; - - //update row data to match grouping contraints - Group.prototype.conformRowData = function (data) { - if (this.field) { - data[this.field] = this.key; - } else { - console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"); - } - - if (this.parent) { - data = this.parent.conformRowData(data); - } - - return data; - }; - - Group.prototype.removeRow = function (row) { - var index = this.rows.indexOf(row); - - if (index > -1) { - this.rows.splice(index, 1); - } - - if (!this.rows.length) { - if (this.parent) { - this.parent.removeGroup(this); - } else { - this.groupManager.removeGroup(this); - } - - this.groupManager.updateGroupRows(true); - } else { - this.generateGroupHeaderContents(); - if (this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table") { - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - } - }; - - Group.prototype.removeGroup = function (group) { - var groupKey = group.level + "_" + group.key, - index; - - if (this.groups[groupKey]) { - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if (index > -1) { - this.groupList.splice(index, 1); - } - - if (!this.groupList.length) { - if (this.parent) { - this.parent.removeGroup(this); - } else { - this.groupManager.removeGroup(this); - } - } - } - }; - - Group.prototype.getHeadersAndRows = function () { - var output = []; - - output.push(this); - - this._visSet(); - - if (this.visible) { - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - output = output.concat(group.getHeadersAndRows()); - }); - } else { - if (this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()) { - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - - output = output.concat(this.rows); - - if (this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) { - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - } else { - if (!this.groupList.length && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.options.groupClosedShowCalcs) { - if (this.groupManager.table.modExists("columnCalcs")) { - if (this.groupManager.table.modules.columnCalcs.hasTopCalcs()) { - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - - if (this.groupManager.table.modules.columnCalcs.hasBottomCalcs()) { - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - } - } - - return output; - }; - - Group.prototype.getData = function (visible, transform) { - var self = this, - output = []; - - this._visSet(); - - if (!visible || visible && this.visible) { - this.rows.forEach(function (row) { - output.push(row.getData(transform || "data")); - }); - } - - return output; - }; - - // Group.prototype.getRows = function(){ - // this._visSet(); - - // return this.visible ? this.rows : []; - // }; - - Group.prototype.getRowCount = function () { - var count = 0; - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - count += group.getRowCount(); - }); - } else { - count = this.rows.length; - } - return count; - }; - - Group.prototype.toggleVisibility = function () { - if (this.visible) { - this.hide(); - } else { - this.show(); - } - }; - - Group.prototype.hide = function () { - this.visible = false; - - if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) { - - this.element.classList.remove("tabulator-group-visible"); - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - - var el; - - if (group.calcs.top) { - el = group.calcs.top.getElement(); - el.parentNode.removeChild(el); - } - - if (group.calcs.bottom) { - el = group.calcs.bottom.getElement(); - el.parentNode.removeChild(el); - } - - var rows = group.getHeadersAndRows(); - - rows.forEach(function (row) { - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - }); - }); - } else { - this.rows.forEach(function (row) { - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - }); - } - - this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex()); - } else { - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false); - }; - - Group.prototype.show = function () { - var self = this; - - self.visible = true; - - if (this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination) { - - this.element.classList.add("tabulator-group-visible"); - - var prev = self.getElement(); - - if (this.groupList.length) { - this.groupList.forEach(function (group) { - var rows = group.getHeadersAndRows(); - - rows.forEach(function (row) { - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - }); - } else { - self.rows.forEach(function (row) { - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - } - - this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex()); - } else { - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true); - }; - - Group.prototype._visSet = function () { - var data = []; - - if (typeof this.visible == "function") { - - this.rows.forEach(function (row) { - data.push(row.getData()); - }); - - this.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent()); - } - }; - - Group.prototype.getRowGroup = function (row) { - var match = false; - if (this.groupList.length) { - this.groupList.forEach(function (group) { - var result = group.getRowGroup(row); - - if (result) { - match = result; - } - }); - } else { - if (this.rows.find(function (item) { - return item === row; - })) { - match = this; - } - } - - return match; - }; - - Group.prototype.getSubGroups = function (component) { - var output = []; - - this.groupList.forEach(function (child) { - output.push(component ? child.getComponent() : child); - }); - - return output; - }; - - Group.prototype.getRows = function (compoment) { - var output = []; - - this.rows.forEach(function (row) { - output.push(compoment ? row.getComponent() : row); - }); - - return output; - }; - - Group.prototype.generateGroupHeaderContents = function () { - var data = []; - - this.rows.forEach(function (row) { - data.push(row.getData()); - }); - - this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent()); - - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); - }if (typeof this.elementContents === "string") { - this.element.innerHTML = this.elementContents; - } else { - this.element.appendChild(this.elementContents); - } - - this.element.insertBefore(this.arrowElement, this.element.firstChild); - }; - - ////////////// Standard Row Functions ////////////// - - Group.prototype.getElement = function () { - this.addBindingsd = false; - - this._visSet(); - - if (this.visible) { - this.element.classList.add("tabulator-group-visible"); - } else { - this.element.classList.remove("tabulator-group-visible"); - } - - this.element.childNodes.forEach(function (child) { - child.parentNode.removeChild(child); - }); - - this.generateGroupHeaderContents(); - - // this.addBindings(); - - return this.element; - }; - - //normalize the height of elements in the row - Group.prototype.normalizeHeight = function () { - this.setHeight(this.element.clientHeight); - }; - - Group.prototype.initialize = function (force) { - if (!this.initialized || force) { - this.normalizeHeight(); - this.initialized = true; - } - }; - - Group.prototype.reinitialize = function () { - this.initialized = false; - this.height = 0; - - if (Tabulator.prototype.helpers.elVisible(this.element)) { - this.initialize(true); - } - }; - - Group.prototype.setHeight = function (height) { - if (this.height != height) { - this.height = height; - this.outerHeight = this.element.offsetHeight; - } - }; - - //return rows outer height - Group.prototype.getHeight = function () { - return this.outerHeight; - }; - - Group.prototype.getGroup = function () { - return this; - }; - - Group.prototype.reinitializeHeight = function () {}; - Group.prototype.calcHeight = function () {}; - Group.prototype.setCellHeight = function () {}; - Group.prototype.clearCellHeight = function () {}; - - //////////////// Object Generation ///////////////// - Group.prototype.getComponent = function () { - return new GroupComponent(this); - }; - - ////////////////////////////////////////////////// - ////////////// Group Row Extension /////////////// - ////////////////////////////////////////////////// - - var GroupRows = function GroupRows(table) { - - this.table = table; //hold Tabulator object - - this.groupIDLookups = false; //enable table grouping and set field to group by - this.startOpen = [function () { - return false; - }]; //starting state of group - this.headerGenerator = [function () { - return ""; - }]; - this.groupList = []; //ordered list of groups - this.allowedValues = false; - this.groups = {}; //hold row groups - this.displayIndex = 0; //index in display pipeline - }; - - //initialize group configuration - GroupRows.prototype.initialize = function () { - var self = this, - groupBy = self.table.options.groupBy, - startOpen = self.table.options.groupStartOpen, - groupHeader = self.table.options.groupHeader; - - this.allowedValues = self.table.options.groupValues; - - self.headerGenerator = [function () { - return ""; - }]; - this.startOpen = [function () { - return false; - }]; //starting state of group - - self.table.modules.localize.bind("groups|item", function (langValue, lang) { - self.headerGenerator[0] = function (value, count, data) { - //header layout function - return (typeof value === "undefined" ? "" : value) + "(" + count + " " + (count === 1 ? langValue : lang.groups.items) + ")"; - }; - }); - - this.groupIDLookups = []; - - if (Array.isArray(groupBy) || groupBy) { - if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both") { - this.table.modules.columnCalcs.removeCalcs(); - } - } else { - if (this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group") { - - var cols = this.table.columnManager.getRealColumns(); - - cols.forEach(function (col) { - if (col.definition.topCalc) { - self.table.modules.columnCalcs.initializeTopRow(); - } - - if (col.definition.bottomCalc) { - self.table.modules.columnCalcs.initializeBottomRow(); - } - }); - } - } - - if (!Array.isArray(groupBy)) { - groupBy = [groupBy]; - } - - groupBy.forEach(function (group, i) { - var lookupFunc, column; - - if (typeof group == "function") { - lookupFunc = group; - } else { - column = self.table.columnManager.getColumnByField(group); - - if (column) { - lookupFunc = function lookupFunc(data) { - return column.getFieldValue(data); - }; - } else { - lookupFunc = function lookupFunc(data) { - return data[group]; - }; - } - } - - self.groupIDLookups.push({ - field: typeof group === "function" ? false : group, - func: lookupFunc, - values: self.allowedValues ? self.allowedValues[i] : false - }); - }); - - if (startOpen) { - - if (!Array.isArray(startOpen)) { - startOpen = [startOpen]; - } - - startOpen.forEach(function (level) { - level = typeof level == "function" ? level : function () { - return true; - }; - }); - - self.startOpen = startOpen; - } - - if (groupHeader) { - self.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader]; - } - - this.initialized = true; - }; - - GroupRows.prototype.setDisplayIndex = function (index) { - this.displayIndex = index; - }; - - GroupRows.prototype.getDisplayIndex = function () { - return this.displayIndex; - }; - - //return appropriate rows with group headers - GroupRows.prototype.getRows = function (rows) { - if (this.groupIDLookups.length) { - - this.table.options.dataGrouping.call(this.table); - - this.generateGroups(rows); - - if (this.table.options.dataGrouped) { - this.table.options.dataGrouped.call(this.table, this.getGroups(true)); - } - - return this.updateGroupRows(); - } else { - return rows.slice(0); - } - }; - - GroupRows.prototype.getGroups = function (compoment) { - var groupComponents = []; - - this.groupList.forEach(function (group) { - groupComponents.push(compoment ? group.getComponent() : group); - }); - - return groupComponents; - }; - - GroupRows.prototype.pullGroupListData = function (groupList) { - var self = this; - var groupListData = []; - - groupList.forEach(function (group) { - var groupHeader = {}; - groupHeader.level = 0; - groupHeader.rowCount = 0; - groupHeader.headerContent = ""; - var childData = []; - - if (group.hasSubGroups) { - childData = self.pullGroupListData(group.groupList); - - groupHeader.level = group.level; - groupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers - groupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group); - - groupListData.push(groupHeader); - groupListData = groupListData.concat(childData); - } else { - groupHeader.level = group.level; - groupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group); - groupHeader.rowCount = group.getRows().length; - - groupListData.push(groupHeader); - - group.getRows().forEach(function (row) { - groupListData.push(row.getData("data")); - }); - } - }); - - return groupListData; - }; - - GroupRows.prototype.getGroupedData = function () { - - return this.pullGroupListData(this.groupList); - }; - - GroupRows.prototype.getRowGroup = function (row) { - var match = false; - - this.groupList.forEach(function (group) { - var result = group.getRowGroup(row); - - if (result) { - match = result; - } - }); - - return match; - }; - - GroupRows.prototype.countGroups = function () { - return this.groupList.length; - }; - - GroupRows.prototype.generateGroups = function (rows) { - var self = this, - oldGroups = self.groups; - - self.groups = {}; - self.groupList = []; - - if (this.allowedValues && this.allowedValues[0]) { - this.allowedValues[0].forEach(function (value) { - self.createGroup(value, 0, oldGroups); - }); - - rows.forEach(function (row) { - self.assignRowToExistingGroup(row, oldGroups); - }); - } else { - rows.forEach(function (row) { - self.assignRowToGroup(row, oldGroups); - }); - } - }; - - GroupRows.prototype.createGroup = function (groupID, level, oldGroups) { - var groupKey = level + "_" + groupID, - group; - - oldGroups = oldGroups || []; - - group = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]); - - this.groups[groupKey] = group; - this.groupList.push(group); - }; - - GroupRows.prototype.assignRowToGroup = function (row, oldGroups) { - var groupID = this.groupIDLookups[0].func(row.getData()), - groupKey = "0_" + groupID; - - if (!this.groups[groupKey]) { - this.createGroup(groupID, 0, oldGroups); - } - - this.groups[groupKey].addRow(row); - }; - - GroupRows.prototype.assignRowToExistingGroup = function (row, oldGroups) { - var groupID = this.groupIDLookups[0].func(row.getData()), - groupKey = "0_" + groupID; - - if (this.groups[groupKey]) { - this.groups[groupKey].addRow(row); - } - }; - - GroupRows.prototype.assignRowToGroup = function (row, oldGroups) { - var groupID = this.groupIDLookups[0].func(row.getData()), - newGroupNeeded = !this.groups["0_" + groupID]; - - if (newGroupNeeded) { - this.createGroup(groupID, 0, oldGroups); - } - - this.groups["0_" + groupID].addRow(row); - - return !newGroupNeeded; - }; - - GroupRows.prototype.updateGroupRows = function (force) { - var self = this, - output = [], - oldRowCount; - - self.groupList.forEach(function (group) { - output = output.concat(group.getHeadersAndRows()); - }); - - //force update of table display - if (force) { - - var displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex()); - - if (displayIndex !== true) { - this.setDisplayIndex(displayIndex); - } - - self.table.rowManager.refreshActiveData("group", true, true); - } - - return output; - }; - - GroupRows.prototype.scrollHeaders = function (left) { - this.groupList.forEach(function (group) { - group.arrowElement.style.marginLeft = left + "px"; - }); - }; - - GroupRows.prototype.removeGroup = function (group) { - var groupKey = group.level + "_" + group.key, - index; - - if (this.groups[groupKey]) { - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if (index > -1) { - this.groupList.splice(index, 1); - } - } - }; - - Tabulator.prototype.registerModule("groupRows", GroupRows); - var History = function History(table) { - this.table = table; //hold Tabulator object - - this.history = []; - this.index = -1; - }; - - History.prototype.clear = function () { - this.history = []; - this.index = -1; - }; - - History.prototype.action = function (type, component, data) { - - this.history = this.history.slice(0, this.index + 1); - - this.history.push({ - type: type, - component: component, - data: data - }); - - this.index++; - }; - - History.prototype.getHistoryUndoSize = function () { - return this.index + 1; - }; - - History.prototype.getHistoryRedoSize = function () { - return this.history.length - (this.index + 1); - }; - - History.prototype.undo = function () { - - if (this.index > -1) { - var action = this.history[this.index]; - - this.undoers[action.type].call(this, action); - - this.index--; - - this.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data); - - return true; - } else { - console.warn("History Undo Error - No more history to undo"); - return false; - } - }; - - History.prototype.redo = function () { - if (this.history.length - 1 > this.index) { - - this.index++; - - var action = this.history[this.index]; - - this.redoers[action.type].call(this, action); - - this.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data); - - return true; - } else { - console.warn("History Redo Error - No more history to redo"); - return false; - } - }; - - History.prototype.undoers = { - cellEdit: function cellEdit(action) { - action.component.setValueProcessData(action.data.oldValue); - }, - - rowAdd: function rowAdd(action) { - action.component.deleteActual(); - }, - - rowDelete: function rowDelete(action) { - var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index); - - this._rebindRow(action.component, newRow); - }, - - rowMove: function rowMove(action) { - this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.pos], false); - this.table.rowManager.redraw(); - } - }; - - History.prototype.redoers = { - cellEdit: function cellEdit(action) { - action.component.setValueProcessData(action.data.newValue); - }, - - rowAdd: function rowAdd(action) { - var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index); - - this._rebindRow(action.component, newRow); - }, - - rowDelete: function rowDelete(action) { - action.component.deleteActual(); - }, - - rowMove: function rowMove(action) { - this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.pos], false); - this.table.rowManager.redraw(); - } - }; - - //rebind rows to new element after deletion - History.prototype._rebindRow = function (oldRow, newRow) { - this.history.forEach(function (action) { - if (action.component instanceof Row) { - if (action.component === oldRow) { - action.component = newRow; - } - } else if (action.component instanceof Cell) { - if (action.component.row === oldRow) { - var field = action.component.column.getField(); - - if (field) { - action.component = newRow.getCell(field); - } - } - } - }); - }; - - Tabulator.prototype.registerModule("history", History); - var HtmlTableImport = function HtmlTableImport(table) { - this.table = table; //hold Tabulator object - this.fieldIndex = []; - this.hasIndex = false; - }; - - HtmlTableImport.prototype.parseTable = function () { - var self = this, - element = self.table.element, - options = self.table.options, - columns = options.columns, - headers = element.getElementsByTagName("th"), - rows = element.getElementsByTagName("tbody")[0], - data = [], - newTable; - - self.hasIndex = false; - - self.table.options.htmlImporting.call(this.table); - - rows = rows ? rows.getElementsByTagName("tr") : []; - - //check for tablator inline options - self._extractOptions(element, options); - - if (headers.length) { - self._extractHeaders(headers, rows); - } else { - self._generateBlankHeaders(headers, rows); - } - - //iterate through table rows and build data set - for (var index = 0; index < rows.length; index++) { - var row = rows[index], - cells = row.getElementsByTagName("td"), - item = {}; - - //create index if the dont exist in table - if (!self.hasIndex) { - item[options.index] = index; - } - - for (var i = 0; i < cells.length; i++) { - var cell = cells[i]; - if (typeof this.fieldIndex[i] !== "undefined") { - item[this.fieldIndex[i]] = cell.innerHTML; - } - } - - //add row data to item - data.push(item); - } - - //create new element - var newElement = document.createElement("div"); - - //transfer attributes to new element - var attributes = element.attributes; - - // loop through attributes and apply them on div - - for (var i in attributes) { - if (_typeof(attributes[i]) == "object") { - newElement.setAttribute(attributes[i].name, attributes[i].value); - } - } - - // replace table with div element - element.parentNode.replaceChild(newElement, element); - - options.data = data; - - self.table.options.htmlImported.call(this.table); - - // // newElement.tabulator(options); - - this.table.element = newElement; - }; - - //extract tabulator attribute options - HtmlTableImport.prototype._extractOptions = function (element, options) { - var attributes = element.attributes; - - for (var index in attributes) { - var attrib = attributes[index]; - var name; - - if ((typeof attrib === 'undefined' ? 'undefined' : _typeof(attrib)) == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0) { - name = attrib.name.replace("tabulator-", ""); - - for (var key in options) { - if (key.toLowerCase() == name) { - options[key] = this._attribValue(attrib.value); - } - } - } - } - }; - - //get value of attribute - HtmlTableImport.prototype._attribValue = function (value) { - if (value === "true") { - return true; - } - - if (value === "false") { - return false; - } - - return value; - }; - - //find column if it has already been defined - HtmlTableImport.prototype._findCol = function (title) { - var match = this.table.options.columns.find(function (column) { - return column.title === title; - }); - - return match || false; - }; - - //extract column from headers - HtmlTableImport.prototype._extractHeaders = function (headers, rows) { - for (var index = 0; index < headers.length; index++) { - var header = headers[index], - exists = false, - col = this._findCol(header.textContent), - width, - attributes; - - if (col) { - exists = true; - } else { - col = { title: header.textContent.trim() }; - } - - if (!col.field) { - col.field = header.textContent.trim().toLowerCase().replace(" ", "_"); - } - - width = header.getAttribute("width"); - - if (width && !col.width) { - col.width = width; - } - - //check for tablator inline options - attributes = header.attributes; - - // //check for tablator inline options - this._extractOptions(header, col); - - for (var i in attributes) { - var attrib = attributes[i], - name; - - if ((typeof attrib === 'undefined' ? 'undefined' : _typeof(attrib)) == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0) { - - name = attrib.name.replace("tabulator-", ""); - - col[name] = this._attribValue(attrib.value); - } - } - - this.fieldIndex[index] = col.field; - - if (col.field == this.table.options.index) { - this.hasIndex = true; - } - - if (!exists) { - this.table.options.columns.push(col); - } - } - }; - - //generate blank headers - HtmlTableImport.prototype._generateBlankHeaders = function (headers, rows) { - for (var index = 0; index < headers.length; index++) { - var header = headers[index], - col = { title: "", field: "col" + index }; - - this.fieldIndex[index] = col.field; - - var width = header.getAttribute("width"); - - if (width) { - col.width = width; - } - - this.table.options.columns.push(col); - } - }; - - Tabulator.prototype.registerModule("htmlTableImport", HtmlTableImport); - var Keybindings = function Keybindings(table) { - this.table = table; //hold Tabulator object - this.watchKeys = null; - this.pressedKeys = null; - this.keyupBinding = false; - this.keydownBinding = false; - }; - - Keybindings.prototype.initialize = function () { - var bindings = this.table.options.keybindings, - mergedBindings = {}; - - this.watchKeys = {}; - this.pressedKeys = []; - - if (bindings !== false) { - - for (var key in this.bindings) { - mergedBindings[key] = this.bindings[key]; - } - - if (Object.keys(bindings).length) { - - for (var _key in bindings) { - mergedBindings[_key] = bindings[_key]; - } - } - - this.mapBindings(mergedBindings); - this.bindEvents(); - } - }; - - Keybindings.prototype.mapBindings = function (bindings) { - var _this32 = this; - - var self = this; - - var _loop2 = function _loop2(key) { - - if (_this32.actions[key]) { - - if (bindings[key]) { - - if (_typeof(bindings[key]) !== "object") { - bindings[key] = [bindings[key]]; - } - - bindings[key].forEach(function (binding) { - self.mapBinding(key, binding); - }); - } - } else { - console.warn("Key Binding Error - no such action:", key); - } - }; - - for (var key in bindings) { - _loop2(key); - } - }; - - Keybindings.prototype.mapBinding = function (action, symbolsList) { - var self = this; - - var binding = { - action: this.actions[action], - keys: [], - ctrl: false, - shift: false - }; - - var symbols = symbolsList.toString().toLowerCase().split(" ").join("").split("+"); - - symbols.forEach(function (symbol) { - switch (symbol) { - case "ctrl": - binding.ctrl = true; - break; - - case "shift": - binding.shift = true; - break; - - default: - symbol = parseInt(symbol); - binding.keys.push(symbol); - - if (!self.watchKeys[symbol]) { - self.watchKeys[symbol] = []; - } - - self.watchKeys[symbol].push(binding); - } - }); - }; - - Keybindings.prototype.bindEvents = function () { - var self = this; - - this.keyupBinding = function (e) { - var code = e.keyCode; - var bindings = self.watchKeys[code]; - - if (bindings) { - - self.pressedKeys.push(code); - - bindings.forEach(function (binding) { - self.checkBinding(e, binding); - }); - } - }; - - this.keydownBinding = function (e) { - var code = e.keyCode; - var bindings = self.watchKeys[code]; - - if (bindings) { - - var index = self.pressedKeys.indexOf(code); - - if (index > -1) { - self.pressedKeys.splice(index, 1); - } - } - }; - - this.table.element.addEventListener("keydown", this.keyupBinding); - - this.table.element.addEventListener("keyup", this.keydownBinding); - }; - - Keybindings.prototype.clearBindings = function () { - if (this.keyupBinding) { - this.table.element.removeEventListener("keydown", this.keyupBinding); - } - - if (this.keydownBinding) { - this.table.element.removeEventListener("keyup", this.keydownBinding); - } - }; - - Keybindings.prototype.checkBinding = function (e, binding) { - var self = this, - match = true; - - if (e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift) { - binding.keys.forEach(function (key) { - var index = self.pressedKeys.indexOf(key); - - if (index == -1) { - match = false; - } - }); - - if (match) { - binding.action.call(self, e); - } - - return true; - } - - return false; - }; - - //default bindings - Keybindings.prototype.bindings = { - navPrev: "shift + 9", - navNext: 9, - navUp: 38, - navDown: 40, - scrollPageUp: 33, - scrollPageDown: 34, - scrollToStart: 36, - scrollToEnd: 35, - undo: "ctrl + 90", - redo: "ctrl + 89", - copyToClipboard: "ctrl + 67" - }; - - //default actions - Keybindings.prototype.actions = { - keyBlock: function keyBlock(e) { - e.stopPropagation(); - e.preventDefault(); - }, - scrollPageUp: function scrollPageUp(e) { - var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop - rowManager.height, - scrollMax = rowManager.element.scrollHeight; - - e.preventDefault(); - - if (rowManager.displayRowsCount) { - if (newPos >= 0) { - rowManager.element.scrollTop = newPos; - } else { - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - } - - this.table.element.focus(); - }, - scrollPageDown: function scrollPageDown(e) { - var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop + rowManager.height, - scrollMax = rowManager.element.scrollHeight; - - e.preventDefault(); - - if (rowManager.displayRowsCount) { - if (newPos <= scrollMax) { - rowManager.element.scrollTop = newPos; - } else { - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - } - - this.table.element.focus(); - }, - scrollToStart: function scrollToStart(e) { - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if (rowManager.displayRowsCount) { - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - - this.table.element.focus(); - }, - scrollToEnd: function scrollToEnd(e) { - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if (rowManager.displayRowsCount) { - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - - this.table.element.focus(); - }, - navPrev: function navPrev(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().prev(); - } - } - }, - - navNext: function navNext(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().next(); - } - } - }, - - navLeft: function navLeft(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().left(); - } - } - }, - - navRight: function navRight(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().right(); - } - } - }, - - navUp: function navUp(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().up(); - } - } - }, - - navDown: function navDown(e) { - var cell = false; - - if (this.table.modExists("edit")) { - cell = this.table.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - cell.nav().down(); - } - } - }, - - undo: function undo(e) { - var cell = false; - if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) { - - cell = this.table.modules.edit.currentCell; - - if (!cell) { - e.preventDefault(); - this.table.modules.history.undo(); - } - } - }, - - redo: function redo(e) { - var cell = false; - if (this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")) { - - cell = this.table.modules.edit.currentCell; - - if (!cell) { - e.preventDefault(); - this.table.modules.history.redo(); - } - } - }, - - copyToClipboard: function copyToClipboard(e) { - if (!this.table.modules.edit.currentCell) { - if (this.table.modExists("clipboard", true)) { - this.table.modules.clipboard.copy(!this.table.options.selectable || this.table.options.selectable == "highlight" ? "active" : "selected", null, null, null, true); - } - } - } - }; - - Tabulator.prototype.registerModule("keybindings", Keybindings); - var MoveColumns = function MoveColumns(table) { - this.table = table; //hold Tabulator object - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating column header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving column - this.toCol = false; //destination column - this.toColAfter = false; //position of moving column relative to the desitnation column - this.startX = 0; //starting position within header element - this.autoScrollMargin = 40; //auto scroll on edge when within margin - this.autoScrollStep = 5; //auto scroll distance in pixels - this.autoScrollTimeout = false; //auto scroll timeout - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); - }; - - MoveColumns.prototype.createPlaceholderElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.classList.add("tabulator-col-placeholder"); - - return el; - }; - - MoveColumns.prototype.initializeColumn = function (column) { - var self = this, - config = {}, - colEl; - - if (!column.modules.frozen) { - - colEl = column.getElement(); - - config.mousemove = function (e) { - if (column.parent === self.moving.parent) { - if (e.pageX - Tabulator.prototype.helpers.elOffset(colEl).left + self.table.columnManager.element.scrollLeft > column.getWidth() / 2) { - if (self.toCol !== column || !self.toColAfter) { - colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling); - self.moveColumn(column, true); - } - } else { - if (self.toCol !== column || self.toColAfter) { - colEl.parentNode.insertBefore(self.placeholderElement, colEl); - self.moveColumn(column, false); - } - } - } - }.bind(self); - - colEl.addEventListener("mousedown", function (e) { - if (e.which === 1) { - self.checkTimeout = setTimeout(function () { - self.startMove(e, column); - }, self.checkPeriod); - } - }); - - colEl.addEventListener("mouseup", function (e) { - if (e.which === 1) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - } - }); - } - - column.modules.moveColumn = config; - }; - - MoveColumns.prototype.startMove = function (e, column) { - var element = column.getElement(); - - this.moving = column; - this.startX = e.pageX - Tabulator.prototype.helpers.elOffset(element).left; - - this.table.element.classList.add("tabulator-block-select"); - - //create placeholder - - this.placeholderElement.style.width = column.getWidth() + "px"; - this.placeholderElement.style.height = column.getHeight() + "px"; - - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - this.table.columnManager.getElement().appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.bottom = "0"; - - this._bindMouseMove(); - - document.body.addEventListener("mousemove", this.moveHover); - document.body.addEventListener("mouseup", this.endMove); - - this.moveHover(e); - }; - - MoveColumns.prototype._bindMouseMove = function () { - this.table.columnManager.columnsByIndex.forEach(function (column) { - if (column.modules.moveColumn.mousemove) { - column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); - }; - - MoveColumns.prototype._unbindMouseMove = function () { - this.table.columnManager.columnsByIndex.forEach(function (column) { - if (column.modules.moveColumn.mousemove) { - column.getElement().removeEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); - }; - - MoveColumns.prototype.moveColumn = function (column, after) { - var movingCells = this.moving.getCells(); - - this.toCol = column; - this.toColAfter = after; - - if (after) { - column.getCells().forEach(function (cell, i) { - var cellEl = cell.getElement(); - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling); - }); - } else { - column.getCells().forEach(function (cell, i) { - var cellEl = cell.getElement(); - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl); - }); - } - }; - - MoveColumns.prototype.endMove = function (e) { - if (e.which === 1) { - this._unbindMouseMove(); - - this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling); - this.placeholderElement.parentNode.removeChild(this.placeholderElement); - this.hoverElement.parentNode.removeChild(this.hoverElement); - - this.table.element.classList.remove("tabulator-block-select"); - - if (this.toCol) { - this.table.columnManager.moveColumn(this.moving, this.toCol, this.toColAfter); - } - - this.moving = false; - this.toCol = false; - this.toColAfter = false; - - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - } - }; - - MoveColumns.prototype.moveHover = function (e) { - var self = this, - columnHolder = self.table.columnManager.getElement(), - scrollLeft = columnHolder.scrollLeft, - xPos = e.pageX - Tabulator.prototype.helpers.elOffset(columnHolder).left + scrollLeft, - scrollPos; - - self.hoverElement.style.left = xPos - self.startX + "px"; - - if (xPos - scrollLeft < self.autoScrollMargin) { - if (!self.autoScrollTimeout) { - self.autoScrollTimeout = setTimeout(function () { - scrollPos = Math.max(0, scrollLeft - 5); - self.table.rowManager.getElement().scrollLeft = scrollPos; - self.autoScrollTimeout = false; - }, 1); - } - } - - if (scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin) { - if (!self.autoScrollTimeout) { - self.autoScrollTimeout = setTimeout(function () { - scrollPos = Math.min(columnHolder.clientWidth, scrollLeft + 5); - self.table.rowManager.getElement().scrollLeft = scrollPos; - self.autoScrollTimeout = false; - }, 1); - } - } - }; - - Tabulator.prototype.registerModule("moveColumn", MoveColumns); - var MoveRows = function MoveRows(table) { - - this.table = table; //hold Tabulator object - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating row header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving row - this.toRow = false; //destination row - this.toRowAfter = false; //position of moving row relative to the desitnation row - this.hasHandle = false; //row has handle instead of fully movable row - this.startY = 0; //starting Y position within header element - this.startX = 0; //starting X position within header element - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); - this.tableRowDropEvent = false; - - this.connection = false; - this.connections = []; - - this.connectedTable = false; - this.connectedRow = false; - }; - - MoveRows.prototype.createPlaceholderElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - el.classList.add("tabulator-row-placeholder"); - - return el; - }; - - MoveRows.prototype.initialize = function (handle) { - this.connection = this.table.options.movableRowsConnectedTables; - }; - - MoveRows.prototype.setHandle = function (handle) { - this.hasHandle = handle; - }; - - MoveRows.prototype.initializeRow = function (row) { - var self = this, - config = {}, - rowEl; - - //inter table drag drop - config.mouseup = function (e) { - self.tableRowDrop(e, row); - }.bind(self); - - //same table drag drop - config.mousemove = function (e) { - if (e.pageY - Tabulator.prototype.helpers.elOffset(row.element).top + self.table.rowManager.element.scrollTop > row.getHeight() / 2) { - if (self.toRow !== row || !self.toRowAfter) { - var rowEl = row.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); - self.moveRow(row, true); - } - } else { - if (self.toRow !== row || self.toRowAfter) { - var rowEl = row.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl); - self.moveRow(row, false); - } - } - }.bind(self); - - if (!this.hasHandle) { - - rowEl = row.getElement(); - - rowEl.addEventListener("mousedown", function (e) { - if (e.which === 1) { - self.checkTimeout = setTimeout(function () { - self.startMove(e, row); - }, self.checkPeriod); - } - }); - - rowEl.addEventListener("mouseup", function (e) { - if (e.which === 1) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - } - }); - } - - row.modules.moveRow = config; - }; - - MoveRows.prototype.initializeCell = function (cell) { - var self = this, - cellEl = cell.getElement(); - - cellEl.addEventListener("mousedown", function (e) { - if (e.which === 1) { - self.checkTimeout = setTimeout(function () { - self.startMove(e, cell.row); - }, self.checkPeriod); - } - }); - - cellEl.addEventListener("mouseup", function (e) { - if (e.which === 1) { - if (self.checkTimeout) { - clearTimeout(self.checkTimeout); - } - } - }); - }; - - MoveRows.prototype._bindMouseMove = function () { - var self = this; - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row" && row.modules.moveRow.mousemove) { - row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); - }; - - MoveRows.prototype._unbindMouseMove = function () { - var self = this; - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row" && row.modules.moveRow.mousemove) { - row.getElement().removeEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); - }; - - MoveRows.prototype.startMove = function (e, row) { - var element = row.getElement(); - - this.setStartPosition(e, row); - - this.moving = row; - - this.table.element.classList.add("tabulator-block-select"); - - //create placeholder - this.placeholderElement.style.width = row.getWidth() + "px"; - this.placeholderElement.style.height = row.getHeight() + "px"; - - if (!this.connection) { - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - } else { - this.table.element.classList.add("tabulator-movingrow-sending"); - this.connectToTables(row); - } - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - if (this.connection) { - document.body.appendChild(this.hoverElement); - this.hoverElement.style.left = "0"; - this.hoverElement.style.top = "0"; - this.hoverElement.style.width = this.table.element.clientWidth + "px"; - this.hoverElement.style.whiteSpace = "nowrap"; - this.hoverElement.style.overflow = "hidden"; - this.hoverElement.style.pointerEvents = "none"; - } else { - this.table.rowManager.getTableElement().appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.top = "0"; - - this._bindMouseMove(); - } - - document.body.addEventListener("mousemove", this.moveHover); - document.body.addEventListener("mouseup", this.endMove); - - this.moveHover(e); - }; - - MoveRows.prototype.setStartPosition = function (e, row) { - var element, position; - - element = row.getElement(); - if (this.connection) { - position = element.getBoundingClientRect(); - - this.startX = position.left - e.pageX + window.scrollX; - this.startY = position.top - e.pageY + window.scrollY; - } else { - this.startY = e.pageY - element.getBoundingClientRect().top; - } - }; - - MoveRows.prototype.endMove = function (e) { - if (!e || e.which === 1) { - this._unbindMouseMove(); - - if (!this.connection) { - this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling); - this.placeholderElement.parentNode.removeChild(this.placeholderElement); - } - - this.hoverElement.parentNode.removeChild(this.hoverElement); - - this.table.element.classList.remove("tabulator-block-select"); - - if (this.toRow) { - this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter); - } - - this.moving = false; - this.toRow = false; - this.toRowAfter = false; - - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - - if (this.connection) { - this.table.element.classList.remove("tabulator-movingrow-sending"); - this.disconnectFromTables(); - } - } - }; - - MoveRows.prototype.moveRow = function (row, after) { - this.toRow = row; - this.toRowAfter = after; - }; - - MoveRows.prototype.moveHover = function (e) { - if (this.connection) { - this.moveHoverConnections.call(this, e); - } else { - this.moveHoverTable.call(this, e); - } - }; - - MoveRows.prototype.moveHoverTable = function (e) { - var rowHolder = this.table.rowManager.getElement(), - scrollTop = rowHolder.scrollTop, - yPos = e.pageY - rowHolder.getBoundingClientRect().top + scrollTop, - scrollPos; - - this.hoverElement.style.top = yPos - this.startY + "px"; - }; - - MoveRows.prototype.moveHoverConnections = function (e) { - this.hoverElement.style.left = this.startX + e.pageX + "px"; - this.hoverElement.style.top = this.startY + e.pageY + "px"; - }; - - //establish connection with other tables - MoveRows.prototype.connectToTables = function (row) { - var self = this, - connections = this.table.modules.comms.getConnections(this.connection); - - this.table.options.movableRowsSendingStart.call(this.table, connections); - - this.table.modules.comms.send(this.connection, "moveRow", "connect", { - row: row - }); - }; - - //disconnect from other tables - MoveRows.prototype.disconnectFromTables = function () { - var self = this, - connections = this.table.modules.comms.getConnections(this.connection); - - this.table.options.movableRowsSendingStop.call(this.table, connections); - - this.table.modules.comms.send(this.connection, "moveRow", "disconnect"); - }; - - //accept incomming connection - MoveRows.prototype.connect = function (table, row) { - var self = this; - if (!this.connectedTable) { - this.connectedTable = table; - this.connectedRow = row; - - this.table.element.classList.add("tabulator-movingrow-receiving"); - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) { - row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - self.tableRowDropEvent = self.tableRowDrop.bind(self); - - self.table.element.addEventListener("mouseup", self.tableRowDropEvent); - - this.table.options.movableRowsReceivingStart.call(this.table, row, table); - - return true; - } else { - console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable); - return false; - } - }; - - //close incomming connection - MoveRows.prototype.disconnect = function (table) { - var self = this; - if (table === this.connectedTable) { - this.connectedTable = false; - this.connectedRow = false; - - this.table.element.classList.remove("tabulator-movingrow-receiving"); - - self.table.rowManager.getDisplayRows().forEach(function (row) { - if (row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup) { - row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - self.table.element.removeEventListener("mouseup", self.tableRowDropEvent); - - this.table.options.movableRowsReceivingStop.call(this.table, table); - } else { - console.warn("Move Row Error - trying to disconnect from non connected table"); - } - }; - - MoveRows.prototype.dropComplete = function (table, row, success) { - var sender = false; - - if (success) { - - switch (_typeof(this.table.options.movableRowsSender)) { - case "string": - sender = this.senders[this.table.options.movableRowsSender]; - break; - - case "function": - sender = this.table.options.movableRowsSender; - break; - } - - if (sender) { - sender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } else { - if (this.table.options.movableRowsSender) { - console.warn("Mover Row Error - no matching sender found:", this.table.options.movableRowsSender); - } - } - - this.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } else { - this.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } - - this.endMove(); - }; - - MoveRows.prototype.tableRowDrop = function (e, row) { - var receiver = false, - success = false; - - e.stopImmediatePropagation(); - - switch (_typeof(this.table.options.movableRowsReceiver)) { - case "string": - receiver = this.receivers[this.table.options.movableRowsReceiver]; - break; - - case "function": - receiver = this.table.options.movableRowsReceiver; - break; - } - - if (receiver) { - success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } else { - console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver); - } - - if (success) { - this.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } else { - this.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } - - this.table.modules.comms.send(this.connectedTable, "moveRow", "dropcomplete", { - row: row, - success: success - }); - }; - - MoveRows.prototype.receivers = { - insert: function insert(fromRow, toRow, fromTable) { - this.table.addRow(fromRow.getData(), undefined, toRow); - return true; - }, - - add: function add(fromRow, toRow, fromTable) { - this.table.addRow(fromRow.getData()); - return true; - }, - - update: function update(fromRow, toRow, fromTable) { - if (toRow) { - toRow.update(fromRow.getData()); - return true; - } - - return false; - }, - - replace: function replace(fromRow, toRow, fromTable) { - if (toRow) { - this.table.addRow(fromRow.getData(), undefined, toRow); - toRow.delete(); - return true; - } - - return false; - } - }; - - MoveRows.prototype.senders = { - delete: function _delete(fromRow, toRow, toTable) { - fromRow.delete(); - } - }; - - MoveRows.prototype.commsReceived = function (table, action, data) { - switch (action) { - case "connect": - return this.connect(table, data.row); - break; - - case "disconnect": - return this.disconnect(table); - break; - - case "dropcomplete": - return this.dropComplete(table, data.row, data.success); - break; - } - }; - - Tabulator.prototype.registerModule("moveRow", MoveRows); - var Mutator = function Mutator(table) { - this.table = table; //hold Tabulator object - this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of muatation types - this.enabled = true; - }; - - //initialize column mutator - Mutator.prototype.initializeColumn = function (column) { - var self = this, - match = false, - config = {}; - - this.allowedTypes.forEach(function (type) { - var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - mutator; - - if (column.definition[key]) { - mutator = self.lookupMutator(column.definition[key]); - - if (mutator) { - match = true; - - config[key] = { - mutator: mutator, - params: column.definition[key + "Params"] || {} - }; - } - } - }); - - if (match) { - column.modules.mutate = config; - } - }; - - Mutator.prototype.lookupMutator = function (value) { - var mutator = false; - - //set column mutator - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - case "string": - if (this.mutators[value]) { - mutator = this.mutators[value]; - } else { - console.warn("Mutator Error - No such mutator found, ignoring: ", value); - } - break; - - case "function": - mutator = value; - break; - } - - return mutator; - }; - - //apply mutator to row - Mutator.prototype.transformRow = function (data, type, update) { - var self = this, - key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - value; - - if (this.enabled) { - - self.table.columnManager.traverse(function (column) { - var mutator, params, component; - - if (column.modules.mutate) { - mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false; - - if (mutator) { - value = column.getFieldValue(data); - - if (!update || update && typeof value !== "undefined") { - component = column.getComponent(); - params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params; - column.setFieldValue(data, mutator.mutator(value, data, type, params, component)); - } - } - } - }); - } - - return data; - }; - - //apply mutator to new cell value - Mutator.prototype.transformCell = function (cell, value) { - var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false; - - if (mutator) { - return mutator.mutator(value, cell.row.getData(), "edit", mutator.params, cell.getComponent()); - } else { - return value; - } - }; - - Mutator.prototype.enable = function () { - this.enabled = true; - }; - - Mutator.prototype.disable = function () { - this.enabled = false; - }; - - //default mutators - Mutator.prototype.mutators = {}; - - Tabulator.prototype.registerModule("mutator", Mutator); - var Page = function Page(table) { - - this.table = table; //hold Tabulator object - - this.mode = "local"; - this.progressiveLoad = false; - - this.size = 0; - this.page = 1; - this.count = 5; - this.max = 1; - - this.displayIndex = 0; //index in display pipeline - - this.createElements(); - }; - - Page.prototype.createElements = function () { - - var button; - - this.element = document.createElement("span"); - this.element.classList.add("tabulator-paginator"); - - this.pagesElement = document.createElement("span"); - this.pagesElement.classList.add("tabulator-pages"); - - button = document.createElement("button"); - button.classList.add("tabulator-page"); - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - button.setAttribute("aria-label", ""); - button.setAttribute("title", ""); - - this.firstBut = button.cloneNode(true); - this.firstBut.setAttribute("data-page", "first"); - - this.prevBut = button.cloneNode(true); - this.prevBut.setAttribute("data-page", "prev"); - - this.nextBut = button.cloneNode(true); - this.nextBut.setAttribute("data-page", "next"); - - this.lastBut = button.cloneNode(true); - this.lastBut.setAttribute("data-page", "last"); - }; - - //setup pageination - Page.prototype.initialize = function (hidden) { - var self = this; - - //update param names - for (var key in self.table.options.paginationDataSent) { - self.paginationDataSentNames[key] = self.table.options.paginationDataSent[key]; - } - - for (var _key2 in self.table.options.paginationDataReceived) { - self.paginationDataReceivedNames[_key2] = self.table.options.paginationDataReceived[_key2]; - } - - //build pagination element - - //bind localizations - self.table.modules.localize.bind("pagination|first", function (value) { - self.firstBut.innerHTML = value; - }); - - self.table.modules.localize.bind("pagination|first_title", function (value) { - self.firstBut.setAttribute("aria-label", value); - self.firstBut.setAttribute("title", value); - }); - - self.table.modules.localize.bind("pagination|prev", function (value) { - self.prevBut.innerHTML = value; - }); - - self.table.modules.localize.bind("pagination|prev_title", function (value) { - self.prevBut.setAttribute("aria-label", value); - self.prevBut.setAttribute("title", value); - }); - - self.table.modules.localize.bind("pagination|next", function (value) { - self.nextBut.innerHTML = value; - }); - - self.table.modules.localize.bind("pagination|next_title", function (value) { - self.nextBut.setAttribute("aria-label", value); - self.nextBut.setAttribute("title", value); - }); - - self.table.modules.localize.bind("pagination|last", function (value) { - self.lastBut.innerHTML = value; - }); - - self.table.modules.localize.bind("pagination|last_title", function (value) { - self.lastBut.setAttribute("aria-label", value); - self.lastBut.setAttribute("title", value); - }); - - //click bindings - self.firstBut.addEventListener("click", function () { - self.setPage(1); - }); - - self.prevBut.addEventListener("click", function () { - self.previousPage(); - }); - - self.nextBut.addEventListener("click", function () { - self.nextPage().then(function () {}).catch(function () {}); - }); - - self.lastBut.addEventListener("click", function () { - self.setPage(self.max); - }); - - if (self.table.options.paginationElement) { - self.element = self.table.options.paginationElement; - } - - //append to DOM - self.element.appendChild(self.firstBut); - self.element.appendChild(self.prevBut); - self.element.appendChild(self.pagesElement); - self.element.appendChild(self.nextBut); - self.element.appendChild(self.lastBut); - - if (!self.table.options.paginationElement && !hidden) { - self.table.footerManager.append(self.element, self); - } - - //set default values - self.mode = self.table.options.pagination; - self.size = self.table.options.paginationSize || Math.floor(self.table.rowManager.getElement().clientHeight / 24); - self.count = self.table.options.paginationButtonCount; - }; - - Page.prototype.initializeProgressive = function (mode) { - this.initialize(true); - this.mode = "progressive_" + mode; - this.progressiveLoad = true; - }; - - Page.prototype.setDisplayIndex = function (index) { - this.displayIndex = index; - }; - - Page.prototype.getDisplayIndex = function () { - return this.displayIndex; - }; - - //calculate maximum page from number of rows - Page.prototype.setMaxRows = function (rowCount) { - if (!rowCount) { - this.max = 1; - } else { - this.max = Math.ceil(rowCount / this.size); - } - - if (this.page > this.max) { - this.page = this.max; - } - }; - - //reset to first page without triggering action - Page.prototype.reset = function (force) { - if (this.mode == "local" || force) { - this.page = 1; - } - return true; - }; - - //set the maxmum page - Page.prototype.setMaxPage = function (max) { - this.max = max || 1; - - if (this.page > this.max) { - this.page = this.max; - this.trigger(); - } - }; - - //set current page number - Page.prototype.setPage = function (page) { - var _this33 = this; - - return new Promise(function (resolve, reject) { - if (page > 0 && page <= _this33.max) { - _this33.page = page; - _this33.trigger().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - } else { - console.warn("Pagination Error - Requested page is out of range of 1 - " + _this33.max + ":", page); - reject(); - } - }); - }; - - Page.prototype.setPageSize = function (size) { - if (size > 0) { - this.size = size; - } - }; - - //setup the pagination buttons - Page.prototype._setPageButtons = function () { - var self = this; - - var leftSize = Math.floor((this.count - 1) / 2); - var rightSize = Math.ceil((this.count - 1) / 2); - var min = this.max - this.page + leftSize + 1 < this.count ? this.max - this.count + 1 : Math.max(this.page - leftSize, 1); - var max = this.page <= rightSize ? Math.min(this.count, this.max) : Math.min(this.page + rightSize, this.max); - - while (self.pagesElement.firstChild) { - self.pagesElement.removeChild(self.pagesElement.firstChild); - }if (self.page == 1) { - self.firstBut.disabled = true; - self.prevBut.disabled = true; - } else { - self.firstBut.disabled = false; - self.prevBut.disabled = false; - } - - if (self.page == self.max) { - self.lastBut.disabled = true; - self.nextBut.disabled = true; - } else { - self.lastBut.disabled = false; - self.nextBut.disabled = false; - } - - for (var i = min; i <= max; i++) { - if (i > 0 && i <= self.max) { - self.pagesElement.appendChild(self._generatePageButton(i)); - } - } - - this.footerRedraw(); - }; - - Page.prototype._generatePageButton = function (page) { - var self = this, - button = document.createElement("button"); - - button.classList.add("tabulator-page"); - if (page == self.page) { - button.classList.add("active"); - } - - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - button.setAttribute("aria-label", "Show Page " + page); - button.setAttribute("title", "Show Page " + page); - button.setAttribute("data-page", page); - button.textContent = page; - - button.addEventListener("click", function (e) { - self.setPage(page); - }); - - return button; - }; - - //previous page - Page.prototype.previousPage = function () { - var _this34 = this; - - return new Promise(function (resolve, reject) { - if (_this34.page > 1) { - _this34.page--; - _this34.trigger().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - } else { - console.warn("Pagination Error - Previous page would be less than page 1:", 0); - reject(); - } - }); - }; - - //next page - Page.prototype.nextPage = function () { - var _this35 = this; - - return new Promise(function (resolve, reject) { - if (_this35.page < _this35.max) { - _this35.page++; - _this35.trigger().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - } else { - if (!_this35.progressiveLoad) { - console.warn("Pagination Error - Next page would be greater than maximum page of " + _this35.max + ":", _this35.max + 1); - } - reject(); - } - }); - }; - - //return current page number - Page.prototype.getPage = function () { - return this.page; - }; - - //return max page number - Page.prototype.getPageMax = function () { - return this.max; - }; - - Page.prototype.getPageSize = function (size) { - return this.size; - }; - - Page.prototype.getMode = function () { - return this.mode; - }; - - //return appropriate rows for current page - Page.prototype.getRows = function (data) { - var output, start, end; - - if (this.mode == "local") { - output = []; - start = this.size * (this.page - 1); - end = start + parseInt(this.size); - - this._setPageButtons(); - - for (var i = start; i < end; i++) { - if (data[i]) { - output.push(data[i]); - } - } - - return output; - } else { - - this._setPageButtons(); - - return data.slice(0); - } - }; - - Page.prototype.trigger = function () { - var _this36 = this; - - var left; - - return new Promise(function (resolve, reject) { - - switch (_this36.mode) { - case "local": - left = _this36.table.rowManager.scrollLeft; - - _this36.table.rowManager.refreshActiveData("page"); - _this36.table.rowManager.scrollHorizontal(left); - - _this36.table.options.pageLoaded.call(_this36.table, _this36.getPage()); - resolve(); - break; - - case "remote": - case "progressive_load": - case "progressive_scroll": - _this36.table.modules.ajax.blockActiveRequest(); - _this36._getRemotePage().then(function () { - resolve(); - }).catch(function () { - reject(); - }); - break; - - default: - console.warn("Pagination Error - no such pagination mode:", _this36.mode); - reject(); - } - }); - }; - - Page.prototype._getRemotePage = function () { - var _this37 = this; - - var self = this, - oldParams, - pageParams; - - return new Promise(function (resolve, reject) { - - if (!self.table.modExists("ajax", true)) { - reject(); - } - - //record old params and restore after request has been made - oldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {}); - pageParams = self.table.modules.ajax.getParams(); - - //configure request params - pageParams[_this37.paginationDataSentNames.page] = self.page; - - //set page size if defined - if (_this37.size) { - pageParams[_this37.paginationDataSentNames.size] = _this37.size; - } - - //set sort data if defined - if (_this37.table.options.ajaxSorting && _this37.table.modExists("sort")) { - var sorters = self.table.modules.sort.getSort(); - - sorters.forEach(function (item) { - delete item.column; - }); - - pageParams[_this37.paginationDataSentNames.sorters] = sorters; - } - - //set filter data if defined - if (_this37.table.options.ajaxFiltering && _this37.table.modExists("filter")) { - var filters = self.table.modules.filter.getFilters(true, true); - pageParams[_this37.paginationDataSentNames.filters] = filters; - } - - self.table.modules.ajax.setParams(pageParams); - - self.table.modules.ajax.sendRequest(_this37.progressiveLoad).then(function (data) { - self._parseRemoteData(data); - resolve(); - }).catch(function (e) { - reject(); - }); - - self.table.modules.ajax.setParams(oldParams); - }); - }; - - Page.prototype._parseRemoteData = function (data) { - var self = this, - left, - data, - margin; - - if (typeof data[this.paginationDataReceivedNames.last_page] === "undefined") { - console.warn("Remote Pagination Error - Server response missing '" + this.paginationDataReceivedNames.last_page + "' property"); - } - - if (data[this.paginationDataReceivedNames.data]) { - this.max = parseInt(data[this.paginationDataReceivedNames.last_page]) || 1; - - if (this.progressiveLoad) { - switch (this.mode) { - case "progressive_load": - this.table.rowManager.addRows(data[this.paginationDataReceivedNames.data]); - if (this.page < this.max) { - setTimeout(function () { - self.nextPage().then(function () {}).catch(function () {}); - }, self.table.options.ajaxProgressiveLoadDelay); - } - break; - - case "progressive_scroll": - data = this.table.rowManager.getData().concat(data[this.paginationDataReceivedNames.data]); - - this.table.rowManager.setData(data, true); - - margin = this.table.options.ajaxProgressiveLoadScrollMargin || this.table.rowManager.element.clientHeight * 2; - - if (self.table.rowManager.element.scrollHeight <= self.table.rowManager.element.clientHeight + margin) { - self.nextPage().then(function () {}).catch(function () {}); - } - break; - } - } else { - left = this.table.rowManager.scrollLeft; - - this.table.rowManager.setData(data[this.paginationDataReceivedNames.data]); - - this.table.rowManager.scrollHorizontal(left); - - this.table.columnManager.scrollHorizontal(left); - - this.table.options.pageLoaded.call(this.table, this.getPage()); - } - } else { - console.warn("Remote Pagination Error - Server response missing '" + this.paginationDataReceivedNames.data + "' property"); - } - }; - - //handle the footer element being redrawn - Page.prototype.footerRedraw = function () { - var footer = this.table.footerManager.element; - - if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) { - this.pagesElement.style.display = 'none'; - } else { - this.pagesElement.style.display = ''; - - if (Math.ceil(footer.clientWidth) - footer.scrollWidth < 0) { - this.pagesElement.style.display = 'none'; - } - } - }; - - //set the paramter names for pagination requests - Page.prototype.paginationDataSentNames = { - "page": "page", - "size": "size", - "sorters": "sorters", - // "sort_dir":"sort_dir", - "filters": "filters" - }; - - //set the property names for pagination responses - Page.prototype.paginationDataReceivedNames = { - "current_page": "current_page", - "last_page": "last_page", - "data": "data" - }; - - Tabulator.prototype.registerModule("page", Page); - - var Persistence = function Persistence(table) { - this.table = table; //hold Tabulator object - this.mode = ""; - this.id = ""; - this.persistProps = ["field", "width", "visible"]; - }; - - //setup parameters - Persistence.prototype.initialize = function (mode, id) { - //determine persistent layout storage type - this.mode = mode !== true ? mode : typeof window.localStorage !== 'undefined' ? "local" : "cookie"; - - //set storage tag - this.id = "tabulator-" + (id || this.table.element.getAttribute("id") || ""); - }; - - //load saved definitions - Persistence.prototype.load = function (type, current) { - - var data = this.retreiveData(type); - - if (current) { - data = data ? this.mergeDefinition(current, data) : current; - } - - return data; - }; - - //retreive data from memory - Persistence.prototype.retreiveData = function (type) { - var data = "", - id = this.id + (type === "columns" ? "" : "-" + type); - - switch (this.mode) { - case "local": - data = localStorage.getItem(id); - break; - - case "cookie": - - //find cookie - var cookie = document.cookie, - cookiePos = cookie.indexOf(id + "="), - end = void 0; - - //if cookie exists, decode and load column data into tabulator - if (cookiePos > -1) { - cookie = cookie.substr(cookiePos); - - end = cookie.indexOf(";"); - - if (end > -1) { - cookie = cookie.substr(0, end); - } - - data = cookie.replace(id + "=", ""); - } - break; - - default: - console.warn("Persistance Load Error - invalid mode selected", this.mode); - } - - return data ? JSON.parse(data) : false; - }; - - //merge old and new column defintions - Persistence.prototype.mergeDefinition = function (oldCols, newCols) { - var self = this, - output = []; - - // oldCols = oldCols || []; - newCols = newCols || []; - - newCols.forEach(function (column, to) { - - var from = self._findColumn(oldCols, column); - - if (from) { - - from.width = column.width; - from.visible = column.visible; - - if (from.columns) { - from.columns = self.mergeDefinition(from.columns, column.columns); - } - - output.push(from); - } - }); - oldCols.forEach(function (column, i) { - var from = self._findColumn(newCols, column); - if (!from) { - if (output.length > i) { - output.splice(i, 0, column); - } else { - output.push(column); - } - } - }); - - return output; - }; - - //find matching columns - Persistence.prototype._findColumn = function (columns, subject) { - var type = subject.columns ? "group" : subject.field ? "field" : "object"; - - return columns.find(function (col) { - switch (type) { - case "group": - return col.title === subject.title && col.columns.length === subject.columns.length; - break; - - case "field": - return col.field === subject.field; - break; - - case "object": - return col === subject; - break; - } - }); - }; - - //save data - Persistence.prototype.save = function (type) { - var data = {}; - - switch (type) { - case "columns": - data = this.parseColumns(this.table.columnManager.getColumns()); - break; - - case "filter": - data = this.table.modules.filter.getFilters(); - break; - - case "sort": - data = this.validateSorters(this.table.modules.sort.getSort()); - break; - } - - var id = this.id + (type === "columns" ? "" : "-" + type); - - this.saveData(id, data); - }; - - //ensure sorters contain no function data - Persistence.prototype.validateSorters = function (data) { - data.forEach(function (item) { - item.column = item.field; - delete item.field; - }); - - return data; - }; - - //save data to chosed medium - Persistence.prototype.saveData = function (id, data) { - - data = JSON.stringify(data); - - switch (this.mode) { - case "local": - localStorage.setItem(id, data); - break; - - case "cookie": - var expireDate = new Date(); - expireDate.setDate(expireDate.getDate() + 10000); - - //save cookie - document.cookie = id + "=" + data + "; expires=" + expireDate.toUTCString(); - break; - - default: - console.warn("Persistance Save Error - invalid mode selected", this.mode); - } - }; - - //build premission list - Persistence.prototype.parseColumns = function (columns) { - var self = this, - definitions = []; - - columns.forEach(function (column) { - var def = {}; - - if (column.isGroup) { - def.title = column.getDefinition().title; - def.columns = self.parseColumns(column.getColumns()); - } else { - def.title = column.getDefinition().title; - def.field = column.getField(); - def.width = column.getWidth(); - def.visible = column.visible; - } - - definitions.push(def); - }); - - return definitions; - }; - - Tabulator.prototype.registerModule("persistence", Persistence); - - var ResizeColumns = function ResizeColumns(table) { - this.table = table; //hold Tabulator object - this.startColumn = false; - this.startX = false; - this.startWidth = false; - this.handle = null; - this.prevHandle = null; - }; - - ResizeColumns.prototype.initializeColumn = function (type, column, element) { - var self = this, - variableHeight = false, - mode = this.table.options.resizableColumns; - - //set column resize mode - if (type === "header") { - variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight; - column.modules.resize = { variableHeight: variableHeight }; - } - - if (mode === true || mode == type) { - - var handle = document.createElement('div'); - handle.className = "tabulator-col-resize-handle"; - - var prevHandle = document.createElement('div'); - prevHandle.className = "tabulator-col-resize-handle prev"; - - handle.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - handle.addEventListener("mousedown", function (e) { - var nearestColumn = column.getLastColumn(); - - if (nearestColumn && self._checkResizability(nearestColumn)) { - self.startColumn = column; - self._mouseDown(e, nearestColumn); - } - }); - - //reszie column on double click - handle.addEventListener("dblclick", function (e) { - if (self._checkResizability(column)) { - column.reinitializeWidth(true); - } - }); - - prevHandle.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - prevHandle.addEventListener("mousedown", function (e) { - var nearestColumn, colIndex, prevColumn; - - nearestColumn = column.getFirstColumn(); - - if (nearestColumn) { - colIndex = self.table.columnManager.findColumnIndex(nearestColumn); - prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false; - - if (prevColumn && self._checkResizability(prevColumn)) { - self.startColumn = column; - self._mouseDown(e, prevColumn); - } - } - }); - - //resize column on double click - prevHandle.addEventListener("dblclick", function (e) { - var nearestColumn, colIndex, prevColumn; - - nearestColumn = column.getFirstColumn(); - - if (nearestColumn) { - colIndex = self.table.columnManager.findColumnIndex(nearestColumn); - prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false; - - if (prevColumn && self._checkResizability(prevColumn)) { - prevColumn.reinitializeWidth(true); - } - } - }); - - element.appendChild(handle); - element.appendChild(prevHandle); - } - }; - - ResizeColumns.prototype._checkResizability = function (column) { - return typeof column.definition.resizable != "undefined" ? column.definition.resizable : this.table.options.resizableColumns; - }; - - ResizeColumns.prototype._mouseDown = function (e, column) { - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e) { - column.setWidth(self.startWidth + (e.screenX - self.startX)); - - if (!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) { - column.checkCellHeights(); - } - } - - function mouseUp(e) { - - //block editor from taking action while resizing is taking place - if (self.startColumn.modules.edit) { - self.startColumn.modules.edit.blocked = false; - } - - if (self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight) { - column.checkCellHeights(); - } - - document.body.removeEventListener("mouseup", mouseUp); - document.body.removeEventListener("mousemove", mouseMove); - - self.table.element.classList.remove("tabulator-block-select"); - - if (self.table.options.persistentLayout && self.table.modExists("persistence", true)) { - self.table.modules.persistence.save("columns"); - } - - self.table.options.columnResized.call(self.table, self.startColumn.getComponent()); - } - - e.stopPropagation(); //prevent resize from interfereing with movable columns - - //block editor from taking action while resizing is taking place - if (self.startColumn.modules.edit) { - self.startColumn.modules.edit.blocked = true; - } - - self.startX = e.screenX; - self.startWidth = column.getWidth(); - - document.body.addEventListener("mousemove", mouseMove); - document.body.addEventListener("mouseup", mouseUp); - }; - - Tabulator.prototype.registerModule("resizeColumns", ResizeColumns); - var ResizeRows = function ResizeRows(table) { - this.table = table; //hold Tabulator object - this.startColumn = false; - this.startY = false; - this.startHeight = false; - this.handle = null; - this.prevHandle = null; - }; - - ResizeRows.prototype.initializeRow = function (row) { - var self = this, - rowEl = row.getElement(); - - var handle = document.createElement('div'); - handle.className = "tabulator-row-resize-handle"; - - var prevHandle = document.createElement('div'); - prevHandle.className = "tabulator-row-resize-handle prev"; - - handle.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - handle.addEventListener("mousedown", function (e) { - self.startRow = row; - self._mouseDown(e, row); - }); - - prevHandle.addEventListener("click", function (e) { - e.stopPropagation(); - }); - - prevHandle.addEventListener("mousedown", function (e) { - var prevRow = self.table.rowManager.prevDisplayRow(row); - - if (prevRow) { - self.startRow = prevRow; - self._mouseDown(e, prevRow); - } - }); - - rowEl.appendChild(handle); - rowEl.appendChild(prevHandle); - }; - - ResizeRows.prototype._mouseDown = function (e, row) { - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e) { - row.setHeight(self.startHeight + (e.screenY - self.startY)); - } - - function mouseUp(e) { - - // //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = false; - // } - - document.body.removeEventListener("mouseup", mouseMove); - document.body.removeEventListener("mousemove", mouseMove); - - self.table.element.classList.remove("tabulator-block-select"); - - self.table.options.rowResized.call(this.table, row.getComponent()); - } - - e.stopPropagation(); //prevent resize from interfereing with movable columns - - //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = true; - // } - - self.startY = e.screenY; - self.startHeight = row.getHeight(); - - document.body.addEventListener("mousemove", mouseMove); - - document.body.addEventListener("mouseup", mouseUp); - }; - - Tabulator.prototype.registerModule("resizeRows", ResizeRows); - var ResizeTable = function ResizeTable(table) { - this.table = table; //hold Tabulator object - this.binding = false; - this.observer = false; - }; - - ResizeTable.prototype.initialize = function (row) { - var table = this.table, - observer; - - if (typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual") { - this.observer = new ResizeObserver(function (entry) { - table.redraw(); - }); - - this.observer.observe(table.element); - } else { - this.binding = function () { - table.redraw(); - }; - - window.addEventListener("resize", this.binding); - } - }; - - ResizeTable.prototype.clearBindings = function (row) { - if (this.binding) { - window.removeEventListener("resize", this.binding); - } - - if (this.observer) { - this.observer.unobserve(this.table.element); - } - }; - - Tabulator.prototype.registerModule("resizeTable", ResizeTable); - var ResponsiveLayout = function ResponsiveLayout(table) { - this.table = table; //hold Tabulator object - this.columns = []; - this.hiddenColumns = []; - this.mode = ""; - this.index = 0; - this.collapseFormatter = []; - this.collapseStartOpen = true; - }; - - //generate resposive columns list - ResponsiveLayout.prototype.initialize = function () { - var self = this, - columns = []; - - this.mode = this.table.options.responsiveLayout; - this.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData; - this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen; - this.hiddenColumns = []; - - //detemine level of responsivity for each column - this.table.columnManager.columnsByIndex.forEach(function (column, i) { - if (column.modules.responsive) { - if (column.modules.responsive.order && column.modules.responsive.visible) { - column.modules.responsive.index = i; - columns.push(column); - - if (!column.visible && self.mode === "collapse") { - self.hiddenColumns.push(column); - } - } - } - }); - - //sort list by responsivity - columns = columns.reverse(); - columns = columns.sort(function (a, b) { - var diff = b.modules.responsive.order - a.modules.responsive.order; - return diff || b.modules.responsive.index - a.modules.responsive.index; - }); - - this.columns = columns; - - if (this.mode === "collapse") { - this.generateCollapsedContent(); - } - }; - - //define layout information - ResponsiveLayout.prototype.initializeColumn = function (column) { - var def = column.getDefinition(); - - column.modules.responsive = { order: typeof def.responsive === "undefined" ? 1 : def.responsive, visible: def.visible === false ? false : true }; - }; - - ResponsiveLayout.prototype.layoutRow = function (row) { - var rowEl = row.getElement(), - el = document.createElement("div"); - - el.classList.add("tabulator-responsive-collapse"); - - if (!rowEl.classList.contains("tabulator-calcs")) { - row.modules.responsiveLayout = { - element: el - }; - - if (!this.collapseStartOpen) { - el.style.display = 'none'; - } - - rowEl.appendChild(el); - - this.generateCollapsedRowContent(row); - } - }; - - //update column visibility - ResponsiveLayout.prototype.updateColumnVisibility = function (column, visible) { - var index; - if (column.modules.responsive) { - column.modules.responsive.visible = visible; - this.initialize(); - } - }; - - ResponsiveLayout.prototype.hideColumn = function (column) { - column.hide(false, true); - - if (this.mode === "collapse") { - this.hiddenColumns.unshift(column); - this.generateCollapsedContent(); - } - }; - - ResponsiveLayout.prototype.showColumn = function (column) { - var index; - - column.show(false, true); - //set column width to prevent calculation loops on uninitialized columns - column.setWidth(column.getWidth()); - - if (this.mode === "collapse") { - index = this.hiddenColumns.indexOf(column); - - if (index > -1) { - this.hiddenColumns.splice(index, 1); - } - - this.generateCollapsedContent(); - } - }; - - //redraw columns to fit space - ResponsiveLayout.prototype.update = function () { - var self = this, - working = true; - - while (working) { - - var width = self.table.modules.layout.getMode() == "fitColumns" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth(); - - var diff = self.table.columnManager.element.clientWidth - width; - - if (diff < 0) { - //table is too wide - var column = self.columns[self.index]; - - if (column) { - self.hideColumn(column); - self.index++; - } else { - working = false; - } - } else { - - //table has spare space - var _column = self.columns[self.index - 1]; - - if (_column) { - if (diff > 0) { - if (diff >= _column.getWidth()) { - self.showColumn(_column); - self.index--; - } else { - working = false; - } - } else { - working = false; - } - } else { - working = false; - } - } - - if (!self.table.rowManager.activeRowsCount) { - self.table.rowManager.renderEmptyScroll(); - } - } - }; - - ResponsiveLayout.prototype.generateCollapsedContent = function () { - var self = this, - rows = this.table.rowManager.getDisplayRows(); - - rows.forEach(function (row) { - self.generateCollapsedRowContent(row); - }); - }; - - ResponsiveLayout.prototype.generateCollapsedRowContent = function (row) { - var el, contents; - - if (row.modules.responsiveLayout) { - el = row.modules.responsiveLayout.element; - - while (el.firstChild) { - el.removeChild(el.firstChild); - }contents = this.collapseFormatter(this.generateCollapsedRowData(row)); - - if (contents) { - el.appendChild(contents); - } - } - }; - - ResponsiveLayout.prototype.generateCollapsedRowData = function (row) { - var self = this, - data = row.getData(), - output = {}, - mockCellComponent; - - this.hiddenColumns.forEach(function (column) { - var value = column.getFieldValue(data); - - if (column.definition.title && column.field) { - if (column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters) { - - mockCellComponent = { - value: false, - data: {}, - getValue: function getValue() { - return value; - }, - getData: function getData() { - return data; - }, - getElement: function getElement() { - return document.createElement("div"); - }, - getRow: function getRow() { - return row.getComponent(); - }, - getColumn: function getColumn() { - return column.getComponent(); - } - }; - - output[column.definition.title] = column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params); - } else { - output[column.definition.title] = value; - } - } - }); - - return output; - }; - - ResponsiveLayout.prototype.formatCollapsedData = function (data) { - var list = document.createElement("table"), - listContents = ""; - - for (var key in data) { - listContents += "" + key + "" + data[key] + ""; - } - - list.innerHTML = listContents; - - return Object.keys(data).length ? list : ""; - }; - - Tabulator.prototype.registerModule("responsiveLayout", ResponsiveLayout); - - var SelectRow = function SelectRow(table) { - this.table = table; //hold Tabulator object - this.selecting = false; //flag selecting in progress - this.lastClickedRow = false; //last clicked row - this.selectPrev = []; //hold previously selected element for drag drop selection - this.selectedRows = []; //hold selected rows - }; - - SelectRow.prototype.clearSelectionData = function (silent) { - this.selecting = false; - this.lastClickedRow = false; - this.selectPrev = []; - this.selectedRows = []; - - if (!silent) { - this._rowSelectionChanged(); - } - }; - - SelectRow.prototype.initializeRow = function (row) { - var self = this, - element = row.getElement(); - - // trigger end of row selection - var endSelect = function endSelect() { - - setTimeout(function () { - self.selecting = false; - }, 50); - - document.body.removeEventListener("mouseup", endSelect); - }; - - row.modules.select = { selected: false }; - - //set row selection class - if (self.table.options.selectableCheck.call(this.table, row.getComponent())) { - element.classList.add("tabulator-selectable"); - element.classList.remove("tabulator-unselectable"); - - if (self.table.options.selectable && self.table.options.selectable != "highlight") { - if (self.table.options.selectableRangeMode && self.table.options.selectableRangeMode === "click") { - element.addEventListener("click", function (e) { - if (e.shiftKey) { - self.lastClickedRow = self.lastClickedRow || row; - - var lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow); - var rowIdx = self.table.rowManager.getDisplayRowIndex(row); - - var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx; - var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx; - - var rows = self.table.rowManager.getDisplayRows().slice(0); - var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1); - - if (e.ctrlKey) { - toggledRows.forEach(function (toggledRow) { - if (toggledRow !== self.lastClickedRow) { - self.toggleRow(toggledRow); - } - }); - self.lastClickedRow = row; - } else { - self.deselectRows(); - self.selectRows(toggledRows); - } - } else if (e.ctrlKey) { - self.toggleRow(row); - self.lastClickedRow = row; - } else { - self.deselectRows(); - self.selectRows(row); - self.lastClickedRow = row; - } - }); - } else { - element.addEventListener("click", function (e) { - if (!self.selecting) { - self.toggleRow(row); - } - }); - - element.addEventListener("mousedown", function (e) { - if (e.shiftKey) { - self.selecting = true; - - self.selectPrev = []; - - document.body.addEventListener("mouseup", endSelect); - document.body.addEventListener("keyup", endSelect); - - self.toggleRow(row); - - return false; - } - }); - - element.addEventListener("mouseenter", function (e) { - if (self.selecting) { - self.toggleRow(row); - - if (self.selectPrev[1] == row) { - self.toggleRow(self.selectPrev[0]); - } - } - }); - - element.addEventListener("mouseout", function (e) { - if (self.selecting) { - self.selectPrev.unshift(row); - } - }); - } - } - } else { - element.classList.add("tabulator-unselectable"); - element.classList.remove("tabulator-selectable"); - } - }; - - //toggle row selection - SelectRow.prototype.toggleRow = function (row) { - if (this.table.options.selectableCheck.call(this.table, row.getComponent())) { - if (row.modules.select.selected) { - this._deselectRow(row); - } else { - this._selectRow(row); - } - } - }; - - //select a number of rows - SelectRow.prototype.selectRows = function (rows) { - var self = this; - - switch (typeof rows === 'undefined' ? 'undefined' : _typeof(rows)) { - case "undefined": - self.table.rowManager.rows.forEach(function (row) { - self._selectRow(row, false, true); - }); - - self._rowSelectionChanged(); - break; - - case "boolean": - if (rows === true) { - self.table.rowManager.activeRows.forEach(function (row) { - self._selectRow(row, false, true); - }); - - self._rowSelectionChanged(); - } - break; - - default: - if (Array.isArray(rows)) { - rows.forEach(function (row) { - self._selectRow(row); - }); - - self._rowSelectionChanged(); - } else { - self._selectRow(rows); - } - break; - } - }; - - //select an individual row - SelectRow.prototype._selectRow = function (rowInfo, silent, force) { - var index; - - //handle max row count - if (!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force) { - if (this.selectedRows.length >= this.table.options.selectable) { - if (this.table.options.selectableRollingSelection) { - this._deselectRow(this.selectedRows[0]); - } else { - return false; - } - } - } - - var row = this.table.rowManager.findRow(rowInfo); - - if (row) { - if (this.selectedRows.indexOf(row) == -1) { - row.modules.select.selected = true; - row.getElement().classList.add("tabulator-selected"); - - this.selectedRows.push(row); - - if (!silent) { - this.table.options.rowSelected.call(this.table, row.getComponent()); - this._rowSelectionChanged(); - } - } - } else { - if (!silent) { - console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo); - } - } - }; - - SelectRow.prototype.isRowSelected = function (row) { - return this.selectedRows.indexOf(row) !== -1; - }; - - //deselect a number of rows - SelectRow.prototype.deselectRows = function (rows) { - var self = this, - rowCount; - - if (typeof rows == "undefined") { - - rowCount = self.selectedRows.length; - - for (var i = 0; i < rowCount; i++) { - self._deselectRow(self.selectedRows[0], false); - } - - self._rowSelectionChanged(); - } else { - if (Array.isArray(rows)) { - rows.forEach(function (row) { - self._deselectRow(row); - }); - - self._rowSelectionChanged(); - } else { - self._deselectRow(rows); - } - } - }; - - //deselect an individual row - SelectRow.prototype._deselectRow = function (rowInfo, silent) { - var self = this, - row = self.table.rowManager.findRow(rowInfo), - index; - - if (row) { - index = self.selectedRows.findIndex(function (selectedRow) { - return selectedRow == row; - }); - - if (index > -1) { - - row.modules.select.selected = false; - row.getElement().classList.remove("tabulator-selected"); - self.selectedRows.splice(index, 1); - - if (!silent) { - self.table.options.rowDeselected.call(this.table, row.getComponent()); - self._rowSelectionChanged(); - } - } - } else { - if (!silent) { - console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo); - } - } - }; - - SelectRow.prototype.getSelectedData = function () { - var data = []; - - this.selectedRows.forEach(function (row) { - data.push(row.getData()); - }); - - return data; - }; - - SelectRow.prototype.getSelectedRows = function () { - - var rows = []; - - this.selectedRows.forEach(function (row) { - rows.push(row.getComponent()); - }); - - return rows; - }; - - SelectRow.prototype._rowSelectionChanged = function () { - this.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows()); - }; - - Tabulator.prototype.registerModule("selectRow", SelectRow); - - var Sort = function Sort(table) { - this.table = table; //hold Tabulator object - this.sortList = []; //holder current sort - this.changed = false; //has the sort changed since last render - }; - - //initialize column header for sorting - Sort.prototype.initializeColumn = function (column, content) { - var self = this, - sorter = false, - colEl, - arrowEl; - - switch (_typeof(column.definition.sorter)) { - case "string": - if (self.sorters[column.definition.sorter]) { - sorter = self.sorters[column.definition.sorter]; - } else { - console.warn("Sort Error - No such sorter found: ", column.definition.sorter); - } - break; - - case "function": - sorter = column.definition.sorter; - break; - } - - column.modules.sort = { - sorter: sorter, dir: "none", - params: column.definition.sorterParams || {}, - startingDir: column.definition.headerSortStartingDir || "asc" - }; - - if (column.definition.headerSort !== false) { - - colEl = column.getElement(); - - colEl.classList.add("tabulator-sortable"); - - arrowEl = document.createElement("div"); - arrowEl.classList.add("tabulator-arrow"); - //create sorter arrow - content.appendChild(arrowEl); - - //sort on click - colEl.addEventListener("click", function (e) { - var dir = "", - sorters = [], - match = false; - - if (column.modules.sort) { - dir = column.modules.sort.dir == "asc" ? "desc" : column.modules.sort.dir == "desc" ? "asc" : column.modules.sort.startingDir; - - if (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) { - sorters = self.getSort(); - - match = sorters.findIndex(function (sorter) { - return sorter.field === column.getField(); - }); - - if (match > -1) { - sorters[match].dir = sorters[match].dir == "asc" ? "desc" : "asc"; - - if (match != sorters.length - 1) { - sorters.push(sorters.splice(match, 1)[0]); - } - } else { - sorters.push({ column: column, dir: dir }); - } - - //add to existing sort - self.setSort(sorters); - } else { - //sort by column only - self.setSort(column, dir); - } - - self.table.rowManager.sorterRefresh(); - } - }); - } - }; - - //check if the sorters have changed since last use - Sort.prototype.hasChanged = function () { - var changed = this.changed; - this.changed = false; - return changed; - }; - - //return current sorters - Sort.prototype.getSort = function () { - var self = this, - sorters = []; - - self.sortList.forEach(function (item) { - if (item.column) { - sorters.push({ column: item.column.getComponent(), field: item.column.getField(), dir: item.dir }); - } - }); - - return sorters; - }; - - //change sort list and trigger sort - Sort.prototype.setSort = function (sortList, dir) { - var self = this, - newSortList = []; - - if (!Array.isArray(sortList)) { - sortList = [{ column: sortList, dir: dir }]; - } - - sortList.forEach(function (item) { - var column; - - column = self.table.columnManager.findColumn(item.column); - - if (column) { - item.column = column; - newSortList.push(item); - self.changed = true; - } else { - console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column); - } - }); - - self.sortList = newSortList; - - if (this.table.options.persistentSort && this.table.modExists("persistence", true)) { - this.table.modules.persistence.save("sort"); - } - }; - - //clear sorters - Sort.prototype.clear = function () { - this.setSort([]); - }; - - //find appropriate sorter for column - Sort.prototype.findSorter = function (column) { - var row = this.table.rowManager.activeRows[0], - sorter = "string", - field, - value; - - if (row) { - row = row.getData(); - field = column.getField(); - - if (field) { - - value = column.getFieldValue(row); - - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - case "undefined": - sorter = "string"; - break; - - case "boolean": - sorter = "boolean"; - break; - - default: - if (!isNaN(value) && value !== "") { - sorter = "number"; - } else { - if (value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)) { - sorter = "alphanum"; - } - } - break; - } - } - } - - return this.sorters[sorter]; - }; - - //work through sort list sorting data - Sort.prototype.sort = function () { - var self = this, - lastSort, - sortList; - - sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList; - - if (self.table.options.dataSorting) { - self.table.options.dataSorting.call(self.table, self.getSort()); - } - - self.clearColumnHeaders(); - - if (!self.table.options.ajaxSorting) { - - sortList.forEach(function (item, i) { - - if (item.column && item.column.modules.sort) { - - //if no sorter has been defined, take a guess - if (!item.column.modules.sort.sorter) { - item.column.modules.sort.sorter = self.findSorter(item.column); - } - - self._sortItem(item.column, item.dir, sortList, i); - } - - self.setColumnHeader(item.column, item.dir); - }); - } else { - sortList.forEach(function (item, i) { - self.setColumnHeader(item.column, item.dir); - }); - } - - if (self.table.options.dataSorted) { - self.table.options.dataSorted.call(self.table, self.getSort(), self.table.rowManager.getComponents(true)); - } - }; - - //clear sort arrows on columns - Sort.prototype.clearColumnHeaders = function () { - this.table.columnManager.getRealColumns().forEach(function (column) { - if (column.modules.sort) { - column.modules.sort.dir = "none"; - column.getElement().setAttribute("aria-sort", "none"); - } - }); - }; - - //set the column header sort direction - Sort.prototype.setColumnHeader = function (column, dir) { - column.modules.sort.dir = dir; - column.getElement().setAttribute("aria-sort", dir); - }; - - //sort each item in sort list - Sort.prototype._sortItem = function (column, dir, sortList, i) { - var self = this; - - var activeRows = self.table.rowManager.activeRows; - - var params = typeof column.modules.sort.params === "function" ? column.modules.sort.params(column.getComponent(), dir) : column.modules.sort.params; - - activeRows.sort(function (a, b) { - - var result = self._sortRow(a, b, column, dir, params); - - //if results match recurse through previous searchs to be sure - if (result === 0 && i) { - for (var j = i - 1; j >= 0; j--) { - result = self._sortRow(a, b, sortList[j].column, sortList[j].dir, params); - - if (result !== 0) { - break; - } - } - } - - return result; - }); - }; - - //process individual rows for a sort function on active data - Sort.prototype._sortRow = function (a, b, column, dir, params) { - var el1Comp, el2Comp, colComp; - - //switch elements depending on search direction - var el1 = dir == "asc" ? a : b; - var el2 = dir == "asc" ? b : a; - - a = column.getFieldValue(el1.getData()); - b = column.getFieldValue(el2.getData()); - - a = typeof a !== "undefined" ? a : ""; - b = typeof b !== "undefined" ? b : ""; - - el1Comp = el1.getComponent(); - el2Comp = el2.getComponent(); - - return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params); - }; - - //default data sorters - Sort.prototype.sorters = { - - //sort numbers - number: function number(a, b, aRow, bRow, column, dir, params) { - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - a = parseFloat(String(a).replace(",", "")); - b = parseFloat(String(b).replace(",", "")); - - //handle non numeric values - if (isNaN(a)) { - emptyAlign = isNaN(b) ? 0 : -1; - } else if (isNaN(b)) { - emptyAlign = 1; - } else { - //compare valid values - return a - b; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort strings - string: function string(a, b, aRow, bRow, column, dir, params) { - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - var locale; - - //handle empty values - if (!a) { - emptyAlign = !b ? 0 : -1; - } else if (!b) { - emptyAlign = 1; - } else { - //compare valid values - switch (_typeof(params.locale)) { - case "boolean": - if (params.locale) { - locale = this.table.modules.localize.getLocale(); - } - break; - case "string": - locale = params.locale; - break; - } - - return String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale); - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort date - date: function date(a, b, aRow, bRow, column, dir, params) { - if (!params.format) { - params.format = "DD/MM/YYYY"; - } - - return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params); - }, - - //sort hh:mm formatted times - time: function time(a, b, aRow, bRow, column, dir, params) { - if (!params.format) { - params.format = "hh:mm"; - } - - return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params); - }, - - //sort datetime - datetime: function datetime(a, b, aRow, bRow, column, dir, params) { - var format = params.format || "DD/MM/YYYY hh:mm:ss", - alignEmptyValues = params.alignEmptyValues, - emptyAlign = 0; - - if (typeof moment != "undefined") { - a = moment(a, format); - b = moment(b, format); - - if (!a.isValid()) { - emptyAlign = !b.isValid() ? 0 : -1; - } else if (!b.isValid()) { - emptyAlign = 1; - } else { - //compare valid values - return a - b; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - } else { - console.error("Sort Error - 'datetime' sorter is dependant on moment.js"); - } - }, - - //sort booleans - boolean: function boolean(a, b, aRow, bRow, column, dir, params) { - var el1 = a === true || a === "true" || a === "True" || a === 1 ? 1 : 0; - var el2 = b === true || b === "true" || b === "True" || b === 1 ? 1 : 0; - - return el1 - el2; - }, - - //sort if element contains any data - array: function array(a, b, aRow, bRow, column, dir, params) { - var el1 = 0; - var el2 = 0; - var type = params.type || "length"; - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - function calc(value) { - - switch (type) { - case "length": - return value.length; - break; - - case "sum": - return value.reduce(function (c, d) { - return c + d; - }); - break; - - case "max": - return Math.max.apply(null, value); - break; - - case "min": - return Math.min.apply(null, value); - break; - - case "avg": - return value.reduce(function (c, d) { - return c + d; - }) / value.length; - break; - } - } - - //handle non array values - if (!Array.isArray(a)) { - alignEmptyValues = !Array.isArray(b) ? 0 : -1; - } else if (!Array.isArray(b)) { - alignEmptyValues = 1; - } else { - - //compare valid values - el1 = a ? calc(a) : 0; - el2 = b ? calc(b) : 0; - - return el1 - el2; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort if element contains any data - exists: function exists(a, b, aRow, bRow, column, dir, params) { - var el1 = typeof a == "undefined" ? 0 : 1; - var el2 = typeof b == "undefined" ? 0 : 1; - - return el1 - el2; - }, - - //sort alpha numeric strings - alphanum: function alphanum(as, bs, aRow, bRow, column, dir, params) { - var a, - b, - a1, - b1, - i = 0, - L, - rx = /(\d+)|(\D+)/g, - rd = /\d/; - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - //handle empty values - if (!as && as !== 0) { - emptyAlign = !bs && bs !== 0 ? 0 : -1; - } else if (!bs && bs !== 0) { - emptyAlign = 1; - } else { - - if (isFinite(as) && isFinite(bs)) return as - bs; - a = String(as).toLowerCase(); - b = String(bs).toLowerCase(); - if (a === b) return 0; - if (!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1; - a = a.match(rx); - b = b.match(rx); - L = a.length > b.length ? b.length : a.length; - while (i < L) { - a1 = a[i]; - b1 = b[i++]; - if (a1 !== b1) { - if (isFinite(a1) && isFinite(b1)) { - if (a1.charAt(0) === "0") a1 = "." + a1; - if (b1.charAt(0) === "0") b1 = "." + b1; - return a1 - b1; - } else return a1 > b1 ? 1 : -1; - } - } - - return a.length > b.length; - } - - //fix empty values in position - if (alignEmptyValues === "top" && dir === "desc" || alignEmptyValues === "bottom" && dir === "asc") { - emptyAlign *= -1; - } - - return emptyAlign; - } - }; - - Tabulator.prototype.registerModule("sort", Sort); - - var Validate = function Validate(table) { - this.table = table; - }; - - //validate - Validate.prototype.initializeColumn = function (column) { - var self = this, - config = [], - validator; - - if (column.definition.validator) { - - if (Array.isArray(column.definition.validator)) { - column.definition.validator.forEach(function (item) { - validator = self._extractValidator(item); - - if (validator) { - config.push(validator); - } - }); - } else { - validator = this._extractValidator(column.definition.validator); - - if (validator) { - config.push(validator); - } - } - - column.modules.validate = config.length ? config : false; - } - }; - - Validate.prototype._extractValidator = function (value) { - var parts, type, params; - - switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { - case "string": - parts = value.split(":", 2); - type = parts.shift(); - params = parts[0]; - - return this._buildValidator(type, params); - break; - - case "function": - return this._buildValidator(value); - break; - - case "object": - return this._buildValidator(value.type, value.parameters); - break; - } - }; - - Validate.prototype._buildValidator = function (type, params) { - - var func = typeof type == "function" ? type : this.validators[type]; - - if (!func) { - console.warn("Validator Setup Error - No matching validator found:", type); - return false; - } else { - return { - type: typeof type == "function" ? "function" : type, - func: func, - params: params - }; - } - }; - - Validate.prototype.validate = function (validators, cell, value) { - var self = this, - valid = []; - - if (validators) { - validators.forEach(function (item) { - if (!item.func.call(self, cell, value, item.params)) { - valid.push({ - type: item.type, - parameters: item.params - }); - } - }); - } - - return valid.length ? valid : true; - }; - - Validate.prototype.validators = { - - //is integer - integer: function integer(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - value = Number(value); - return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; - }, - - //is float - float: function float(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - value = Number(value); - return typeof value === 'number' && isFinite(value) && value % 1 !== 0; - }, - - //must be a number - numeric: function numeric(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return !isNaN(value); - }, - - //must be a string - string: function string(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return isNaN(value); - }, - - //maximum value - max: function max(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return parseFloat(value) <= parameters; - }, - - //minimum value - min: function min(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return parseFloat(value) >= parameters; - }, - - //minimum string length - minLength: function minLength(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return String(value).length >= parameters; - }, - - //maximum string length - maxLength: function maxLength(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - return String(value).length <= parameters; - }, - - //in provided value list - in: function _in(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - if (typeof parameters == "string") { - parameters = parameters.split("|"); - } - - return value === "" || parameters.indexOf(value) > -1; - }, - - //must match provided regex - regex: function regex(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - var reg = new RegExp(parameters); - - return reg.test(value); - }, - - //value must be unique in this column - unique: function unique(cell, value, parameters) { - if (value === "" || value === null || typeof value === "undefined") { - return true; - } - var unique = true; - - var cellData = cell.getData(); - var column = cell.getColumn()._getSelf(); - - this.table.rowManager.rows.forEach(function (row) { - var data = row.getData(); - - if (data !== cellData) { - if (value == column.getFieldValue(data)) { - unique = false; - } - } - }); - - return unique; - }, - - //must have a value - required: function required(cell, value, parameters) { - return value !== "" & value !== null && typeof value !== "undefined"; - } - }; - - Tabulator.prototype.registerModule("validate", Validate); - - return Tabulator; -}); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/tabulator.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/tabulator.min.js deleted file mode 100644 index 4fc653dfa1..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/tabulator.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};!function(t,e){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Tabulator=e()}(this,function(){"use strict";Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;no?(e=t-o,this.element.style.marginLeft=-e+"px"):this.element.style.marginLeft=0,this.scrollLeft=t,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()},t.prototype.setColumns=function(t,e){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField=[],o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),t.forEach(function(t,e){o._addColumn(t)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),o.redraw(!0)},t.prototype._addColumn=function(t,e,o){var n=new i(t,this),s=n.getElement(),r=o?this.findColumnIndex(o):o;if(o&&r>-1){var a=this.columns.indexOf(o.getTopColumn()),l=o.getElement();e?(this.columns.splice(a,0,n),l.parentNode.insertBefore(s,l)):(this.columns.splice(a+1,0,n),l.parentNode.insertBefore(s,l.nextSibling))}else e?(this.columns.unshift(n),this.headersElement.insertBefore(n.getElement(),this.headersElement.firstChild)):(this.columns.push(n),this.headersElement.appendChild(n.getElement()));return n},t.prototype.registerColumnField=function(t){t.definition.field&&(this.columnsByField[t.definition.field]=t)},t.prototype.registerColumnPosition=function(t){this.columnsByIndex.push(t)},t.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(t){t.reRegisterPosition()})},t.prototype._verticalAlignHeaders=function(){var t=this,e=0;t.columns.forEach(function(t){var o;t.clearVerticalAlign(),(o=t.getHeight())>e&&(e=o)}),t.columns.forEach(function(o){o.verticalAlign(t.table.options.columnVertAlign,e)}),t.rowManager.adjustTableSize()},t.prototype.findColumn=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t)))return this.columnsByField[t]||!1;if(t instanceof i)return t;if(t instanceof o)return t._getSelf()||!1;if(t instanceof HTMLElement){return e.columns.find(function(e){return e.element===t})||!1}return!1},t.prototype.getColumnByField=function(t){return this.columnsByField[t]},t.prototype.getColumnByIndex=function(t){return this.columnsByIndex[t]},t.prototype.getColumns=function(){return this.columns},t.prototype.findColumnIndex=function(t){return this.columnsByIndex.findIndex(function(e){return t===e})},t.prototype.getRealColumns=function(){return this.columnsByIndex},t.prototype.traverse=function(t){this.columnsByIndex.forEach(function(e,o){t(e,o)})},t.prototype.getDefinitions=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){(!t||t&&e.visible)&&o.push(e.getDefinition())}),o},t.prototype.getDefinitionTree=function(){var t=this,e=[];return t.columns.forEach(function(t){e.push(t.getDefinition(!0))}),e},t.prototype.getComponents=function(t){var e=this,o=[];return(t?e.columns:e.columnsByIndex).forEach(function(t){o.push(t.getComponent())}),o},t.prototype.getWidth=function(){var t=0;return this.columnsByIndex.forEach(function(e){e.visible&&(t+=e.getWidth())}),t},t.prototype.moveColumn=function(t,e,o){this._moveColumnInArray(this.columns,t,e,o),this._moveColumnInArray(this.columnsByIndex,t,e,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,t.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistentLayout&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.save("columns")},t.prototype._moveColumnInArray=function(t,e,o,i,n){var s,r=t.indexOf(e);r>-1&&(t.splice(r,1),s=t.indexOf(o),s>-1?i&&(s+=1):s=r,t.splice(s,0,e),n&&this.table.rowManager.rows.forEach(function(t){if(t.cells.length){var e=t.cells.splice(r,1)[0];t.cells.splice(s,0,e)}}))},t.prototype.scrollToColumn=function(t,e,o){var i=this,n=0,s=0,r=0,a=t.getElement();return new Promise(function(l,u){if(void 0===e&&(e=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),t.visible){switch(e){case"middle":case"center":r=-i.element.clientWidth/2;break;case"right":r=a.clientWidth-i.headersElement.clientWidth}if(!o&&(s=a.offsetLeft)>0&&s+a.offsetWidtht.rowManager.element.clientHeight&&(e-=t.rowManager.element.offsetWidth-t.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,s,r;i.visible&&(n=i.definition.width||0,s=void 0===i.minWidth?t.table.options.columnMinWidth:parseInt(i.minWidth),r="string"==typeof n?n.indexOf("%")>-1?e/100*parseInt(n):parseInt(n):n,o+=r>s?r:s)}),o},t.prototype.addColumn=function(t,e,o){var i=this._addColumn(t,e,o);this._reIndexColumns(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),this.redraw(),"fitColumns"!=this.table.modules.layout.getMode()&&i.reinitializeWidth(),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},t.prototype.deregisterColumn=function(t){var e,o=t.getField();o&&delete this.columnsByField[o],e=this.columnsByIndex.indexOf(t),e>-1&&this.columnsByIndex.splice(e,1),e=this.columns.indexOf(t),e>-1&&this.columns.splice(e,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.redraw()},t.prototype.redraw=function(t){t&&(c.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),"fitColumns"==this.table.modules.layout.getMode()?this.table.modules.layout.layout():t?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t&&(this.table.options.persistentLayout&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var o=function(t){this._column=t,this.type="ColumnComponent"};o.prototype.getElement=function(){return this._column.getElement()},o.prototype.getDefinition=function(){return this._column.getDefinition()},o.prototype.getField=function(){return this._column.getField()},o.prototype.getCells=function(){var t=[];return this._column.cells.forEach(function(e){t.push(e.getComponent())}),t},o.prototype.getVisibility=function(){return this._column.visible},o.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.show()}):this._column.show()},o.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.hide()}):this._column.hide()},o.prototype.toggle=function(){this._column.visible?this.hide():this.show()},o.prototype.delete=function(){this._column.delete()},o.prototype.getSubColumns=function(){var t=[];return this._column.columns.length&&this._column.columns.forEach(function(e){t.push(e.getComponent())}),t},o.prototype.getParentColumn=function(){return this._column.parent instanceof i&&this._column.parent.getComponent()},o.prototype._getSelf=function(){return this._column},o.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},o.prototype.getTable=function(){return this._column.table},o.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},o.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},o.prototype.setHeaderFilterValue=function(t){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,t)};var i=function t(e,o){var i=this;this.table=o.table,this.definition=e,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.setField(this.definition.field),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1},this.width=null,this.minWidth=null,this.widthFixed=!1,this.visible=!0,e.columns?(this.isGroup=!0,e.columns.forEach(function(e,o){var n=new t(e,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),e.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader()};i.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.setAttribute("role","columnheader"),t.setAttribute("aria-sort","none"),t},i.prototype.createGroupElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col-group-cols"),t},i.prototype.setField=function(t){this.field=t,this.fieldStructure=t?this.table.options.nestedFieldSeparator?t.split(this.table.options.nestedFieldSeparator):[t]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNesteData:this._setFlatData},i.prototype.registerColumnPosition=function(t){this.parent.registerColumnPosition(t)},i.prototype.registerColumnField=function(t){this.parent.registerColumnField(t)},i.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(t){t.reRegisterPosition()}):this.registerColumnPosition(this)},i.prototype.setTooltip=function(){var t=this,e=t.definition,o=e.headerTooltip||!1===e.tooltip?e.headerTooltip:t.table.options.tooltipsHeader;o?!0===o?e.field?t.table.modules.localize.bind("columns|"+e.field,function(o){t.element.setAttribute("title",o||e.title)}):t.element.setAttribute("title",e.title):("function"==typeof o&&!1===(o=o(t.getComponent()))&&(o=""),t.element.setAttribute("title",o)):t.element.setAttribute("title","")},i.prototype._buildHeader=function(){for(var t=this,e=t.definition;t.element.firstChild;)t.element.removeChild(t.element.firstChild);e.headerVertical&&(t.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&t.element.classList.add("tabulator-col-vertical-flip")),t.contentElement=t._bindEvents(),t.contentElement=t._buildColumnHeaderContent(),t.element.appendChild(t.contentElement),t.isGroup?t._buildGroupHeader():t._buildColumnHeader(),t.setTooltip(),t.table.options.resizableColumns&&t.table.modExists("resizeColumns")&&t.table.modules.resizeColumns.initializeColumn("header",t,t.element),e.headerFilter&&t.table.modExists("filter")&&t.table.modExists("edit")&&(void 0!==e.headerFilterPlaceholder&&e.field&&t.table.modules.localize.setHeaderFilterColumnPlaceholder(e.field,e.headerFilterPlaceholder),t.table.modules.filter.initializeColumn(t)),t.table.modExists("frozenColumns")&&t.table.modules.frozenColumns.initializeColumn(t),t.table.options.movableColumns&&!t.isGroup&&t.table.modExists("moveColumn")&&t.table.modules.moveColumn.initializeColumn(t),(e.topCalc||e.bottomCalc)&&t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.initializeColumn(t),t.element.addEventListener("mouseenter",function(e){t.setTooltip()})},i.prototype._bindEvents=function(){var t,e,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(t){n.headerClick(t,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(t){n.headerDblClick(t,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(t){n.headerContext(t,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0}),i.element.addEventListener("touchend",function(t){o&&n.headerTap(t,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,n.headerDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),"function"==typeof n.headerTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,n.headerTapHold(t,i.getComponent())},1e3)}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},i.prototype._buildColumnHeader=function(){var t=this,e=t.definition,o=t.table;o.modExists("sort")&&o.modules.sort.initializeColumn(t,t.contentElement),o.modExists("format")&&o.modules.format.initializeColumn(t),void 0!==e.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(t),void 0!==e.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(t),o.modExists("mutator")&&o.modules.mutator.initializeColumn(t),o.modExists("accessor")&&o.modules.accessor.initializeColumn(t),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(t),void 0!==e.visible&&(e.visible?t.show(!0):t.hide(!0)),e.cssClass&&t.element.classList.add(e.cssClass),e.field&&this.element.setAttribute("tabulator-field",e.field),t.setMinWidth(void 0===e.minWidth?t.table.options.columnMinWidth:e.minWidth),t.reinitializeWidth(),t.tooltip=t.definition.tooltip||!1===t.definition.tooltip?t.definition.tooltip:t.table.options.tooltips,t.hozAlign=void 0===t.definition.align?"":t.definition.align},i.prototype._buildColumnHeaderContent=function(){var t=this,e=(t.definition,t.table,document.createElement("div"));return e.classList.add("tabulator-col-content"),e.appendChild(t._buildColumnHeaderTitle()),e},i.prototype._buildColumnHeaderTitle=function(){var t=this,e=t.definition,o=t.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),e.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(t){t.stopPropagation(),n.focus()}),n.addEventListener("change",function(){e.title=n.value,o.options.columnTitleChanged.call(t.table,t.getComponent())}),i.appendChild(n),e.field?o.modules.localize.bind("columns|"+e.field,function(t){n.value=t||e.title||" "}):n.value=e.title||" "}else e.field?o.modules.localize.bind("columns|"+e.field,function(o){t._formatColumnHeaderTitle(i,o||e.title||" ")}):t._formatColumnHeaderTitle(i,e.title||" ");return i},i.prototype._formatColumnHeaderTitle=function(t,e){var o,i,n,s;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),s={getValue:function(){return e},getElement:function(){return t}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,s,n),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?this.element.appendChild(i):(this.element.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=i}else t.innerHTML=e},i.prototype._buildGroupHeader=function(){this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.element.appendChild(this.groupElement)},i.prototype._getFlatData=function(t){return t[this.field]},i.prototype._getNestedData=function(t){for(var e,o=t,i=this.fieldStructure,n=i.length,s=0;se&&(e=o)}),e&&t.setWidthActual(e+1))},i.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},i.prototype.getComponent=function(){return new o(this)};var n=function(t){this.table=t,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="classic",this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[]};n.prototype.createHolderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-tableHolder"),t.setAttribute("tabindex",0),t},n.prototype.createTableElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-table"),t},n.prototype.getElement=function(){return this.element},n.prototype.getTableElement=function(){return this.tableElement},n.prototype.getRowPosition=function(t,e){return e?this.activeRows.indexOf(t):this.rows.indexOf(t)},n.prototype.setColumnManager=function(t){this.columnManager=t},n.prototype.initialize=function(){var t=this;t.setRenderMode(),t.element.appendChild(t.tableElement),t.firstRender=!0,t.element.addEventListener("scroll",function(){var e=t.element.scrollLeft;t.scrollLeft!=e&&(t.columnManager.scrollHorizontal(e),t.table.options.groupBy&&t.table.modules.groupRows.scrollHeaders(e),t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.scrollHorizontal(e)),t.scrollLeft=e}),"virtual"===this.renderMode&&t.element.addEventListener("scroll",function(){var e=t.element.scrollTop,o=t.scrollTop>e;t.scrollTop!=e?(t.scrollTop=e,t.scrollVertical(o),"scroll"==t.table.options.ajaxProgressiveLoad&&t.table.modules.ajax.nextPage(t.element.scrollHeight-t.element.clientHeight-e)):t.scrollTop=e})},n.prototype.findRow=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t))){if(void 0===t||null===t)return!1;return e.rows.find(function(o){return o.data[e.table.options.index]==t})||!1}if(t instanceof r)return t;if(t instanceof s)return t._getSelf()||!1;if(t instanceof HTMLElement){return e.rows.find(function(e){return e.element===t})||!1}return!1},n.prototype.getRowFromPosition=function(t,e){return e?this.activeRows[t]:this.rows[t]},n.prototype.scrollToRow=function(t,e,o){var i,n=this,s=this.getDisplayRows().indexOf(t),r=t.getElement(),a=0;return new Promise(function(t,l){if(s>-1){if(void 0===e&&(e=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===e)switch(n.renderMode){case"classic":i=c.prototype.helpers.elOffset(r).top,e=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":e=Math.abs(n.vDomTop-s)>Math.abs(n.vDomBottom-s)?"bottom":"top"}if(!o&&c.prototype.helpers.elVisible(r)&&(a=c.prototype.helpers.elOffset(r).top-c.prototype.helpers.elOffset(n.element).top)>0&&a-1&&this.activeRows.splice(o,1),e>-1&&this.rows.splice(e,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(e){var o=e.indexOf(t);o>-1&&e.splice(o,1)}),this.reRenderInPosition(),this.table.options.rowDeleted.call(this.table,t.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},n.prototype.addRow=function(t,e,o,i){var n=this.addRowActual(t,e,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:t,pos:e,index:o}),n},n.prototype.addRows=function(t,e,o){var i=this,n=this,s=0,r=[];return new Promise(function(a,l){e=i.findAddRowPos(e),Array.isArray(t)||(t=[t]),s=t.length-1,(void 0===o&&e||void 0!==o&&!e)&&t.reverse(),t.forEach(function(t,i){var s=n.addRow(t,e,o,!0);r.push(s)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(),i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),a(r)})},n.prototype.findAddRowPos=function(t){return void 0===t&&(t=this.table.options.addRowPos),"pos"===t&&(t=!0),"bottom"===t&&(t=!1),t},n.prototype.addRowActual=function(t,e,o,i){var n,s=t instanceof r?t:new r(t||{},this),a=this.findAddRowPos(e);if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(n=this.getDisplayRows(),a?n.length?o=n[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],a=!1):n.length&&(o=n[n.length-1],a=!(n.length1&&(!o||o&&-1==l.indexOf(o)?a?l[0]!==s&&(o=l[0],this._moveRowInArray(s.getGroup().rows,s,o,a)):l[l.length-1]!==s&&(o=l[l.length-1], -this._moveRowInArray(s.getGroup().rows,s,o,a)):this._moveRowInArray(s.getGroup().rows,s,o,a))}if(o){var u=this.rows.indexOf(o),c=this.activeRows.indexOf(o);this.displayRowIterator(function(t){var e=t.indexOf(o);e>-1&&t.splice(a?e:e+1,0,s)}),c>-1&&this.activeRows.splice(a?c:c+1,0,s),u>-1&&this.rows.splice(a?u:u+1,0,s)}else a?(this.displayRowIterator(function(t){t.unshift(s)}),this.activeRows.unshift(s),this.rows.unshift(s)):(this.displayRowIterator(function(t){t.push(s)}),this.activeRows.push(s),this.rows.push(s));return this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,s.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),i||this.reRenderInPosition(),s},n.prototype.moveRow=function(t,e,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",t,{pos:this.getRowPosition(t),to:e,after:o}),this.moveRowActual(t,e,o),this.table.options.rowMoved.call(this.table,t.getComponent())},n.prototype.moveRowActual=function(t,e,o){var i=this;if(this._moveRowInArray(this.rows,t,e,o),this._moveRowInArray(this.activeRows,t,e,o),this.displayRowIterator(function(n){i._moveRowInArray(n,t,e,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){var n=e.getGroup(),s=t.getGroup();n===s?this._moveRowInArray(n.rows,t,e,o):(s&&s.removeRow(t),n.insertRow(t,e,o))}},n.prototype._moveRowInArray=function(t,e,o,i){var n,s,r,a;if(e!==o&&(n=t.indexOf(e),n>-1&&(t.splice(n,1),s=t.indexOf(o),s>-1?i?t.splice(s+1,0,e):t.splice(s,0,e):t.splice(n,0,e)),t===this.getDisplayRows())){r=nn?s:n+1;for(var l=r;l<=a;l++)t[l]&&this.styleRow(t[l],l)}},n.prototype.clearData=function(){this.setData([])},n.prototype.getRowIndex=function(t){return this.findRowIndex(t,this.rows)},n.prototype.getDisplayRowIndex=function(t){var e=this.getDisplayRows().indexOf(t);return e>-1&&e},n.prototype.nextDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return!1!==o&&o-1)&&o},n.prototype.getData=function(t,e){var o=this,i=[];return(t?o.activeRows:o.rows).forEach(function(t){i.push(t.getData(e||"data"))}),i},n.prototype.getHtml=function(t){var e=this.getData(t),o=[],i="",n="";return this.table.columnManager.getColumns().forEach(function(t){var e=t.getDefinition();t.visible&&!e.hideInHtml&&(i+=""+(e.title||"")+"",o.push(t))}),e.forEach(function(t){var e="";o.forEach(function(o){var i=o.getFieldValue(t);void 0!==i&&null!==i||(i=":"),e+=""+i+""}),n+=""+e+""}),"\n\n\t\t\t\n\n\t\t\t"+i+"\n\n\t\t\t\n\n\t\t\t"+n+"\n\n\t\t\t
"},n.prototype.getComponents=function(t){var e=this,o=[];return(t?e.activeRows:e.rows).forEach(function(t){o.push(t.getComponent())}),o},n.prototype.getDataCount=function(t){return t?this.rows.length:this.activeRows.length},n.prototype._genRemoteRequest=function(){var t=this,e=t.table,o=e.options,i={};if(e.modExists("page")){if(o.ajaxSorting){var n=t.table.modules.sort.getSort();n.forEach(function(t){delete t.column}),i[t.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var s=t.table.modules.filter.getFilters(!0,!0);i[t.table.modules.page.paginationDataSentNames.filters]=s}t.table.modules.ajax.setParams(i,!0)}e.modules.ajax.sendRequest().then(function(e){t.setData(e)}).catch(function(t){})},n.prototype.filterRefresh=function(){var t=this.table,e=t.options,o=this.scrollLeft;e.ajaxFiltering?"remote"==e.pagination&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1)):e.ajaxProgressiveLoad?t.modules.ajax.loadData():this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},n.prototype.sorterRefresh=function(){var t=this.table,e=this.table.options,o=this.scrollLeft;e.ajaxSorting?("remote"==e.pagination||e.progressiveLoad)&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1)):e.ajaxProgressiveLoad?t.modules.ajax.loadData():this._genRemoteRequest():this.refreshActiveData("sort"),this.scrollHorizontal(o)},n.prototype.scrollHorizontal=function(t){this.scrollLeft=t,this.element.scrollLeft=t,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(t),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(t)},n.prototype.refreshActiveData=function(t,e,o){var i,n=this,s=this.table;switch(t||(t="all"),s.options.selectable&&!s.options.selectablePersistence&&s.modExists("selectRow")&&s.modules.selectRow.deselectRows(),t){case"all":case"filter":e?e=!1:s.modExists("filter")?n.setActiveRows(s.modules.filter.filter(n.rows)):n.setActiveRows(n.rows.slice(0));case"sort":e?e=!1:s.modExists("sort")&&s.modules.sort.sort();case"display":this.resetDisplayRows();case"freeze":e?e=!1:this.table.modExists("frozenRows")&&s.modules.frozenRows.isFrozen()&&(s.modules.frozenRows.getDisplayIndex()||s.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.frozenRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.frozenRows.getRows(this.getDisplayRows(i-1)),i))&&s.modules.frozenRows.setDisplayIndex(i));case"group":e?e=!1:s.options.groupBy&&s.modExists("groupRows")&&(s.modules.groupRows.getDisplayIndex()||s.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.groupRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.groupRows.getRows(this.getDisplayRows(i-1)),i))&&s.modules.groupRows.setDisplayIndex(i));case"tree":e?e=!1:s.options.dataTree&&s.modExists("dataTree")&&(s.modules.dataTree.getDisplayIndex()||s.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.dataTree.getDisplayIndex(),!0!==(i=n.setDisplayRows(s.modules.dataTree.getRows(this.getDisplayRows(i-1)),i))&&s.modules.dataTree.setDisplayIndex(i)),s.options.pagination&&s.modExists("page")&&!o&&"local"==s.modules.page.getMode()&&s.modules.page.reset();case"page":e?e=!1:s.options.pagination&&s.modExists("page")&&(s.modules.page.getDisplayIndex()||s.modules.page.setDisplayIndex(this.getNextDisplayIndex()),i=s.modules.page.getDisplayIndex(),"local"==s.modules.page.getMode()&&s.modules.page.setMaxRows(this.getDisplayRows(i-1).length),!0!==(i=n.setDisplayRows(s.modules.page.getRows(this.getDisplayRows(i-1)),i))&&s.modules.page.setDisplayIndex(i))}c.prototype.helpers.elVisible(n.element)&&(o?n.reRenderInPosition():(n.renderTable(),s.options.layoutColumnsOnNewData&&n.table.columnManager.redraw(!0))),s.modExists("columnCalcs")&&s.modules.columnCalcs.recalc(this.activeRows)},n.prototype.setActiveRows=function(t){this.activeRows=t,this.activeRowsCount=this.activeRows.length},n.prototype.resetDisplayRows=function(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)},n.prototype.getNextDisplayIndex=function(){return this.displayRows.length},n.prototype.setDisplayRows=function(t,e){var o=!0;return e&&void 0!==this.displayRows[e]?(this.displayRows[e]=t,o=!0):(this.displayRows.push(t),o=e=this.displayRows.length-1),e==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),o},n.prototype.getDisplayRows=function(t){return void 0===t?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[t]||[]},n.prototype.displayRowIterator=function(t){this.displayRows.forEach(t),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},n.prototype.getRows=function(){return this.rows},n.prototype.reRenderInPosition=function(t){if("virtual"==this.getRenderMode()){for(var e=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,s=this.getDisplayRows(),r=this.vDomTop;r<=this.vDomBottom;r++)if(s[r]){var a=e-s[r].getElement().offsetTop;if(!(!1===i||Math.abs(a)this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,s.scrollTop=this.scrollTop,n.style.minWidth=d?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll()},n.prototype.scrollVertical=function(t){var e=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-e>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else t?(e<0&&this._addTopRow(-e),e<0&&this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer&&this._removeBottomRow(-o)):(e>=0&&this.scrollTop>this.vDomWindowBuffer&&this._removeTopRow(e),o>=0&&this._addBottomRow(o))},n.prototype._addTopRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,s=i[n],r=s.getHeight()||this.vDomRowHeight;t>=r&&(this.styleRow(s,n),o.insertBefore(s.getElement(),o.firstChild),s.initialized&&s.heightInitialized||(this.vDomTopNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomTopPad-=r,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=r,this.vDomTop--),t=-(this.scrollTop-this.vDomScrollPosTop),e=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(t,e+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},n.prototype._removeTopRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,e.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,t=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(t)}},n.prototype._addBottomRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom=r&&(this.styleRow(s,n),o.appendChild(s.getElement()),s.initialized&&s.heightInitialized||(this.vDomBottomNewRows.push(s),s.heightInitialized||s.clearCellHeight()),s.initialize(),this.vDomBottomPad-=r,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=r,this.vDomBottom++),t=this.scrollTop-this.vDomScrollPosBottom,e=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(t,e+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},n.prototype._removeBottomRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),e.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,t=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(t)}},n.prototype._quickNormalizeRowHeight=function(t){t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()}),t.length=0},n.prototype.normalizeHeight=function(){this.activeRows.forEach(function(t){t.normalizeHeight()})},n.prototype.adjustTableSize=function(){if("virtual"===this.renderMode){this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height;var t=this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0);this.element.style.minHeight="calc(100% - "+t+"px)",this.element.style.height="calc(100% - "+t+"px)",this.element.style.maxHeight="calc(100% - "+t+"px)"}},n.prototype.reinitialize=function(){this.rows.forEach(function(t){t.reinitialize()})},n.prototype.redraw=function(t){var e=this.scrollLeft;this.adjustTableSize(),t?this.renderTable():("classic"==self.renderMode?self.table.options.groupBy?self.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(e)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},n.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var t=document.createEvent("Event");t.initEvent("scroll",!1,!0),this.element.dispatchEvent(t)}else this.element.dispatchEvent(new Event("scroll"))};var s=function(t){this._row=t};s.prototype.getData=function(t){return this._row.getData(t)},s.prototype.getElement=function(){return this._row.getElement()},s.prototype.getCells=function(){var t=[];return this._row.getCells().forEach(function(e){t.push(e.getComponent())}),t},s.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},s.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},s.prototype.getPosition=function(t){return this._row.table.rowManager.getRowPosition(this._row,t)},s.prototype.delete=function(){return this._row.delete()},s.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},s.prototype.update=function(t){return this._row.updateData(t)},s.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},s.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},s.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},s.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},s.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},s.prototype._getSelf=function(){return this._row},s.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},s.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},s.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},s.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},s.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},s.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},s.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row)},s.prototype.reformat=function(){return this._row.reinitialize()},s.prototype.getGroup=function(){return this._row.getGroup().getComponent()},s.prototype.getTable=function(){return this._row.table},s.prototype.getNextRow=function(){return this._row.nextRow()},s.prototype.getPrevRow=function(){return this._row.prevRow()};var r=function(t,e){this.table=e.table,this.parent=e,this.data={},this.type="row",this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.setData(t),this.generateElement()};r.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-row"),t.setAttribute("role","row"),t},r.prototype.getElement=function(){return this.element},r.prototype.generateElement=function(){var t,e,o,i=this;!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(t){i.table.options.rowClick(t,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(t){i.table.options.rowDblClick(t,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(t){i.table.options.rowContext(t,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0}),i.element.addEventListener("touchend",function(t){o&&i.table.options.rowTap(t,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,i.table.options.rowDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),i.table.options.rowTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,i.table.options.rowTapHold(t,i.getComponent())},1e3)}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null}))},r.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},r.prototype.initialize=function(t){var e=this;if(!e.initialized||t){for(e.deleteCells();e.element.firstChild;)e.element.removeChild(e.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),e.cells.forEach(function(t){e.element.appendChild(t.getElement()),t.cellRendered()}),t&&e.normalizeHeight(),e.table.options.dataTree&&e.table.modExists("dataTree")&&e.table.modules.dataTree.layoutRow(this),"collapse"===e.table.options.responsiveLayout&&e.table.modExists("responsiveLayout")&&e.table.modules.responsiveLayout.layoutRow(this),e.table.options.rowFormatter&&e.table.options.rowFormatter(e.getComponent()),e.table.options.resizableRows&&e.table.modExists("resizeRows")&&e.table.modules.resizeRows.initializeRow(e),e.initialized=!0}},r.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},r.prototype.reinitialize=function(){this.initialized=!1,this.heightInitialized=!1,this.height=0,null!==this.element.offsetParent&&this.initialize(!0)},r.prototype.calcHeight=function(){var t=0,e=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(e){var o=e.getHeight();o>t&&(t=o)}),this.height=Math.max(t,e),this.outerHeight=this.element.offsetHeight},r.prototype.setCellHeight=function(){var t=this.height;this.cells.forEach(function(e){e.setHeight(t)}),this.heightInitialized=!0},r.prototype.clearCellHeight=function(){this.cells.forEach(function(t){t.clearHeight()})},r.prototype.normalizeHeight=function(t){t&&this.clearCellHeight(),this.calcHeight(),this.setCellHeight()},r.prototype.setHeight=function(t){this.height=t,this.setCellHeight()},r.prototype.setHeight=function(t,e){(this.height!=t||e)&&(this.height=t,this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},r.prototype.getHeight=function(){return this.outerHeight},r.prototype.getWidth=function(){return this.element.offsetWidth},r.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},r.prototype.setData=function(t){var e=this;e.table.modExists("mutator")?e.data=e.table.modules.mutator.transformRow(t,"data"):e.data=t},r.prototype.updateData=function(t){var e=this,o=this;return new Promise(function(i,n){"string"==typeof t&&(t=JSON.parse(t)),o.table.modExists("mutator")&&(t=o.table.modules.mutator.transformRow(t,"data",!0));for(var s in t)o.data[s]=t[s];for(var s in t){var r=e.getCell(s);r&&r.getValue()!=t[s]&&r.setValueProcessData(t[s])}c.prototype.helpers.elVisible(e.element)?(o.normalizeHeight(),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(e.initialized=!1,e.height=0),o.table.options.rowUpdated.call(e.table,o.getComponent()),i()})},r.prototype.getData=function(t){var e=this;return t?e.table.modExists("accessor")?e.table.modules.accessor.transformRow(e.data,t):void 0:this.data},r.prototype.getCell=function(t){return t=this.table.columnManager.findColumn(t),this.cells.find(function(e){return e.column===t})},r.prototype.getCellIndex=function(t){return this.cells.findIndex(function(e){return e===t})},r.prototype.findNextEditableCell=function(t){var e=!1;if(t0)for(var o=t-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&c.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){e=i;break}}return e},r.prototype.getCells=function(){return this.cells},r.prototype.nextRow=function(){var t=this.table.rowManager.nextDisplayRow(this,!0);return!!t&&t.getComponent()},r.prototype.prevRow=function(){var t=this.table.rowManager.prevDisplayRow(this,!0);return!!t&&t.getComponent()},r.prototype.delete=function(){var t=this;return new Promise(function(e,o){var i=t.table.rowManager.getRowIndex(t);t.deleteActual(),t.table.options.history&&t.table.modExists("history")&&(i&&(i=t.table.rowManager.rows[i-1]),t.table.modules.history.action("rowDelete",t,{data:t.getData(),pos:!i,index:i})),e()})},r.prototype.deleteActual=function(){this.table.rowManager.getRowIndex(this);this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.rowManager.deleteRow(this),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.modules.group&&this.modules.group.removeRow(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},r.prototype.deleteCells=function(){for(var t=this.cells.length,e=0;e-1?(this.browser="ie",this.browserSlow=!0):t.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):t.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1)},c.prototype.setData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o)},c.prototype._setData=function(t,e,o,i){var n=this;return"string"!=typeof t?t?n.rowManager.setData(t,i):n.modExists("ajax")&&(n.modules.ajax.getUrl||n.options.ajaxURLGenerator)?"remote"==n.options.pagination&&n.modExists("page",!0)?(n.modules.page.reset(!0),n.modules.page.setPage(1)):n.modules.ajax.loadData(i):n.rowManager.setData([],i):0==t.indexOf("{")||0==t.indexOf("[")?n.rowManager.setData(JSON.parse(t),i):n.modExists("ajax",!0)?(e&&n.modules.ajax.setParams(e),o&&n.modules.ajax.setConfig(o),n.modules.ajax.setUrl(t),"remote"==n.options.pagination&&n.modExists("page",!0)?(n.modules.page.reset(!0),n.modules.page.setPage(1)):n.modules.ajax.loadData(i)):void 0},c.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},c.prototype.getData=function(t){return this.rowManager.getData(t)},c.prototype.getDataCount=function(t){return this.rowManager.getDataCount(t)},c.prototype.searchRows=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",t,e,o)},c.prototype.searchData=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",t,e,o)},c.prototype.getHtml=function(t){return this.rowManager.getHtml(t)},c.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},c.prototype.replaceData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!0)},c.prototype.updateData=function(t){var e=this,o=this,i=0;return new Promise(function(n,s){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);e&&(i++,e.updateData(t).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},c.prototype.addData=function(t,e,o){var i=this;return new Promise(function(n,s){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?i.rowManager.addRows(t,e,o).then(function(t){var e=[];t.forEach(function(t){e.push(t.getComponent())}),n(e)}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},c.prototype.updateOrAddData=function(t){var e=this,o=this,i=[],n=0;return new Promise(function(s,r){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);n++,e?e.updateData(t).then(function(){n--,i.push(e.getComponent()),n||s(i)}):o.rowManager.addRows(t).then(function(t){n--,i.push(t[0].getComponent()),n||s(i)})}):(console.warn("Update Error - No data provided"),r("Update Error - No data provided"))})},c.prototype.getRow=function(t){var e=this.rowManager.findRow(t);return e?e.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},c.prototype.getRowFromPosition=function(t,e){var o=this.rowManager.getRowFromPosition(t,e);return o?o.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},c.prototype.deleteRow=function(t){var e=this;return new Promise(function(o,i){var n=e.rowManager.findRow(t);n?n.delete().then(function(){o()}).catch(function(t){i(t)}):(console.warn("Delete Error - No matching row found:",t),i("Delete Error - No matching row found"))})},c.prototype.addRow=function(t,e,o){var i=this;return new Promise(function(n,s){"string"==typeof t&&(t=JSON.parse(t)),i.rowManager.addRows(t,e,o).then(function(t){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(t[0].getComponent())})})},c.prototype.updateOrAddRow=function(t,e){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),s?s.updateData(e).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(s.getComponent())}).catch(function(t){n(t)}):s=o.rowManager.addRows(e).then(function(t){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(t[0].getComponent())}).catch(function(t){n(t)})})},c.prototype.updateRow=function(t,e){var o=this;return new Promise(function(i,n){var s=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),s?s.updateData(e).then(function(){i(s.getComponent())}).catch(function(t){n(t)}):(console.warn("Update Error - No matching row found:",t),n("Update Error - No matching row found"))})},c.prototype.scrollToRow=function(t,e,o){var i=this;return new Promise(function(n,s){var r=i.rowManager.findRow(t);r?i.rowManager.scrollToRow(r,e,o).then(function(){n()}).catch(function(t){s(t)}):(console.warn("Scroll Error - No matching row found:",t),s("Scroll Error - No matching row found"))})},c.prototype.getRows=function(t){return this.rowManager.getComponents(t)},c.prototype.getRowPosition=function(t,e){var o=this.rowManager.findRow(t);return o?this.rowManager.getRowPosition(o,e):(console.warn("Position Error - No matching row found:",t),!1)},c.prototype.copyToClipboard=function(t,e,o,i){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(t,e,o,i)},c.prototype.setColumns=function(t){this.columnManager.setColumns(t)},c.prototype.getColumns=function(t){return this.columnManager.getComponents(t)},c.prototype.getColumn=function(t){var e=this.columnManager.findColumn(t);return e?e.getComponent():(console.warn("Find Error - No matching column found:",t),!1)},c.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},c.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},c.prototype.setColumnLayout=function(t){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,t)),!0)},c.prototype.showColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Show Error - No matching column found:",t),!1;e.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},c.prototype.hideColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Hide Error - No matching column found:",t),!1;e.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},c.prototype.toggleColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Visibility Toggle Error - No matching column found:",t),!1;e.visible?e.hide():e.show()},c.prototype.addColumn=function(t,e,o){var i=this.columnManager.findColumn(o);this.columnManager.addColumn(t,e,i)},c.prototype.deleteColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Delete Error - No matching column found:",t),!1;e.delete()},c.prototype.scrollToColumn=function(t,e,o){var i=this;return new Promise(function(n,s){var r=i.columnManager.findColumn(t);r?i.columnManager.scrollToColumn(r,e,o).then(function(){n()}).catch(function(t){s(t)}):(console.warn("Scroll Error - No matching column found:",t),s("Scroll Error - No matching column found"))})},c.prototype.setLocale=function(t){this.modules.localize.setLocale(t)},c.prototype.getLocale=function(){return this.modules.localize.getLocale()},c.prototype.getLang=function(t){return this.modules.localize.getLang(t)},c.prototype.redraw=function(t){this.columnManager.redraw(t),this.rowManager.redraw(t)},c.prototype.setHeight=function(t){this.options.height=isNaN(t)?t:t+"px",this.element.style.height=this.options.height,this.rowManager.redraw()},c.prototype.setSort=function(t,e){this.modExists("sort",!0)&&(this.modules.sort.setSort(t,e),this.rowManager.sorterRefresh())},c.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},c.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},c.prototype.setFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.setFilter(t,e,o),this.rowManager.filterRefresh())},c.prototype.addFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.addFilter(t,e,o),this.rowManager.filterRefresh())},c.prototype.getFilters=function(t){if(this.modExists("filter",!0))return this.modules.filter.getFilters(t)},c.prototype.setHeaderFilterFocus=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Filter Focus Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterFocus(e)}},c.prototype.setHeaderFilterValue=function(t,e){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(t);if(!o)return console.warn("Column Filter Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterValue(o,e)}},c.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},c.prototype.removeFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(t,e,o),this.rowManager.filterRefresh())},c.prototype.clearFilter=function(t){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(t),this.rowManager.filterRefresh())},c.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},c.prototype.selectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.selectRows(t)},c.prototype.deselectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(t)},c.prototype.toggleSelectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(t)},c.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},c.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},c.prototype.setMaxPage=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(t)},c.prototype.setPage=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPage(t)},c.prototype.setPageSize=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(t),this.modules.page.setPage(1)},c.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},c.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},c.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},c.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},c.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},c.prototype.setGroupBy=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display")},c.prototype.setGroupStartOpen=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=t,this.modules.groupRows.initialize(),this.options.groupBy?this.rowManager.refreshActiveData("group"):console.warn("Grouping Update - cant refresh view, no groups have been set")},c.prototype.setGroupHeader=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=t,this.modules.groupRows.initialize(),this.options.groupBy?this.rowManager.refreshActiveData("group"):console.warn("Grouping Update - cant refresh view, no groups have been set")},c.prototype.getGroups=function(t){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},c.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},c.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},c.prototype.navigatePrev=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().prev())},c.prototype.navigateNext=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().next())},c.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},c.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},c.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},c.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().dpwn())},c.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},c.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},c.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},c.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},c.prototype.download=function(t,e,o){this.modExists("download",!0)&&this.modules.download.download(t,e,o)},c.prototype.tableComms=function(t,e,o,i){this.modules.comms.receive(t,e,o,i)},c.prototype.moduleBindings={},c.prototype.extendModule=function(t,e,o){if(c.prototype.moduleBindings[t]){var i=c.prototype.moduleBindings[t].prototype[e];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",e)}else console.warn("Module Error - module does not exist:",t)},c.prototype.registerModule=function(t,e){c.prototype.moduleBindings[t]=e},c.prototype.bindModules=function(){this.modules={};for(var t in c.prototype.moduleBindings)this.modules[t]=new c.prototype.moduleBindings[t](this)},c.prototype.modExists=function(t,e){return!!this.modules[t]||(e&&console.error("Tabulator Module Not Installed: "+t),!1)},c.prototype.helpers={elVisible:function(t){return!(t.offsetWidth<=0&&t.offsetHeight<=0)},elOffset:function(t){var e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset-document.documentElement.clientTop,left:e.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(t){var e=Array.isArray(t)?[]:{};for(var o in t)null!=t[o]&&"object"===_typeof(t[o])?t[o]instanceof Date?e[o]=new Date(t[o]):e[o]=this.deepClone(t[o]):e[o]=t[o];return e}},c.prototype.comms={tables:[],register:function(t){c.prototype.comms.tables.push(t)},deregister:function(t){var e=c.prototype.comms.tables.indexOf(t);e>-1&&c.prototype.comms.tables.splice(e,1)},lookupTable:function(t){var e,o,i=[];if("string"==typeof t){if(e=document.querySelectorAll(t),e.length)for(var n=0;n-1?n/100*parseInt(t):parseInt(t):t}function o(t,i,n,s){function r(t){return n*(t.column.definition.widthGrow||1)}function a(t){return e(t.width)-n*(t.column.definition.widthShrink||0)}var l=[],u=0,c=0,d=0,h=0,p=0,m=[];return t.forEach(function(t,e){var o=s?a(t):r(t);t.column.minWidth>=o?l.push(t):(m.push(t),p+=s?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)}),l.length?(l.forEach(function(t){u+=s?t.width-t.column.minWidth:t.column.minWidth,t.width=t.column.minWidth}),c=i-u,d=p?Math.floor(c/p):c,h=c-d*p,h+=o(m,c,d,s)):(h=p?i-Math.floor(i/p)*p:i,m.forEach(function(t){t.width=s?a(t):r(t)})),h}var i=this,n=i.table.element.clientWidth,s=0,r=0,a=0,l=0,u=[],c=[],d=0,h=0,p=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth), -t.forEach(function(t){var o,i,n;t.visible&&(o=t.definition.width,i=parseInt(t.minWidth),o?(n=e(o),s+=n>i?n:i,t.definition.widthShrink&&(c.push({column:t,width:n>i?n:i}),d+=t.definition.widthShrink)):(u.push({column:t,width:0}),a+=t.definition.widthGrow||1))}),r=n-s,l=Math.floor(r/a);var p=o(u,r,l,!1);u.length&&p>0&&(u[u.length-1].width+=+p),u.forEach(function(t){r-=t.width}),h=Math.abs(p)+r,h>0&&d&&(p=o(c,h,Math.floor(h/d),!0)),c.length&&(c[c.length-1].width-=p),u.forEach(function(t){t.column.setWidth(t.width)}),c.forEach(function(t){t.column.setWidth(t.width)})}},c.prototype.registerModule("layout",d);var h=function(t){this.table=t,this.locale="default",this.lang=!1,this.bindings={}};h.prototype.setHeaderFilterPlaceholder=function(t){this.langs.default.headerFilters.default=t},h.prototype.setHeaderFilterColumnPlaceholder=function(t,e){this.langs.default.headerFilters.columns[t]=e,this.lang&&!this.lang.headerFilters.columns[t]&&(this.lang.headerFilters.columns[t]=e)},h.prototype.installLang=function(t,e){this.langs[t]?this._setLangProp(this.langs[t],e):this.langs[t]=e},h.prototype._setLangProp=function(t,e){for(var o in e)t[o]&&"object"==_typeof(t[o])?this._setLangProp(t[o],e[o]):t[o]=e[o]},h.prototype.setLocale=function(t){function e(t,o){for(var i in t)"object"==_typeof(t[i])?(o[i]||(o[i]={}),e(t[i],o[i])):o[i]=t[i]}var o=this;if(t=t||"default",!0===t&&navigator.language&&(t=navigator.language.toLowerCase()),t&&!o.langs[t]){var i=t.split("-")[0];o.langs[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",t,i),t=i):(console.warn("Localization Error - Matching locale not found, using default: ",t),t="default")}o.locale=t,o.lang=c.prototype.helpers.deepClone(o.langs.default||{}),"default"!=t&&e(o.langs[t],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},h.prototype.getLocale=function(t){return self.locale},h.prototype.getLang=function(t){return t?this.langs[t]:this.lang},h.prototype.getText=function(t,e){var t=e?t+"|"+e:t,o=t.split("|");return this._getLangElement(o,this.locale)||""},h.prototype._getLangElement=function(t,e){var o=this,i=o.lang;return t.forEach(function(t){var e;i&&(e=i[t],i=void 0!==e&&e)}),i},h.prototype.bind=function(t,e){this.bindings[t]||(this.bindings[t]=[]),this.bindings[t].push(e),e(this.getText(t),this.lang)},h.prototype._executeBindings=function(){var t=this;for(var e in t.bindings)!function(e){t.bindings[e].forEach(function(o){o(t.getText(e),t.lang)})}(e)},h.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page"},headerFilters:{default:"filter column...",columns:{}}}},c.prototype.registerModule("localize",h);var p=function(t){this.table=t};p.prototype.getConnections=function(t){var e,o=this,i=[];return e=c.prototype.comms.lookupTable(t),e.forEach(function(t){o.table!==t&&i.push(t)}),i},p.prototype.send=function(t,e,o,i){var n=this,s=this.getConnections(t);s.forEach(function(t){t.tableComms(n.table.element,e,o,i)}),!s.length&&t&&console.warn("Table Connection Error - No tables matching selector found",t)},p.prototype.receive=function(t,e,o,i){if(this.table.modExists(e))return this.table.modules[e].commsReceived(t,o,i);console.warn("Inter-table Comms Error - no such module:",e)},c.prototype.registerModule("comms",p);var m=function(t){this.table=t,this.allowedTypes=["","data","download","clipboard"]};m.prototype.initializeColumn=function(t){var e=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,r="accessor"+(n.charAt(0).toUpperCase()+n.slice(1));t.definition[r]&&(s=e.lookupAccessor(t.definition[r]))&&(o=!0,i[r]={accessor:s,params:t.definition[r+"Params"]||{}})}),o&&(t.modules.accessor=i)},m.prototype.lookupAccessor=function(t){var e=!1;switch(void 0===t?"undefined":_typeof(t)){case"string":this.accessors[t]?e=this.accessors[t]:console.warn("Accessor Error - No such accessor found, ignoring: ",t);break;case"function":e=t}return e},m.prototype.transformRow=function(t,e){var o=this,i="accessor"+(e.charAt(0).toUpperCase()+e.slice(1)),n=c.prototype.helpers.deepClone(t||{});return o.table.columnManager.traverse(function(t){var o,s,r,a;t.modules.accessor&&(s=t.modules.accessor[i]||t.modules.accessor.accessor||!1)&&"undefined"!=(o=t.getFieldValue(n))&&(a=t.getComponent(),r="function"==typeof s.params?s.params(o,n,e,a):s.params,t.setFieldValue(n,s.accessor(o,n,e,r,a)))}),n},m.prototype.accessors={},c.prototype.registerModule("accessor",m);var f=function(t){this.table=t,this.config=!1,this.url="",this.urlGenerator=!1,this.params=!1,this.loaderElement=this.createLoaderElement(),this.msgElement=this.createMsgElement(),this.loadingElement=!1,this.errorElement=!1,this.loaderPromise=!1,this.progressiveLoad=!1,this.loading=!1,this.requestOrder=0};f.prototype.initialize=function(){this.loaderElement.appendChild(this.msgElement),this.table.options.ajaxLoaderLoading&&(this.loadingElement=this.table.options.ajaxLoaderLoading),this.loaderPromise=this.table.options.ajaxRequestFunc||this.defaultLoaderPromise,this.urlGenerator=this.table.options.ajaxURLGenerator||this.defaultURLGenerator,this.table.options.ajaxLoaderError&&(this.errorElement=this.table.options.ajaxLoaderError),this.table.options.ajaxParams&&this.setParams(this.table.options.ajaxParams),this.table.options.ajaxConfig&&this.setConfig(this.table.options.ajaxConfig),this.table.options.ajaxURL&&this.setUrl(this.table.options.ajaxURL),this.table.options.ajaxProgressiveLoad&&(this.table.options.pagination?(this.progressiveLoad=!1,console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time")):this.table.modExists("page")?(this.progressiveLoad=this.table.options.ajaxProgressiveLoad,this.table.modules.page.initializeProgressive(this.progressiveLoad)):console.error("Pagination plugin is required for progressive ajax loading"))},f.prototype.createLoaderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-loader"),t},f.prototype.createMsgElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-loader-msg"),t.setAttribute("role","alert"),t},f.prototype.setParams=function(t,e){if(e){this.params=this.params||{};for(var o in t)this.params[o]=t[o]}else this.params=t},f.prototype.getParams=function(){return this.params||{}},f.prototype.setConfig=function(t){if(this._loadDefaultConfig(),"string"==typeof t)this.config.method=t;else for(var e in t)this.config[e]=t[e]},f.prototype._loadDefaultConfig=function(t){var e=this;if(!e.config||t){e.config={};for(var o in e.defaultConfig)e.config[o]=e.defaultConfig[o]}},f.prototype.setUrl=function(t){this.url=t},f.prototype.getUrl=function(){return this.url},f.prototype.loadData=function(t){return this.progressiveLoad?this._loadDataProgressive():this._loadDataStandard(t)},f.prototype.nextPage=function(t){var e;this.loading||(e=this.table.options.ajaxProgressiveLoadScrollMargin||2*this.table.rowManager.getElement().clientHeight,ti||null===i)&&(i=t)}),null!==i?!1!==n?i.toFixed(n):i:""},min:function(t,e,o){var i=null,n=void 0!==o.precision&&o.precision;return t.forEach(function(t){((t=Number(t))t&&(t=o)}),i.forEach(function(e){var o=e.length;if(o1&&(e.colSpan=t.width),t.height>1&&(e.rowSpan=t.height),e.innerHTML=t.title,m.mapElementStyles(t.element,e,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),o.appendChild(e)}),m.mapElementStyles(m.table.columnManager.getHeadersElement(),o,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),e.appendChild(o)}),m.htmlElement.appendChild(e)}(f)):function(){var t=document.createElement("tr");e.forEach(function(e){var o=document.createElement("th");o.innerHTML=e.definition.title,m.mapElementStyles(e.getElement(),o,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),t.appendChild(o)}),m.mapElementStyles(m.table.columnManager.getHeadersElement(),t,["border-top","border-left","border-right","border-bottom","background-color","color","font-weight","font-family","font-size"]),m.htmlElement.appendChild(document.createElement("thead").appendChild(t))}()),e=this.table.columnManager.columnsByIndex,a=document.createElement("tbody"),window.getComputedStyle&&(l=this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"),u=this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"),c=this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"),h=this.table.element.getElementsByClassName("tabulator-group")[0],c&&(p=c.getElementsByClassName("tabulator-cell"),d=p[0],p[p.length-1])),o.rowGroups?t.forEach(function(t){r(t)}):s(t),this.htmlElement.appendChild(a)},b.prototype.mapElementStyles=function(t,e,o){var i={"background-color":"backgroundColor",color:"fontColor","font-weight":"fontWeight","font-family":"fontFamily","font-size":"fontSize","border-top":"borderTop","border-left":"borderLeft","border-right":"borderRight","border-bottom":"borderBottom"};if(window.getComputedStyle){var n=window.getComputedStyle(t);o.forEach(function(t){e.style[i[t]]=n.getPropertyValue(t)})}},b.prototype.copySelectors={userSelection:function(t,e){return e},selected:function(t,e){var o=[];return this.table.modExists("selectRow",!0)&&(o=this.table.modules.selectRow.getSelectedRows()),t.rowGroups&&console.warn("Clipboard Warning - select coptSelector does not support row groups"),this.buildOutput(o,t,e)},table:function(t,e){return t.rowGroups&&console.warn("Clipboard Warning - table coptSelector does not support row groups"),this.buildOutput(this.table.rowManager.getComponents(),t,e)},active:function(t,e){var o;return o=t.rowGroups?this.buildComplexRows(t):this.table.rowManager.getComponents(!0),this.buildOutput(o,t,e)}},b.prototype.copyFormatters={raw:function(t,e){return t},table:function(t,e){var o=[];return t.forEach(function(t){t.forEach(function(t){void 0===t&&(t=""),t=void 0===t||null===t?"":t.toString(),t.match(/\r|\n/)&&(t=t.split('"').join('""'),t='"'+t+'"')}),o.push(t.join("\t"))}),o.join("\n")}},b.prototype.pasteParsers={table:function(t){var e=[],o=!0,i=this.table.columnManager.columns,n=[],s=[];return t=t.split("\n"),t.forEach(function(t){e.push(t.split("\t"))}),!(!e.length||1===e.length&&e[0].length<2)&&(!0,e[0].forEach(function(t){var e=i.find(function(e){return t&&e.definition.title&&t.trim()&&e.definition.title.trim()===t.trim()});e?n.push(e):o=!1}),o||(o=!0,n=[],e[0].forEach(function(t){var e=i.find(function(e){return t&&e.field&&t.trim()&&e.field.trim()===t.trim()});e?n.push(e):o=!1}),o||(n=this.table.columnManager.columnsByIndex)),o&&e.shift(),e.forEach(function(t){var e={};t.forEach(function(t,o){n[o]&&(e[n[o].field]=t)}),s.push(e)}),s)}},b.prototype.pasteActions={replace:function(t){return this.table.setData(t)},update:function(t){return this.table.updateOrAddData(t)},insert:function(t){return this.table.addData(t)}},c.prototype.registerModule("clipboard",b);var v=function(t){this.table=t,this.indent=10,this.field="",this.collapseEl=null,this.expandEl=null,this.branchEl=null, -this.startOpen=function(){},this.displayIndex=0};v.prototype.initialize=function(){var t=null,e=this.table.options;switch(this.field=e.dataTreeChildField,this.indent=e.dataTreeChildIndent,e.dataTreeBranchElement&&(!0===e.dataTreeBranchElement?(this.branchEl=document.createElement("div"),this.branchEl.classList.add("tabulator-data-tree-branch")):"string"==typeof e.dataTreeBranchElement?(t=document.createElement("div"),t.innerHTML=e.dataTreeBranchElement,this.branchEl=t.firstChild):this.branchEl=e.dataTreeBranchElement),e.dataTreeCollapseElement?"string"==typeof e.dataTreeCollapseElement?(t=document.createElement("div"),t.innerHTML=e.dataTreeCollapseElement,this.collapseEl=t.firstChild):this.collapseEl=e.dataTreeCollapseElement:(this.collapseEl=document.createElement("div"),this.collapseEl.classList.add("tabulator-data-tree-control"),this.collapseEl.innerHTML="
"),e.dataTreeExpandElement?"string"==typeof e.dataTreeExpandElement?(t=document.createElement("div"),t.innerHTML=e.dataTreeExpandElement,this.expandEl=t.firstChild):this.expandEl=e.dataTreeExpandElement:(this.expandEl=document.createElement("div"),this.expandEl.classList.add("tabulator-data-tree-control"),this.expandEl.innerHTML="
"),_typeof(e.dataTreeStartExpanded)){case"boolean":this.startOpen=function(t,o){return e.dataTreeStartExpanded};break;case"function":this.startOpen=e.dataTreeStartExpanded;break;default:this.startOpen=function(t,o){return e.dataTreeStartExpanded[o]}}},v.prototype.initializeRow=function(t){var e=void 0!==t.getData()[this.field];t.modules.dataTree={index:0,open:!!e&&this.startOpen(t.getComponent(),0),controlEl:!1,branchEl:!1,parent:!1,children:e}},v.prototype.layoutRow=function(t){var e=t.getCells()[0],o=e.getElement(),i=t.modules.dataTree;o.style.paddingLeft=parseInt(window.getComputedStyle(o,null).getPropertyValue("padding-left"))+i.index*this.indent+"px",i.branchEl&&i.branchEl.parentNode.removeChild(i.branchEl),this.generateControlElement(t,o),i.index&&this.branchEl&&(i.branchEl=this.branchEl.cloneNode(!0),o.insertBefore(i.branchEl,o.firstChild),o.style.paddingLeft=parseInt(o.style.paddingLeft)+(i.branchEl.offsetWidth+i.branchEl.style.marginRight)*(i.index-1)+"px")},v.prototype.generateControlElement=function(t,e){var o=this,i=t.modules.dataTree,e=e||t.getCells()[0].getElement(),n=i.controlEl;!1!==i.children&&(i.open?(i.controlEl=this.collapseEl.cloneNode(!0),i.controlEl.addEventListener("click",function(e){e.stopPropagation(),o.collapseRow(t)})):(i.controlEl=this.expandEl.cloneNode(!0),i.controlEl.addEventListener("click",function(e){e.stopPropagation(),o.expandRow(t)})),i.controlEl.addEventListener("mousedown",function(t){t.stopPropagation()}),n&&n.parentNode===e?n.parentNode.replaceChild(i.controlEl,n):e.insertBefore(i.controlEl,e.firstChild))},v.prototype.setDisplayIndex=function(t){this.displayIndex=t},v.prototype.getDisplayIndex=function(){return this.displayIndex},v.prototype.getRows=function(t){var e=this,o=[];return t.forEach(function(t,i){var n,s=t.modules.dataTree.children;o.push(t),s.index||!1===s.children||(n=e.getChildren(t),n.forEach(function(t){o.push(t)}))}),o},v.prototype.getChildren=function(t){var e=this,o=t.modules.dataTree,i=[];return!1!==o.children&&o.open&&(Array.isArray(o.children)||(o.children=this.generateChildren(t)),o.children.forEach(function(t){i.push(t),e.getChildren(t).forEach(function(t){i.push(t)})})),i},v.prototype.generateChildren=function(t){var e=this,o=[];return t.getData()[this.field].forEach(function(i){var n=new r(i||{},e.table.rowManager);n.modules.dataTree.index=t.modules.dataTree.index+1,n.modules.dataTree.parent=t,n.modules.dataTree.open=e.startOpen(t,n.modules.dataTree.index),o.push(n)}),o},v.prototype.expandRow=function(t,e){var o=t.modules.dataTree;!1!==o.children&&(o.open=!0,t.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowExpanded(t.getComponent(),t.modules.dataTree.index))},v.prototype.collapseRow=function(t){var e=t.modules.dataTree;!1!==e.children&&(e.open=!1,t.reinitialize(),this.table.rowManager.refreshActiveData("tree",!1,!0),this.table.options.dataTreeRowCollapsed(t.getComponent(),t.modules.dataTree.index))},v.prototype.toggleRow=function(t){var e=t.modules.dataTree;!1!==e.children&&(e.open?this.collapseRow(t):this.expandRow(t))},v.prototype.getTreeParent=function(t){return!!t.modules.dataTree.parent&&t.modules.dataTree.parent.getComponent()},v.prototype.getTreeChildren=function(t){var e=t.modules.dataTree,o=[];return e.children&&(Array.isArray(e.children)||(e.children=this.generateChildren(t)),e.children.forEach(function(t){t instanceof r&&o.push(t.getComponent())})),o},v.prototype.checkForRestyle=function(t){t.row.cells.indexOf(t)||!1!==t.row.modules.dataTree.children&&t.row.reinitialize()},c.prototype.registerModule("dataTree",v);var y=function(t){this.table=t,this.fields={},this.columnsByIndex=[],this.columnsByField={},this.config={}};y.prototype.download=function(t,e,o,i){function n(o,n){i?i(o):s.triggerDownload(o,n,t,e)}var s=this,r=!1;this.processConfig(),"function"==typeof t?r=t:s.downloaders[t]?r=s.downloaders[t]:console.warn("Download Error - No such download type found: ",t),this.processColumns(),r&&r.call(this,s.processDefinitions(),s.processData(),o||{},n,this.config)},y.prototype.processConfig=function(){var t={columnGroups:!0,rowGroups:!0};if(this.table.options.downloadConfig)for(var e in this.table.options.downloadConfig)t[e]=this.table.options.downloadConfig[e];t.rowGroups&&this.table.options.groupBy&&this.table.modExists("groupRows")&&(this.config.rowGroups=!0),t.columnGroups&&this.table.columnManager.columns.length!=this.table.columnManager.columnsByIndex.length&&(this.config.columnGroups=!0)},y.prototype.processColumns=function(){var t=this;t.columnsByIndex=[],t.columnsByField={},t.table.columnManager.columnsByIndex.forEach(function(e){e.field&&e.visible&&!1!==e.definition.download&&(t.columnsByIndex.push(e),t.columnsByField[e.field]=e)})},y.prototype.processDefinitions=function(){var t=this,e=[];return this.config.columnGroups?t.table.columnManager.columns.forEach(function(o){var i=t.processColumnGroup(o);i&&e.push(i)}):t.columnsByIndex.forEach(function(o){!1!==o.download&&e.push(t.processDefinition(o))}),e},y.prototype.processColumnGroup=function(t){var e=this,o=t.columns,i={type:"group",title:t.definition.title};if(o.length){if(i.subGroups=[],i.width=0,o.forEach(function(t){var o=e.processColumnGroup(t);o&&(i.width+=o.width,i.subGroups.push(o))}),!i.width)return!1}else{if(!t.field||!t.visible||!1===t.definition.download)return!1;i.width=1,i.definition=this.processDefinition(t)}return i},y.prototype.processDefinition=function(t){var e={};for(var o in t.definition)e[o]=t.definition[o];return void 0!==t.definition.downloadTitle&&(e.title=t.definition.downloadTitle),e},y.prototype.processData=function(){var t=this,e=this,o=[],i=[];return this.config.rowGroups?(i=this.table.modules.groupRows.getGroups(),i.forEach(function(e){o.push(t.processGroupData(e))})):o=e.table.rowManager.getData(!0,"download"),"function"==typeof e.table.options.downloadDataFormatter&&(o=e.table.options.downloadDataFormatter(o)),o},y.prototype.processGroupData=function(t){var e=this,o=t.getSubGroups(),i={type:"group",key:t.key};return o.length?(i.subGroups=[],o.forEach(function(t){i.subGroups.push(e.processGroupData(t))})):i.rows=t.getData(!0,"download"),i},y.prototype.triggerDownload=function(t,e,o,i){var n=document.createElement("a"),s=new Blob([t],{type:e}),i=i||"Tabulator."+("function"==typeof o?"txt":o);(s=this.table.options.downloadReady.call(this.table,t,s))&&(navigator.msSaveOrOpenBlob?navigator.msSaveOrOpenBlob(s,i):(n.setAttribute("href",window.URL.createObjectURL(s)),n.setAttribute("download",i),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)),this.table.options.downloadComplete&&this.table.options.downloadComplete())},y.prototype.getFieldValue=function(t,e){var o=this.columnsByField[t];return!!o&&o.getFieldValue(e)},y.prototype.commsReceived=function(t,e,o){switch(e){case"intercept":this.download(o.type,"",o.options,o.intercept)}},y.prototype.downloaders={csv:function(t,e,o,i,n){function s(t,e){t.subGroups?t.subGroups.forEach(function(t){s(t,e+1)}):(c.push('"'+String(t.title).split('"').join('""')+'"'),d.push(t.definition.field))}function r(t){t.forEach(function(t){var e=[];d.forEach(function(o){var i=u.getFieldValue(o,t);switch(void 0===i?"undefined":_typeof(i)){case"object":i=JSON.stringify(i);break;case"undefined":case"null":i="";break;default:i=i}e.push('"'+String(i).split('"').join('""')+'"')}),l.push(e.join(h))})}function a(t){t.subGroups?t.subGroups.forEach(function(t){a(t)}):r(t.rows)}var l,u=this,c=[],d=[],h=o&&o.delimiter?o.delimiter:",";n.columnGroups?(console.warn("Download Warning - CSV downloader cannot process column groups"),t.forEach(function(t){s(t,0)})):function(){t.forEach(function(t){c.push('"'+String(t.title).split('"').join('""')+'"'),d.push(t.field)})}(),l=[c.join(h)],n.rowGroups?(console.warn("Download Warning - CSV downloader cannot process row groups"),e.forEach(function(t){a(t)})):r(e),i(l.join("\n"),"text/csv")},json:function(t,e,o,i,n){i(JSON.stringify(e,null,"\t"),"application/json")},pdf:function(t,e,o,i,n){function s(t,e){t.subGroups?t.subGroups.forEach(function(t){s(t,e+1)}):(d.push(t.title||""),c.push(t.definition.field))}function r(t){switch(void 0===t?"undefined":_typeof(t)){case"object":t=JSON.stringify(t);break;case"undefined":case"null":t="";break;default:t=t}return t}function a(t){t.forEach(function(t){var e=[];c.forEach(function(o){var i=u.getFieldValue(o,t);e.push(r(i))}),h.push(e)})}function l(t){var e=[];e.push(r(t.key)),p.push(h.length),h.push(e),t.subGroups?t.subGroups.forEach(function(t){l(t)}):a(t.rows)}var u=this,c=[],d=[],h=[],p=[],m={},f={},g=o.jsPDF||{},b=o&&o.title?o.title:"";g.orientation||(g.orientation=o.orientation||"landscape"),g.unit||(g.unit="pt"),n.columnGroups?(console.warn("Download Warning - PDF downloader cannot process column groups"),t.forEach(function(t){s(t,0)})):function(){t.forEach(function(t){t.field&&(d.push(t.title||""),c.push(t.field))})}(),n.rowGroups?e.forEach(function(t){l(t)}):a(e);var v=new jsPDF(g);if(o&&o.autoTable&&(m="function"==typeof o.autoTable?o.autoTable(v)||{}:o.autoTable),n.rowGroups){var y=function(t,e){if(p.indexOf(e.row.index)>-1)for(var o in f)t.styles[o]=f[o]};if(f=o.rowGroupStyles||{fontStyle:"bold",fontSize:12,cellPadding:6,fillColor:220},m.createdCell){var w=m.createdCell;m.createdCell=function(t,e){y(t,e),w(t,e)}}else m.createdCell=y}b&&(m.addPageContent=function(t){v.text(b,40,30)}),v.autoTable(d,h,m),i(v.output("arraybuffer"),"application/pdf")},xlsx:function(t,e,o,i,n){function s(){function o(t,e){void 0===u[e]&&(u[e]=[]),void 0===d[e]&&(d[e]=[]),t.width>1&&d[e].push({type:"hoz",start:u[e].length,end:u[e].length+t.width-1}),u[e].push(t.title),t.subGroups?t.subGroups.forEach(function(t){o(t,e+1)}):(h.push(t.definition.field),i(h.length),d[e].push({type:"vert",start:h.length-1}))}function i(){var t=0;u.forEach(function(e){var o=e.length;o>t&&(t=o)}),u.forEach(function(e){var o=e.length;if(o0&&l(y[e-1]);break;case 40:t.stopImmediatePropagation(),t.stopPropagation(),e=y.indexOf(E),e-1&&e.push(o)}),E=e,l()}function l(){for(var t=!1;y.firstChild;)y.removeChild(y.firstChild);E.forEach(function(e){var o=e.element;o||(o=document.createElement("div"),o.classList.add("tabulator-edit-select-list-item"),o.tabIndex=0,o.innerHTML=e.title,o.addEventListener("click",function(){u(e),d()}),o.addEventListener("mousedown",function(){x=!1,setTimeout(function(){x=!0},10)}),e.element=o,e===C&&(e.element.classList.add("active"),t=!0)),y.appendChild(o)}),t||u(!1)}function u(t,e){C&&C.element&&C.element.classList.remove("active"),C=t,t&&t.element&&t.element.classList.add("active")}function d(){m(),C?b!==C.value?(b=C.value,v.value=C.value,o(v.value)):i():n.freetext?(b=v.value,o(v.value)):n.allowEmpty&&""===v.value?(b=v.value,o(v.value)):i()}function h(){m(),i()}function p(){if(!y.parentNode){for(;y.firstChild;)y.removeChild(y.firstChild);!0===n.values?r(s(),b):r(n.values||[],b);var t=c.prototype.helpers.elOffset(g);y.style.minWidth=g.offsetWidth+"px",y.style.top=t.top+g.offsetHeight+"px",y.style.left=t.left+"px",document.body.appendChild(y)}}function m(){y.parentNode&&y.parentNode.removeChild(y)}var f=this,g=t.getElement(),b=t.getValue(),v=document.createElement("input"),y=document.createElement("div"),w=[],E=[],C={},x=!0;return v.setAttribute("type","text"),v.style.padding="4px",v.style.width="100%",v.style.boxSizing="border-box",v.addEventListener("keydown",function(t){var e;switch(t.keyCode){case 38:t.stopImmediatePropagation(),t.stopPropagation(),e=E.indexOf(C),u(e>0?E[e-1]:!1);break;case 40:t.stopImmediatePropagation(),t.stopPropagation(),e=E.indexOf(C),e'):("ie"==a.table.browser?e.setAttribute("class","tabulator-star-inactive"):e.classList.replace("tabulator-star-active","tabulator-star-inactive"),e.innerHTML='')})}function r(t){u=t,s(t)}var a=this,l=t.getElement(),u=t.getValue(),c=l.getElementsByTagName("svg").length||5,d=l.getElementsByTagName("svg")[0]?l.getElementsByTagName("svg")[0].getAttribute("width"):14,h=[],p=document.createElement("div"),m=document.createElementNS("http://www.w3.org/2000/svg","svg");l.style.whiteSpace="nowrap",l.style.overflow="hidden",l.style.textOverflow="ellipsis",p.style.verticalAlign="middle",p.style.display="inline-block",p.style.padding="4px",m.setAttribute("width",d),m.setAttribute("height",d),m.setAttribute("viewBox","0 0 512 512"),m.setAttribute("xml:space","preserve"),m.style.padding="0 1px";for(var f=1;f<=c;f++)!function(t){var e=m.cloneNode(!0);h.push(e),e.addEventListener("mouseover",function(e){e.stopPropagation(),s(t)}),e.addEventListener("click",function(e){e.stopPropagation(),o(t)}),p.appendChild(e)}(f);return u=Math.min(parseInt(u),c),s(u),p.addEventListener("mouseover",function(t){s(0)}),p.addEventListener("click",function(t){o(0)}),l.addEventListener("blur",function(t){i()}),l.addEventListener("keydown",function(t){switch(t.keyCode){case 39:r(u+1);break;case 37:r(u-1);break;case 13:o(u);break;case 27:i()}}),p},progress:function(t,e,o,i,n){function s(){var t=d*Math.round(m.offsetWidth/(l.clientWidth/100))+c;o(t),l.setAttribute("aria-valuenow",t),l.setAttribute("aria-label",h)}var r,a,l=t.getElement(),u=void 0===n.max?l.getElementsByTagName("div")[0].getAttribute("max")||100:n.max,c=void 0===n.min?l.getElementsByTagName("div")[0].getAttribute("min")||0:n.min,d=(u-c)/100,h=t.getValue()||0,p=document.createElement("div"),m=document.createElement("div");return p.style.position="absolute",p.style.right="0",p.style.top="0",p.style.bottom="0",p.style.width="5px",p.classList.add("tabulator-progress-handle"),m.style.display="inline-block",m.style.position="absolute",m.style.top="8px",m.style.bottom="8px",m.style.left="4px",m.style.marginRight="4px",m.style.backgroundColor="#488CE9",m.style.maxWidth="100%",m.style.minWidth="0%",l.style.padding="0 4px",h=Math.min(parseFloat(h),u),h=Math.max(parseFloat(h),c),h=100-Math.round((h-c)/d),m.style.right=h+"%",l.setAttribute("aria-valuemin",c),l.setAttribute("aria-valuemax",u),m.appendChild(p),p.addEventListener("mousedown",function(t){r=t.screenX,a=m.offsetWidth}),p.addEventListener("mouseover",function(){p.style.cursor="ew-resize"}),l.addEventListener("mousemove",function(t){r&&(m.style.width=a+t.screenX-r+"px")}),l.addEventListener("mouseup",function(t){r&&(t.stopPropagation(),t.stopImmediatePropagation(),r=!1,a=!1,s())}),l.addEventListener("keydown",function(t){switch(t.keyCode){case 39:m.style.width=m.clientWidth+l.clientWidth/100+"px";break;case 37:m.style.width=m.clientWidth-l.clientWidth/100+"px";break;case 13:s();break;case 27:i()}}),l.addEventListener("blur",function(){i()}),m},tickCross:function(t,e,o,i,n){function s(t){return l?t?c?u:a.checked:a.checked&&!c?(a.checked=!1,a.indeterminate=!0,c=!0,u):(c=!1,a.checked):a.checked}var r=t.getValue(),a=document.createElement("input"),l=n.tristate,u=void 0===n.indeterminateValue?null:n.indeterminateValue,c=!1;return a.setAttribute("type","checkbox"),a.style.marginTop="5px",a.style.boxSizing="border-box",a.value=r,!l||void 0!==r&&r!==u&&""!==r||(c=!0,a.indeterminate=!0),"firefox"!=this.table.browser&&e(function(){a.focus()}),a.checked=!0===r||"true"===r||"True"===r||1===r,a.addEventListener("change",function(t){o(s())}),a.addEventListener("blur",function(t){o(s(!0))}),a.addEventListener("keydown",function(t){13==t.keyCode&&o(s()),27==t.keyCode&&i()}),a}},c.prototype.registerModule("edit",w);var E=function(t){this.table=t,this.filterList=[],this.headerFilters={},this.headerFilterElements=[],this.headerFilterColumns=[],this.changed=!1};E.prototype.initializeColumn=function(t,e){function o(e){var o,r="input"==t.modules.filter.tagType&&"text"==t.modules.filter.attrType||"textarea"==t.modules.filter.tagType?"partial":"match",a="";if(void 0===i||i!==e){if(i=e,t.modules.filter.emptyFunc(e))delete n.headerFilters[s];else{switch(t.modules.filter.value=e,_typeof(t.definition.headerFilterFunc)){case"string":n.filters[t.definition.headerFilterFunc]?(a=t.definition.headerFilterFunc,o=function(o){return n.filters[t.definition.headerFilterFunc](e,t.getFieldValue(o))}):console.warn("Header Filter Error - Matching filter function not found: ",t.definition.headerFilterFunc);break;case"function":o=function(o){var i=t.definition.headerFilterFuncParams||{},n=t.getFieldValue(o);return i="function"==typeof i?i(e,n,o):i,t.definition.headerFilterFunc(e,n,o,i)},a=o}if(!o)switch(r){case"partial":o=function(o){return String(t.getFieldValue(o)).toLowerCase().indexOf(String(e).toLowerCase())>-1},a="like";break;default:o=function(o){return t.getFieldValue(o)==e},a="="}n.headerFilters[s]={value:e,func:o,type:a}}n.changed=!0,n.table.rowManager.filterRefresh()}}var i,n=this,s=t.getField();t.modules.filter={success:o,attrType:!1,tagType:!1,emptyFunc:!1},this.generateHeaderFilterElement(t)},E.prototype.generateHeaderFilterElement=function(t,e){function o(){}var i,n,s,r,a,l,u,c=this,d=t.modules.filter.success,h=t.getField() -;if(t.modules.filter.headerElement&&t.modules.filter.headerElement.parentNode&&t.modules.filter.headerElement.parentNode.removeChild(t.modules.filter.headerElement),h){switch(t.modules.filter.emptyFunc=t.definition.headerFilterEmptyCheck||function(t){return!t&&"0"!==t},i=document.createElement("div"),i.classList.add("tabulator-header-filter"),_typeof(t.definition.headerFilter)){case"string":c.table.modules.edit.editors[t.definition.headerFilter]?(n=c.table.modules.edit.editors[t.definition.headerFilter],"tick"!==t.definition.headerFilter&&"tickCross"!==t.definition.headerFilter||t.definition.headerFilterEmptyCheck||(t.modules.filter.emptyFunc=function(t){return!0!==t&&!1!==t})):console.warn("Filter Error - Cannot build header filter, No such editor found: ",t.definition.editor);break;case"function":n=t.definition.headerFilter;break;case"boolean":t.modules.edit&&t.modules.edit.editor?n=t.modules.edit.editor:t.definition.formatter&&c.table.modules.edit.editors[t.definition.formatter]?(n=c.table.modules.edit.editors[t.definition.formatter],"tick"!==t.definition.formatter&&"tickCross"!==t.definition.formatter||t.definition.headerFilterEmptyCheck||(t.modules.filter.emptyFunc=function(t){return!0!==t&&!1!==t})):n=c.table.modules.edit.editors.input}if(n){if(r={getValue:function(){return void 0!==e?e:""},getField:function(){return t.definition.field},getElement:function(){return i},getColumn:function(){return t.getComponent()},getRow:function(){return{normalizeHeight:function(){}}}},u=t.definition.headerFilterParams||{},u="function"==typeof u?u.call(c.table):u,!(s=n.call(this.table.modules.edit,r,function(){},d,o,u)))return void console.warn("Filter Error - Cannot add filter to "+h+" column, editor returned a value of false");if(!(s instanceof Node))return void console.warn("Filter Error - Cannot add filter to "+h+" column, editor should return an instance of Node, the editor returned:",s);h?c.table.modules.localize.bind("headerFilters|columns|"+t.definition.field,function(t){s.setAttribute("placeholder",void 0!==t&&t?t:c.table.modules.localize.getText("headerFilters|default"))}):c.table.modules.localize.bind("headerFilters|default",function(t){s.setAttribute("placeholder",void 0!==c.column.definition.headerFilterPlaceholder&&c.column.definition.headerFilterPlaceholder?c.column.definition.headerFilterPlaceholder:t)}),s.addEventListener("click",function(t){t.stopPropagation(),s.focus()}),a=!1,l=function(t){a&&clearTimeout(a),a=setTimeout(function(){d(s.value)},300)},t.modules.filter.headerElement=s,t.modules.filter.attrType=s.hasAttribute("type")?s.getAttribute("type").toLowerCase():"",t.modules.filter.tagType=s.tagName.toLowerCase(),!1!==t.definition.headerFilterLiveFilter&&("autocomplete"===t.definition.headerFilter||"autocomplete"===t.definition.editor&&!0===t.definition.headerFilter||(s.addEventListener("keyup",l),s.addEventListener("search",l),"number"==t.modules.filter.attrType&&s.addEventListener("change",function(t){d(s.value)}),"text"==t.modules.filter.attrType&&"ie"!==this.table.browser&&s.setAttribute("type","search")),"input"!=t.modules.filter.tagType&&"select"!=t.modules.filter.tagType&&"textarea"!=t.modules.filter.tagType||s.addEventListener("mousedown",function(t){t.stopPropagation()})),i.appendChild(s),t.contentElement.appendChild(i),c.headerFilterElements.push(s),c.headerFilterColumns.push(t)}}else console.warn("Filter Error - Cannot add header filter, column has no field set:",t.definition.title)},E.prototype.hideHeaderFilterElements=function(){this.headerFilterElements.forEach(function(t){t.style.display="none"})},E.prototype.showHeaderFilterElements=function(){this.headerFilterElements.forEach(function(t){t.style.display=""})},E.prototype.setHeaderFilterFocus=function(t){t.modules.filter&&t.modules.filter.headerElement?t.modules.filter.headerElement.focus():console.warn("Column Filter Focus Error - No header filter set on column:",t.getField())},E.prototype.setHeaderFilterValue=function(t,e){t&&(t.modules.filter&&t.modules.filter.headerElement?(this.generateHeaderFilterElement(t,e),t.modules.filter.success(e)):console.warn("Column Filter Error - No header filter set on column:",t.getField()))},E.prototype.reloadHeaderFilter=function(t){t&&(t.modules.filter&&t.modules.filter.headerElement?this.generateHeaderFilterElement(t,t.modules.filter.value):console.warn("Column Filter Error - No header filter set on column:",t.getField()))},E.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},E.prototype.setFilter=function(t,e,o){var i=this;i.filterList=[],Array.isArray(t)||(t=[{field:t,type:e,value:o}]),i.addFilter(t)},E.prototype.addFilter=function(t,e,o){var i=this;Array.isArray(t)||(t=[{field:t,type:e,value:o}]),t.forEach(function(t){(t=i.findFilter(t))&&(i.filterList.push(t),i.changed=!0)}),this.table.options.persistentFilter&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.save("filter")},E.prototype.findFilter=function(t){var e,o=this;if(Array.isArray(t))return this.findSubFilters(t);var i=!1;return"function"==typeof t.field?i=function(e){return t.field(e,t.type||{})}:o.filters[t.type]?(e=o.table.columnManager.getColumnByField(t.field),i=e?function(i){return o.filters[t.type](t.value,e.getFieldValue(i))}:function(e){return o.filters[t.type](t.value,e[t.field])}):console.warn("Filter Error - No such filter type found, ignoring: ",t.type),t.func=i,!!t.func&&t},E.prototype.findSubFilters=function(t){var e=this,o=[];return t.forEach(function(t){(t=e.findFilter(t))&&o.push(t)}),!!o.length&&o},E.prototype.getFilters=function(t,e){var o=this,i=[];return t&&(i=o.getHeaderFilters()),o.filterList.forEach(function(t){i.push({field:t.field,type:t.type,value:t.value})}),e&&i.forEach(function(t){"function"==typeof t.type&&(t.type="function")}),i},E.prototype.getHeaderFilters=function(){var t=[];for(var e in this.headerFilters)t.push({field:e,type:this.headerFilters[e].type,value:this.headerFilters[e].value});return t},E.prototype.removeFilter=function(t,e,o){var i=this;Array.isArray(t)||(t=[{field:t,type:e,value:o}]),t.forEach(function(t){var e=-1;e="object"==_typeof(t.field)?i.filterList.findIndex(function(e){return t===e}):i.filterList.findIndex(function(e){return t.field===e.field&&t.type===e.type&&t.value===e.value}),e>-1?(i.filterList.splice(e,1),i.changed=!0):console.warn("Filter Error - No matching filter type found, ignoring: ",t.type)}),this.table.options.persistentFilter&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.save("filter")},E.prototype.clearFilter=function(t){this.filterList=[],t&&this.clearHeaderFilter(),this.changed=!0,this.table.options.persistentFilter&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.save("filter")},E.prototype.clearHeaderFilter=function(){var t=this;this.headerFilters={},this.headerFilterColumns.forEach(function(e){e.modules.filter.value=null,t.reloadHeaderFilter(e)}),this.changed=!0},E.prototype.search=function(t,e,o,i){var n=this,s=[],r=[];return Array.isArray(e)||(e=[{field:e,type:o,value:i}]),e.forEach(function(t){(t=n.findFilter(t))&&r.push(t)}),this.table.rowManager.rows.forEach(function(e){var o=!0;r.forEach(function(t){n.filterRecurse(t,e.getData())||(o=!1)}),o&&s.push("data"===t?e.getData("data"):e.getComponent())}),s},E.prototype.filter=function(t,e){var o=this,i=[],n=[];return o.table.options.dataFiltering&&o.table.options.dataFiltering.call(o.table,o.getFilters()),o.table.options.ajaxFiltering||!o.filterList.length&&!Object.keys(o.headerFilters).length?i=t.slice(0):t.forEach(function(t){o.filterRow(t)&&i.push(t)}),o.table.options.dataFiltered&&(i.forEach(function(t){n.push(t.getComponent())}),o.table.options.dataFiltered.call(o.table,o.getFilters(),n)),i},E.prototype.filterRow=function(t,e){var o=this,i=!0,n=t.getData();o.filterList.forEach(function(t){o.filterRecurse(t,n)||(i=!1)});for(var s in o.headerFilters)o.headerFilters[s].func(n)||(i=!1);return i},E.prototype.filterRecurse=function(t,e){var o=this,i=!1;return Array.isArray(t)?t.forEach(function(t){o.filterRecurse(t,e)&&(i=!0)}):i=t.func(e),i},E.prototype.filters={"=":function(t,e){return e==t},"<":function(t,e){return e":function(t,e){return e>t},">=":function(t,e){return e>=t},"!=":function(t,e){return e!=t},regex:function(t,e){return"string"==typeof t&&(t=new RegExp(t)),t.test(e)},like:function(t,e){return null===t||void 0===t?e===t:void 0!==e&&null!==e&&String(e).toLowerCase().indexOf(t.toLowerCase())>-1},in:function(t,e){return Array.isArray(t)?t.indexOf(e)>-1:(console.warn("Filter Error - filter value is not an array:",t),!1)}},c.prototype.registerModule("filter",E);var C=function(t){this.table=t};C.prototype.initializeColumn=function(t){var e=this,o={params:t.definition.formatterParams||{}};switch(_typeof(t.definition.formatter)){case"string":"tick"===t.definition.formatter&&(t.definition.formatter="tickCross",void 0===o.params.crossElement&&(o.params.crossElement=!1),console.warn("DEPRECATION WANRING - the tick formatter has been depricated, please use the tickCross formatter with the crossElement param set to false")),e.formatters[t.definition.formatter]?o.formatter=e.formatters[t.definition.formatter]:(console.warn("Formatter Error - No such formatter found: ",t.definition.formatter),o.formatter=e.formatters.plaintext);break;case"function":o.formatter=t.definition.formatter;break;default:o.formatter=e.formatters.plaintext}t.modules.format=o},C.prototype.cellRendered=function(t){t.column.modules.format.renderedCallback&&t.column.modules.format.renderedCallback()},C.prototype.formatValue=function(t){function e(e){t.column.modules.format.renderedCallback=e}var o=t.getComponent(),i="function"==typeof t.column.modules.format.params?t.column.modules.format.params(o):t.column.modules.format.params;return t.column.modules.format.formatter.call(this,o,i,e)},C.prototype.sanitizeHTML=function(t){if(t){var e={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(t).replace(/[&<>"'`=\/]/g,function(t){return e[t]})}return t},C.prototype.emptyToSpace=function(t){return null===t||void 0===t?" ":t},C.prototype.getFormatter=function(t){var t;switch(void 0===t?"undefined":_typeof(t)){case"string":this.formatters[t]?t=this.formatters[t]:(console.warn("Formatter Error - No such formatter found: ",t),t=this.formatters.plaintext);break;case"function":t=t;break;default:t=this.formatters.plaintext}return t},C.prototype.formatters={plaintext:function(t,e,o){return this.emptyToSpace(this.sanitizeHTML(t.getValue()))},html:function(t,e,o){return t.getValue()},textarea:function(t,e,o){return t.getElement().style.whiteSpace="pre-wrap",this.emptyToSpace(this.sanitizeHTML(t.getValue()))},money:function(t,e,o){var i,n,s,r,a=parseFloat(t.getValue()),l=e.decimal||".",u=e.thousand||",",c=e.symbol||"",d=!!e.symbolAfter,h=void 0!==e.precision?e.precision:2;if(isNaN(a))return this.emptyToSpace(this.sanitizeHTML(t.getValue()));for(i=!1!==h?a.toFixed(h):a,i=String(i).split("."),n=i[0],s=i.length>1?l+i[1]:"",r=/(\d+)(\d{3})/;r.test(n);)n=n.replace(r,"$1"+u+"$2");return d?n+s+c:c+n+s},link:function(t,e,o){var i,n=this.sanitizeHTML(t.getValue()),s=e.urlPrefix||"",r=this.emptyToSpace(n),a=document.createElement("a");if(e.labelField&&(i=t.getData(),r=i[e.labelField]),e.label)switch(_typeof(e.label)){case"string":r=e.label;break;case"function":r=e.label(t)}if(e.urlField&&(i=t.getData(),n=i[e.urlField]),e.url)switch(_typeof(e.url)){case"string":n=e.url;break;case"function":n=e.url(t)}return a.setAttribute("href",s+n),e.target&&a.setAttribute("target",e.target),a.innerHTML=this.emptyToSpace(r),a},image:function(t,e,o){var i=document.createElement("img");switch(i.setAttribute("src",t.getValue()),_typeof(e.height)){case"number":element.style.height=e.height+"px";break;case"string":element.style.height=e.height}switch(_typeof(e.width)){case"number":element.style.width=e.width+"px";break;case"string":element.style.width=e.width}return i.addEventListener("load",function(){t.getRow().normalizeHeight()}),i},tickCross:function(t,e,o){var i=t.getValue(),n=t.getElement(),s=e.allowEmpty,r=e.allowTruthy,a=void 0!==e.tickElement?e.tickElement:'',l=void 0!==e.crossElement?e.crossElement:'';return r&&i||!0===i||"true"===i||"True"===i||1===i||"1"===i?(n.setAttribute("aria-checked",!0),a||""):!s||"null"!==i&&""!==i&&null!==i&&void 0!==i?(n.setAttribute("aria-checked",!1),l||""):(n.setAttribute("aria-checked","mixed"),"")},datetime:function(t,e,o){var i=e.inputFormat||"YYYY-MM-DD hh:mm:ss",n=e.outputFormat||"DD/MM/YYYY hh:mm:ss",s=void 0!==e.invalidPlaceholder?e.invalidPlaceholder:"",r=t.getValue(),a=moment(r,i);return a.isValid()?a.format(n):!0===s?r:"function"==typeof s?s(r):s},datetimediff:function(t,e,o){var i=e.inputFormat||"YYYY-MM-DD hh:mm:ss",n=void 0!==e.invalidPlaceholder?e.invalidPlaceholder:"",s=void 0!==e.suffix&&e.suffix,r=void 0!==e.unit?e.unit:void 0,a=void 0!==e.humanize&&e.humanize,l=void 0!==e.date?e.date:moment(),u=t.getValue(),c=moment(u,i);return c.isValid()?a?moment.duration(c.diff(l)).humanize(s):c.diff(l,r)+(s?" "+s:""):!0===n?u:"function"==typeof n?n(u):n},lookup:function(t,e,o){var i=t.getValue();return void 0===e[i]?(console.warn("Missing display value for "+i),i):e[i]},star:function(t,e,o){var i=t.getValue(),n=t.getElement(),s=e&&e.stars?e.stars:5,r=document.createElement("span"),a=document.createElementNS("http://www.w3.org/2000/svg","svg");r.style.verticalAlign="middle",a.setAttribute("width","14"),a.setAttribute("height","14"),a.setAttribute("viewBox","0 0 512 512"),a.setAttribute("xml:space","preserve"),a.style.padding="0 1px",i=parseInt(i)':'',r.appendChild(u)}return n.style.whiteSpace="nowrap",n.style.overflow="hidden",n.style.textOverflow="ellipsis",n.setAttribute("aria-label",i),r},progress:function(t,e,o){var i,n,s,r,a,l=this.sanitizeHTML(t.getValue())||0,u=t.getElement(),c=e&&e.max?e.max:100,d=e&&e.min?e.min:0,h=e&&e.legendAlign?e.legendAlign:"center";switch(n=parseFloat(l)<=c?parseFloat(l):c,n=parseFloat(n)>=d?parseFloat(n):d,i=(c-d)/100,n=Math.round((n-d)/i),_typeof(e.color)){case"string":s=e.color;break;case"function":s=e.color(l);break;case"object":if(Array.isArray(e.color)){var p=100/e.color.length,m=Math.floor(n/p);m=Math.min(m,e.color.length-1),m=Math.max(m,0),s=e.color[m];break}default:s="#2DC214"}switch(_typeof(e.legend)){case"string":r=e.legend;break;case"function":r=e.legend(l);break;case"boolean":r=l;break;default:r=!1}switch(_typeof(e.legendColor)){case"string":a=e.legendColor;break;case"function":a=e.legendColor(l);break;case"object":if(Array.isArray(e.legendColor)){var p=100/e.legendColor.length,m=Math.floor(n/p);m=Math.min(m,e.legendColor.length-1),m=Math.max(m,0),a=e.legendColor[m]}break;default:a="#000"}return u.style.minWidth="30px",u.style.position="relative",u.setAttribute("aria-label",n),"
"+(r?"
"+r+"
":"")},color:function(t,e,o){return t.getElement().style.backgroundColor=this.sanitizeHTML(t.getValue()),""},buttonTick:function(t,e,o){return''},buttonCross:function(t,e,o){return''},rownum:function(t,e,o){return this.table.rowManager.activeRows.indexOf(t.getRow()._getSelf())+1},handle:function(t,e,o){return t.getElement().classList.add("tabulator-row-handle"),"
"},responsiveCollapse:function(t,e,o){function i(e){var o=t.getRow().getElement().getElementsByClassName("tabulator-responsive-collapse")[0];s=e,s?(r.classList.add("open"),o&&(o.style.display="")):(r.classList.remove("open"),o&&(o.style.display="none"))}var n=this,s=!1,r=document.createElement("div");return r.classList.add("tabulator-responsive-collapse-toggle"),r.innerHTML="+-",t.getElement().classList.add("tabulator-row-handle"),n.table.options.responsiveLayoutCollapseStartOpen&&(s=!0),r.addEventListener("click",function(){i(!s)}),i(s),r}},c.prototype.registerModule("format",C);var x=function(t){this.table=t,this.leftColumns=[],this.rightColumns=[],this.leftMargin=0,this.rightMargin=0,this.initializationMode="left",this.active=!1};x.prototype.reset=function(){this.initializationMode="left",this.leftColumns=[],this.rightColumns=[],this.active=!1},x.prototype.initializeColumn=function(t){var e={margin:0,edge:!1};t.definition.frozen?t.parent.isGroup?console.warn("Frozen Column Error - Grouped columns cannot be frozen"):t.isGroup?console.warn("Frozen Column Error - Column Groups cannot be frozen"):(e.position=this.initializationMode,"left"==this.initializationMode?this.leftColumns.push(t):this.rightColumns.unshift(t),this.active=!0,t.modules.frozen=e):this.initializationMode="right"},x.prototype.layout=function(){var t=this,e=(this.table.rowManager.element,0);t.active&&(t.leftMargin=t._calcSpace(t.leftColumns,t.leftColumns.length),t.table.columnManager.headersElement.style.marginLeft=t.leftMargin+"px",t.rightMargin=t._calcSpace(t.rightColumns,t.rightColumns.length),t.table.columnManager.element.style.paddingRight=t.rightMargin+"px",t.table.rowManager.activeRows.forEach(function(e){t.layoutRow(e)}),t.table.modExists("columnCalcs")&&(t.table.modules.columnCalcs.topInitialized&&t.table.modules.columnCalcs.topRow&&t.layoutRow(t.table.modules.columnCalcs.topRow),t.table.modules.columnCalcs.botInitialized&&t.table.modules.columnCalcs.botRow&&t.layoutRow(t.table.modules.columnCalcs.botRow)),t.leftColumns.forEach(function(e,o){e.modules.frozen.margin=t._calcSpace(t.leftColumns,o)+t.table.columnManager.scrollLeft,o==t.leftColumns.length-1?e.modules.frozen.edge=!0:e.modules.frozen.edge=!1,t.layoutColumn(e)}),e=t.table.rowManager.element.clientWidth+t.table.columnManager.scrollLeft,t.rightColumns.forEach(function(o,i){o.modules.frozen.margin=e-t._calcSpace(t.rightColumns,i+1),i==t.rightColumns.length-1?o.modules.frozen.edge=!0:o.modules.frozen.edge=!1,t.layoutColumn(o)}),this.table.rowManager.tableElement.style.marginRight=this.rightMargin+"px")},x.prototype.layoutColumn=function(t){var e=this;e.layoutElement(t.getElement(),t),t.cells.forEach(function(o){e.layoutElement(o.getElement(),t)})},x.prototype.layoutRow=function(t){t.getElement().style.paddingLeft=this.leftMargin+"px"},x.prototype.layoutElement=function(t,e){e.modules.frozen&&(t.style.position="absolute",t.style.left=e.modules.frozen.margin+"px",t.classList.add("tabulator-frozen"),e.modules.frozen.edge&&t.classList.add("tabulator-frozen-"+e.modules.frozen.position))},x.prototype._calcSpace=function(t,e){for(var o=0,i=0;i-1&&e.splice(o,1)}),e},R.prototype.freezeRow=function(t){t.modules.frozen?console.warn("Freeze Error - Row is already frozen"):(t.modules.frozen=!0,this.topElement.appendChild(t.getElement()),t.initialize(),t.normalizeHeight(),this.table.rowManager.adjustTableSize(),this.rows.push(t),this.table.rowManager.refreshActiveData("display"),this.styleRows())},R.prototype.unfreezeRow=function(t){var e=this.rows.indexOf(t);if(t.modules.frozen){t.modules.frozen=!1;var o=t.getElement();o.parentNode.removeChild(o),this.table.rowManager.adjustTableSize(),this.rows.splice(e,1),this.table.rowManager.refreshActiveData("display"),this.rows.length&&this.styleRows()}else console.warn("Freeze Error - Row is already unfrozen")},R.prototype.styleRows=function(t){var e=this;this.rows.forEach(function(t,o){e.table.rowManager.styleRow(t,o)})},c.prototype.registerModule("frozenRows",R);var D=function(t){this._group=t,this.type="GroupComponent"};D.prototype.getKey=function(){return this._group.key},D.prototype.getElement=function(){return this._group.element},D.prototype.getRows=function(){return this._group.getRows(!0)},D.prototype.getSubGroups=function(){return this._group.getSubGroups(!0)},D.prototype.getParentGroup=function(){return!!this._group.parent&&this._group.parent.getComponent()},D.prototype.getVisibility=function(){return this._group.visible},D.prototype.show=function(){this._group.show()},D.prototype.hide=function(){this._group.hide()},D.prototype.toggle=function(){this._group.toggleVisibility()},D.prototype._getSelf=function(){return this._group},D.prototype.getTable=function(){return this._group.table};var M=function(t,e,o,i,n,s,r){this.groupManager=t,this.parent=e,this.key=i,this.level=o,this.field=n,this.hasSubGroups=o-1?o?this.rows.splice(n+1,0,t):this.rows.splice(n,0,t):o?this.rows.push(t):this.rows.unshift(t),t.modules.group=this,this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)},M.prototype.getRowIndex=function(t){},M.prototype.conformRowData=function(t){return this.field?t[this.field]=this.key:console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"),this.parent&&(t=this.parent.conformRowData(t)),t},M.prototype.removeRow=function(t){var e=this.rows.indexOf(t);e>-1&&this.rows.splice(e,1),this.rows.length?(this.generateGroupHeaderContents(),this.groupManager.table.modExists("columnCalcs")&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modules.columnCalcs.recalcGroup(this)):(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this),this.groupManager.updateGroupRows(!0))},M.prototype.removeGroup=function(t){var e,o=t.level+"_"+t.key;this.groups[o]&&(delete this.groups[o],e=this.groupList.indexOf(t),e>-1&&this.groupList.splice(e,1),this.groupList.length||(this.parent?this.parent.removeGroup(this):this.groupManager.removeGroup(this)))},M.prototype.getHeadersAndRows=function(){var t=[];return t.push(this),this._visSet(),this.visible?this.groupList.length?this.groupList.forEach(function(e){t=t.concat(e.getHeadersAndRows())}):("table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),t=t.concat(this.rows),"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.modExists("columnCalcs")&&this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))):!this.groupList.length&&"table"!=this.groupManager.table.options.columnCalcs&&this.groupManager.table.options.groupClosedShowCalcs&&this.groupManager.table.modExists("columnCalcs")&&(this.groupManager.table.modules.columnCalcs.hasTopCalcs()&&(this.calcs.top=this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows),t.push(this.calcs.top)),this.groupManager.table.modules.columnCalcs.hasBottomCalcs()&&(this.calcs.bottom=this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows),t.push(this.calcs.bottom))),t},M.prototype.getData=function(t,e){var o=[];return this._visSet(),(!t||t&&this.visible)&&this.rows.forEach(function(t){o.push(t.getData(e||"data"))}),o},M.prototype.getRowCount=function(){var t=0;return this.groupList.length?this.groupList.forEach(function(e){t+=e.getRowCount()}):t=this.rows.length,t},M.prototype.toggleVisibility=function(){this.visible?this.hide():this.show()},M.prototype.hide=function(){this.visible=!1,"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination?this.groupManager.updateGroupRows(!0):(this.element.classList.remove("tabulator-group-visible"),this.groupList.length?this.groupList.forEach(function(t){var e;t.calcs.top&&(e=t.calcs.top.getElement(),e.parentNode.removeChild(e)),t.calcs.bottom&&(e=t.calcs.bottom.getElement(),e.parentNode.removeChild(e)),t.getHeadersAndRows().forEach(function(t){var e=t.getElement();e.parentNode.removeChild(e)})}):this.rows.forEach(function(t){var e=t.getElement();e.parentNode.removeChild(e)}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex())),this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!1)},M.prototype.show=function(){var t=this;if(t.visible=!0, -"classic"!=this.groupManager.table.rowManager.getRenderMode()||this.groupManager.table.options.pagination)this.groupManager.updateGroupRows(!0);else{this.element.classList.add("tabulator-group-visible");var e=t.getElement();this.groupList.length?this.groupList.forEach(function(t){t.getHeadersAndRows().forEach(function(t){var o=t.getElement();e.parentNode.insertBefore(o,e.nextSibling),t.initialize(),e=o})}):t.rows.forEach(function(t){var o=t.getElement();e.parentNode.insertBefore(o,e.nextSibling),t.initialize(),e=o}),this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(),this.groupManager.getDisplayIndex())}this.groupManager.table.options.groupVisibilityChanged.call(this.table,this.getComponent(),!0)},M.prototype._visSet=function(){var t=[];"function"==typeof this.visible&&(this.rows.forEach(function(e){t.push(e.getData())}),this.visible=this.visible(this.key,this.getRowCount(),t,this.getComponent()))},M.prototype.getRowGroup=function(t){var e=!1;return this.groupList.length?this.groupList.forEach(function(o){var i=o.getRowGroup(t);i&&(e=i)}):this.rows.find(function(e){return e===t})&&(e=this),e},M.prototype.getSubGroups=function(t){var e=[];return this.groupList.forEach(function(o){e.push(t?o.getComponent():o)}),e},M.prototype.getRows=function(t){var e=[];return this.rows.forEach(function(o){e.push(t?o.getComponent():o)}),e},M.prototype.generateGroupHeaderContents=function(){var t=[];for(this.rows.forEach(function(e){t.push(e.getData())}),this.elementContents=this.generator(this.key,this.getRowCount(),t,this.getComponent());this.element.firstChild;)this.element.removeChild(this.element.firstChild);"string"==typeof this.elementContents?this.element.innerHTML=this.elementContents:this.element.appendChild(this.elementContents),this.element.insertBefore(this.arrowElement,this.element.firstChild)},M.prototype.getElement=function(){return this.addBindingsd=!1,this._visSet(),this.visible?this.element.classList.add("tabulator-group-visible"):this.element.classList.remove("tabulator-group-visible"),this.element.childNodes.forEach(function(t){t.parentNode.removeChild(t)}),this.generateGroupHeaderContents(),this.element},M.prototype.normalizeHeight=function(){this.setHeight(this.element.clientHeight)},M.prototype.initialize=function(t){this.initialized&&!t||(this.normalizeHeight(),this.initialized=!0)},M.prototype.reinitialize=function(){this.initialized=!1,this.height=0,c.prototype.helpers.elVisible(this.element)&&this.initialize(!0)},M.prototype.setHeight=function(t){this.height!=t&&(this.height=t,this.outerHeight=this.element.offsetHeight)},M.prototype.getHeight=function(){return this.outerHeight},M.prototype.getGroup=function(){return this},M.prototype.reinitializeHeight=function(){},M.prototype.calcHeight=function(){},M.prototype.setCellHeight=function(){},M.prototype.clearCellHeight=function(){},M.prototype.getComponent=function(){return new D(this)};var L=function(t){this.table=t,this.groupIDLookups=!1,this.startOpen=[function(){return!1}],this.headerGenerator=[function(){return""}],this.groupList=[],this.allowedValues=!1,this.groups={},this.displayIndex=0};L.prototype.initialize=function(){var t=this,e=t.table.options.groupBy,o=t.table.options.groupStartOpen,i=t.table.options.groupHeader;if(this.allowedValues=t.table.options.groupValues,t.headerGenerator=[function(){return""}],this.startOpen=[function(){return!1}],t.table.modules.localize.bind("groups|item",function(e,o){t.headerGenerator[0]=function(t,i,n){return(void 0===t?"":t)+"("+i+" "+(1===i?e:o.groups.items)+")"}}),this.groupIDLookups=[],Array.isArray(e)||e)this.table.modExists("columnCalcs")&&"table"!=this.table.options.columnCalcs&&"both"!=this.table.options.columnCalcs&&this.table.modules.columnCalcs.removeCalcs();else if(this.table.modExists("columnCalcs")&&"group"!=this.table.options.columnCalcs){var n=this.table.columnManager.getRealColumns();n.forEach(function(e){e.definition.topCalc&&t.table.modules.columnCalcs.initializeTopRow(),e.definition.bottomCalc&&t.table.modules.columnCalcs.initializeBottomRow()})}Array.isArray(e)||(e=[e]),e.forEach(function(e,o){var i,n;"function"==typeof e?i=e:(n=t.table.columnManager.getColumnByField(e),i=n?function(t){return n.getFieldValue(t)}:function(t){return t[e]}),t.groupIDLookups.push({field:"function"!=typeof e&&e,func:i,values:!!t.allowedValues&&t.allowedValues[o]})}),o&&(Array.isArray(o)||(o=[o]),o.forEach(function(t){t="function"==typeof t?t:function(){return!0}}),t.startOpen=o),i&&(t.headerGenerator=Array.isArray(i)?i:[i]),this.initialized=!0},L.prototype.setDisplayIndex=function(t){this.displayIndex=t},L.prototype.getDisplayIndex=function(){return this.displayIndex},L.prototype.getRows=function(t){return this.groupIDLookups.length?(this.table.options.dataGrouping.call(this.table),this.generateGroups(t),this.table.options.dataGrouped&&this.table.options.dataGrouped.call(this.table,this.getGroups(!0)),this.updateGroupRows()):t.slice(0)},L.prototype.getGroups=function(t){var e=[];return this.groupList.forEach(function(o){e.push(t?o.getComponent():o)}),e},L.prototype.pullGroupListData=function(t){var e=this,o=[];return t.forEach(function(t){var i={};i.level=0,i.rowCount=0,i.headerContent="";var n=[];t.hasSubGroups?(n=e.pullGroupListData(t.groupList),i.level=t.level,i.rowCount=n.length-t.groupList.length,i.headerContent=t.generator(t.key,i.rowCount,t.rows,t),o.push(i),o=o.concat(n)):(i.level=t.level,i.headerContent=t.generator(t.key,t.rows.length,t.rows,t),i.rowCount=t.getRows().length,o.push(i),t.getRows().forEach(function(t){o.push(t.getData("data"))}))}),o},L.prototype.getGroupedData=function(){return this.pullGroupListData(this.groupList)},L.prototype.getRowGroup=function(t){var e=!1;return this.groupList.forEach(function(o){var i=o.getRowGroup(t);i&&(e=i)}),e},L.prototype.countGroups=function(){return this.groupList.length},L.prototype.generateGroups=function(t){var e=this,o=e.groups;e.groups={},e.groupList=[],this.allowedValues&&this.allowedValues[0]?(this.allowedValues[0].forEach(function(t){e.createGroup(t,0,o)}),t.forEach(function(t){e.assignRowToExistingGroup(t,o)})):t.forEach(function(t){e.assignRowToGroup(t,o)})},L.prototype.createGroup=function(t,e,o){var i,n=e+"_"+t;o=o||[],i=new M(this,!1,e,t,this.groupIDLookups[0].field,this.headerGenerator[0],o[n]),this.groups[n]=i,this.groupList.push(i)},L.prototype.assignRowToGroup=function(t,e){var o=this.groupIDLookups[0].func(t.getData()),i="0_"+o;this.groups[i]||this.createGroup(o,0,e),this.groups[i].addRow(t)},L.prototype.assignRowToExistingGroup=function(t,e){var o=this.groupIDLookups[0].func(t.getData()),i="0_"+o;this.groups[i]&&this.groups[i].addRow(t)},L.prototype.assignRowToGroup=function(t,e){var o=this.groupIDLookups[0].func(t.getData()),i=!this.groups["0_"+o];return i&&this.createGroup(o,0,e),this.groups["0_"+o].addRow(t),!i},L.prototype.updateGroupRows=function(t){var e=this,o=[];if(e.groupList.forEach(function(t){o=o.concat(t.getHeadersAndRows())}),t){var i=e.table.rowManager.setDisplayRows(o,this.getDisplayIndex());!0!==i&&this.setDisplayIndex(i),e.table.rowManager.refreshActiveData("group",!0,!0)}return o},L.prototype.scrollHeaders=function(t){this.groupList.forEach(function(e){e.arrowElement.style.marginLeft=t+"px"})},L.prototype.removeGroup=function(t){var e,o=t.level+"_"+t.key;this.groups[o]&&(delete this.groups[o],(e=this.groupList.indexOf(t))>-1&&this.groupList.splice(e,1))},c.prototype.registerModule("groupRows",L);var T=function(t){this.table=t,this.history=[],this.index=-1};T.prototype.clear=function(){this.history=[],this.index=-1},T.prototype.action=function(t,e,o){this.history=this.history.slice(0,this.index+1),this.history.push({type:t,component:e,data:o}),this.index++},T.prototype.getHistoryUndoSize=function(){return this.index+1},T.prototype.getHistoryRedoSize=function(){return this.history.length-(this.index+1)},T.prototype.undo=function(){if(this.index>-1){var t=this.history[this.index];return this.undoers[t.type].call(this,t),this.index--,this.table.options.historyUndo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Undo Error - No more history to undo"),!1},T.prototype.redo=function(){if(this.history.length-1>this.index){this.index++;var t=this.history[this.index];return this.redoers[t.type].call(this,t),this.table.options.historyRedo.call(this.table,t.type,t.component.getComponent(),t.data),!0}return console.warn("History Redo Error - No more history to redo"),!1},T.prototype.undoers={cellEdit:function(t){t.component.setValueProcessData(t.data.oldValue)},rowAdd:function(t){t.component.deleteActual()},rowDelete:function(t){var e=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this._rebindRow(t.component,e)},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.pos],!1),this.table.rowManager.redraw()}},T.prototype.redoers={cellEdit:function(t){t.component.setValueProcessData(t.data.newValue)},rowAdd:function(t){var e=this.table.rowManager.addRowActual(t.data.data,t.data.pos,t.data.index);this._rebindRow(t.component,e)},rowDelete:function(t){t.component.deleteActual()},rowMove:function(t){this.table.rowManager.moveRowActual(t.component,this.table.rowManager.rows[t.data.pos],!1),this.table.rowManager.redraw()}},T.prototype._rebindRow=function(t,e){this.history.forEach(function(o){if(o.component instanceof r)o.component===t&&(o.component=e);else if(o.component instanceof l&&o.component.row===t){var i=o.component.column.getField();i&&(o.component=e.getCell(i))}})},c.prototype.registerModule("history",T);var k=function(t){this.table=t,this.fieldIndex=[],this.hasIndex=!1};k.prototype.parseTable=function(){var t=this,e=t.table.element,o=t.table.options,i=(o.columns,e.getElementsByTagName("th")),n=e.getElementsByTagName("tbody")[0],s=[];t.hasIndex=!1,t.table.options.htmlImporting.call(this.table),n=n?n.getElementsByTagName("tr"):[],t._extractOptions(e,o),i.length?t._extractHeaders(i,n):t._generateBlankHeaders(i,n);for(var r=0;r-1&&t.pressedKeys.splice(i,1)}},this.table.element.addEventListener("keydown",this.keyupBinding),this.table.element.addEventListener("keyup",this.keydownBinding)},z.prototype.clearBindings=function(){this.keyupBinding&&this.table.element.removeEventListener("keydown",this.keyupBinding),this.keydownBinding&&this.table.element.removeEventListener("keyup",this.keydownBinding)},z.prototype.checkBinding=function(t,e){var o=this,i=!0;return t.ctrlKey==e.ctrl&&t.shiftKey==e.shift&&(e.keys.forEach(function(t){-1==o.pressedKeys.indexOf(t)&&(i=!1)}),i&&e.action.call(o,t),!0)},z.prototype.bindings={navPrev:"shift + 9",navNext:9,navUp:38,navDown:40,scrollPageUp:33,scrollPageDown:34,scrollToStart:36,scrollToEnd:35,undo:"ctrl + 90",redo:"ctrl + 89",copyToClipboard:"ctrl + 67"},z.prototype.actions={keyBlock:function(t){t.stopPropagation(),t.preventDefault()},scrollPageUp:function(t){var e=this.table.rowManager,o=e.scrollTop-e.height;e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(o>=0?e.element.scrollTop=o:e.scrollToRow(e.getDisplayRows()[0])),this.table.element.focus()},scrollPageDown:function(t){var e=this.table.rowManager,o=e.scrollTop+e.height,i=e.element.scrollHeight;t.preventDefault(),e.displayRowsCount&&(o<=i?e.element.scrollTop=o:e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1])),this.table.element.focus()},scrollToStart:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[0]),this.table.element.focus()},scrollToEnd:function(t){var e=this.table.rowManager;t.preventDefault(),e.displayRowsCount&&e.scrollToRow(e.getDisplayRows()[e.displayRowsCount-1]),this.table.element.focus()},navPrev:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().prev())},navNext:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().next())},navLeft:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().left())},navRight:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().right())},navUp:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().up())},navDown:function(t){var e=!1;this.table.modExists("edit")&&(e=this.table.modules.edit.currentCell)&&(t.preventDefault(),e.nav().down())},undo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.undo()))},redo:function(t){this.table.options.history&&this.table.modExists("history")&&this.table.modExists("edit")&&(this.table.modules.edit.currentCell||(t.preventDefault(),this.table.modules.history.redo()))},copyToClipboard:function(t){this.table.modules.edit.currentCell||this.table.modExists("clipboard",!0)&&this.table.modules.clipboard.copy(this.table.options.selectable&&"highlight"!=this.table.options.selectable?"selected":"active",null,null,null,!0)}},c.prototype.registerModule("keybindings",z);var S=function(t){this.table=t,this.placeholderElement=this.createPlaceholderElement(),this.hoverElement=!1,this.checkTimeout=!1,this.checkPeriod=250,this.moving=!1,this.toCol=!1,this.toColAfter=!1,this.startX=0,this.autoScrollMargin=40,this.autoScrollStep=5,this.autoScrollTimeout=!1,this.moveHover=this.moveHover.bind(this),this.endMove=this.endMove.bind(this)};S.prototype.createPlaceholderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.classList.add("tabulator-col-placeholder"),t},S.prototype.initializeColumn=function(t){var e,o=this,i={};t.modules.frozen||(e=t.getElement(),i.mousemove=function(i){t.parent===o.moving.parent&&(i.pageX-c.prototype.helpers.elOffset(e).left+o.table.columnManager.element.scrollLeft>t.getWidth()/2?o.toCol===t&&o.toColAfter||(e.parentNode.insertBefore(o.placeholderElement,e.nextSibling),o.moveColumn(t,!0)):(o.toCol!==t||o.toColAfter)&&(e.parentNode.insertBefore(o.placeholderElement,e),o.moveColumn(t,!1)))}.bind(o),e.addEventListener("mousedown",function(e){1===e.which&&(o.checkTimeout=setTimeout(function(){o.startMove(e,t)},o.checkPeriod))}),e.addEventListener("mouseup",function(t){1===t.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)})),t.modules.moveColumn=i},S.prototype.startMove=function(t,e){var o=e.getElement();this.moving=e,this.startX=t.pageX-c.prototype.helpers.elOffset(o).left,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=e.getWidth()+"px",this.placeholderElement.style.height=e.getHeight()+"px",o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.table.columnManager.getElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.bottom="0",this._bindMouseMove(),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(t)},S.prototype._bindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(t){t.modules.moveColumn.mousemove&&t.getElement().addEventListener("mousemove",t.modules.moveColumn.mousemove)})},S.prototype._unbindMouseMove=function(){this.table.columnManager.columnsByIndex.forEach(function(t){t.modules.moveColumn.mousemove&&t.getElement().removeEventListener("mousemove",t.modules.moveColumn.mousemove)})},S.prototype.moveColumn=function(t,e){var o=this.moving.getCells();this.toCol=t,this.toColAfter=e,e?t.getCells().forEach(function(t,e){var i=t.getElement();i.parentNode.insertBefore(o[e].getElement(),i.nextSibling)}):t.getCells().forEach(function(t,e){var i=t.getElement();i.parentNode.insertBefore(o[e].getElement(),i)})},S.prototype.endMove=function(t){1===t.which&&(this._unbindMouseMove(),this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toCol&&this.table.columnManager.moveColumn(this.moving,this.toCol,this.toColAfter),this.moving=!1,this.toCol=!1,this.toColAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove))},S.prototype.moveHover=function(t){var e,o=this,i=o.table.columnManager.getElement(),n=i.scrollLeft,s=t.pageX-c.prototype.helpers.elOffset(i).left+n;o.hoverElement.style.left=s-o.startX+"px",s-nt.getHeight()/2){if(o.toRow!==t||!o.toRowAfter){var i=t.getElement();i.parentNode.insertBefore(o.placeholderElement,i.nextSibling),o.moveRow(t,!0)}}else if(o.toRow!==t||o.toRowAfter){var i=t.getElement();i.parentNode.insertBefore(o.placeholderElement,i),o.moveRow(t,!1)}}.bind(o),this.hasHandle||(e=t.getElement(),e.addEventListener("mousedown",function(e){1===e.which&&(o.checkTimeout=setTimeout(function(){o.startMove(e,t)},o.checkPeriod))}),e.addEventListener("mouseup",function(t){1===t.which&&o.checkTimeout&&clearTimeout(o.checkTimeout)})),t.modules.moveRow=i},_.prototype.initializeCell=function(t){var e=this,o=t.getElement();o.addEventListener("mousedown",function(o){1===o.which&&(e.checkTimeout=setTimeout(function(){e.startMove(o,t.row)},e.checkPeriod))}),o.addEventListener("mouseup",function(t){1===t.which&&e.checkTimeout&&clearTimeout(e.checkTimeout)})},_.prototype._bindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(t){"row"===t.type&&t.modules.moveRow.mousemove&&t.getElement().addEventListener("mousemove",t.modules.moveRow.mousemove)})},_.prototype._unbindMouseMove=function(){this.table.rowManager.getDisplayRows().forEach(function(t){"row"===t.type&&t.modules.moveRow.mousemove&&t.getElement().removeEventListener("mousemove",t.modules.moveRow.mousemove)})},_.prototype.startMove=function(t,e){var o=e.getElement();this.setStartPosition(t,e),this.moving=e,this.table.element.classList.add("tabulator-block-select"),this.placeholderElement.style.width=e.getWidth()+"px",this.placeholderElement.style.height=e.getHeight()+"px",this.connection?(this.table.element.classList.add("tabulator-movingrow-sending"),this.connectToTables(e)):(o.parentNode.insertBefore(this.placeholderElement,o),o.parentNode.removeChild(o)),this.hoverElement=o.cloneNode(!0),this.hoverElement.classList.add("tabulator-moving"),this.connection?(document.body.appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this.hoverElement.style.width=this.table.element.clientWidth+"px",this.hoverElement.style.whiteSpace="nowrap",this.hoverElement.style.overflow="hidden",this.hoverElement.style.pointerEvents="none"):(this.table.rowManager.getTableElement().appendChild(this.hoverElement),this.hoverElement.style.left="0",this.hoverElement.style.top="0",this._bindMouseMove()),document.body.addEventListener("mousemove",this.moveHover),document.body.addEventListener("mouseup",this.endMove),this.moveHover(t)},_.prototype.setStartPosition=function(t,e){var o,i;o=e.getElement(),this.connection?(i=o.getBoundingClientRect(),this.startX=i.left-t.pageX+window.scrollX,this.startY=i.top-t.pageY+window.scrollY):this.startY=t.pageY-o.getBoundingClientRect().top},_.prototype.endMove=function(t){t&&1!==t.which||(this._unbindMouseMove(),this.connection||(this.placeholderElement.parentNode.insertBefore(this.moving.getElement(),this.placeholderElement.nextSibling),this.placeholderElement.parentNode.removeChild(this.placeholderElement)),this.hoverElement.parentNode.removeChild(this.hoverElement),this.table.element.classList.remove("tabulator-block-select"),this.toRow&&this.table.rowManager.moveRow(this.moving,this.toRow,this.toRowAfter),this.moving=!1,this.toRow=!1,this.toRowAfter=!1,document.body.removeEventListener("mousemove",this.moveHover),document.body.removeEventListener("mouseup",this.endMove),this.connection&&(this.table.element.classList.remove("tabulator-movingrow-sending"),this.disconnectFromTables()))},_.prototype.moveRow=function(t,e){this.toRow=t,this.toRowAfter=e},_.prototype.moveHover=function(t){this.connection?this.moveHoverConnections.call(this,t):this.moveHoverTable.call(this,t)},_.prototype.moveHoverTable=function(t){var e=this.table.rowManager.getElement(),o=e.scrollTop,i=t.pageY-e.getBoundingClientRect().top+o;this.hoverElement.style.top=i-this.startY+"px"},_.prototype.moveHoverConnections=function(t){this.hoverElement.style.left=this.startX+t.pageX+"px",this.hoverElement.style.top=this.startY+t.pageY+"px"},_.prototype.connectToTables=function(t){var e=this.table.modules.comms.getConnections(this.connection);this.table.options.movableRowsSendingStart.call(this.table,e),this.table.modules.comms.send(this.connection,"moveRow","connect",{row:t})},_.prototype.disconnectFromTables=function(){var t=this.table.modules.comms.getConnections(this.connection);this.table.options.movableRowsSendingStop.call(this.table,t),this.table.modules.comms.send(this.connection,"moveRow","disconnect")},_.prototype.connect=function(t,e){var o=this;return this.connectedTable?(console.warn("Move Row Error - Table cannot accept connection, already connected to table:",this.connectedTable),!1):(this.connectedTable=t,this.connectedRow=e,this.table.element.classList.add("tabulator-movingrow-receiving"),o.table.rowManager.getDisplayRows().forEach(function(t){"row"===t.type&&t.modules.moveRow&&t.modules.moveRow.mouseup&&t.getElement().addEventListener("mouseup",t.modules.moveRow.mouseup)}),o.tableRowDropEvent=o.tableRowDrop.bind(o),o.table.element.addEventListener("mouseup",o.tableRowDropEvent),this.table.options.movableRowsReceivingStart.call(this.table,e,t),!0)},_.prototype.disconnect=function(t){var e=this;t===this.connectedTable?(this.connectedTable=!1,this.connectedRow=!1,this.table.element.classList.remove("tabulator-movingrow-receiving"),e.table.rowManager.getDisplayRows().forEach(function(t){"row"===t.type&&t.modules.moveRow&&t.modules.moveRow.mouseup&&t.getElement().removeEventListener("mouseup",t.modules.moveRow.mouseup)}),e.table.element.removeEventListener("mouseup",e.tableRowDropEvent),this.table.options.movableRowsReceivingStop.call(this.table,t)):console.warn("Move Row Error - trying to disconnect from non connected table")},_.prototype.dropComplete=function(t,e,o){var i=!1;if(o){switch(_typeof(this.table.options.movableRowsSender)){case"string":i=this.senders[this.table.options.movableRowsSender];break;case"function":i=this.table.options.movableRowsSender}i?i.call(this,this.moving.getComponent(),e?e.getComponent():void 0,t):this.table.options.movableRowsSender&&console.warn("Mover Row Error - no matching sender found:",this.table.options.movableRowsSender),this.table.options.movableRowsSent.call(this.table,this.moving.getComponent(),e?e.getComponent():void 0,t)}else this.table.options.movableRowsSentFailed.call(this.table,this.moving.getComponent(),e?e.getComponent():void 0,t);this.endMove()},_.prototype.tableRowDrop=function(t,e){var o=!1,i=!1;switch(t.stopImmediatePropagation(),_typeof(this.table.options.movableRowsReceiver)){case"string":o=this.receivers[this.table.options.movableRowsReceiver];break;case"function":o=this.table.options.movableRowsReceiver}o?i=o.call(this,this.connectedRow.getComponent(),e?e.getComponent():void 0,this.connectedTable):console.warn("Mover Row Error - no matching receiver found:",this.table.options.movableRowsReceiver),i?this.table.options.movableRowsReceived.call(this.table,this.connectedRow.getComponent(),e?e.getComponent():void 0,this.connectedTable):this.table.options.movableRowsReceivedFailed.call(this.table,this.connectedRow.getComponent(),e?e.getComponent():void 0,this.connectedTable),this.table.modules.comms.send(this.connectedTable,"moveRow","dropcomplete",{row:e,success:i})},_.prototype.receivers={insert:function(t,e,o){return this.table.addRow(t.getData(),void 0,e),!0},add:function(t,e,o){return this.table.addRow(t.getData()),!0},update:function(t,e,o){return!!e&&(e.update(t.getData()),!0)},replace:function(t,e,o){return!!e&&(this.table.addRow(t.getData(),void 0,e),e.delete(),!0)}},_.prototype.senders={delete:function(t,e,o){t.delete()}},_.prototype.commsReceived=function(t,e,o){switch(e){case"connect":return this.connect(t,o.row);case"disconnect":return this.disconnect(t);case"dropcomplete":return this.dropComplete(t,o.row,o.success)}},c.prototype.registerModule("moveRow",_);var F=function(t){this.table=t,this.allowedTypes=["","data","edit","clipboard"],this.enabled=!0};F.prototype.initializeColumn=function(t){var e=this,o=!1,i={};this.allowedTypes.forEach(function(n){var s,r="mutator"+(n.charAt(0).toUpperCase()+n.slice(1));t.definition[r]&&(s=e.lookupMutator(t.definition[r]))&&(o=!0,i[r]={mutator:s,params:t.definition[r+"Params"]||{}})}),o&&(t.modules.mutate=i)},F.prototype.lookupMutator=function(t){var e=!1;switch(void 0===t?"undefined":_typeof(t)){case"string":this.mutators[t]?e=this.mutators[t]:console.warn("Mutator Error - No such mutator found, ignoring: ",t);break;case"function":e=t}return e},F.prototype.transformRow=function(t,e,o){var i,n=this,s="mutator"+(e.charAt(0).toUpperCase()+e.slice(1));return this.enabled&&n.table.columnManager.traverse(function(n){var r,a,l;n.modules.mutate&&(r=n.modules.mutate[s]||n.modules.mutate.mutator||!1)&&(i=n.getFieldValue(t),(!o||o&&void 0!==i)&&(l=n.getComponent(),a="function"==typeof r.params?r.params(i,t,e,l):r.params,n.setFieldValue(t,r.mutator(i,t,e,a,l))))}),t},F.prototype.transformCell=function(t,e){var o=t.column.modules.mutate.mutatorEdit||t.column.modules.mutate.mutator||!1;return o?o.mutator(e,t.row.getData(),"edit",o.params,t.getComponent()):e},F.prototype.enable=function(){this.enabled=!0},F.prototype.disable=function(){this.enabled=!1},F.prototype.mutators={},c.prototype.registerModule("mutator",F);var H=function(t){this.table=t,this.mode="local",this.progressiveLoad=!1,this.size=0,this.page=1,this.count=5,this.max=1,this.displayIndex=0,this.createElements()};H.prototype.createElements=function(){var t;this.element=document.createElement("span"),this.element.classList.add("tabulator-paginator"),this.pagesElement=document.createElement("span"),this.pagesElement.classList.add("tabulator-pages"),t=document.createElement("button"),t.classList.add("tabulator-page"),t.setAttribute("type","button"),t.setAttribute("role","button"),t.setAttribute("aria-label",""),t.setAttribute("title",""),this.firstBut=t.cloneNode(!0),this.firstBut.setAttribute("data-page","first"),this.prevBut=t.cloneNode(!0),this.prevBut.setAttribute("data-page","prev"),this.nextBut=t.cloneNode(!0),this.nextBut.setAttribute("data-page","next"),this.lastBut=t.cloneNode(!0),this.lastBut.setAttribute("data-page","last")},H.prototype.initialize=function(t){var e=this;for(var o in e.table.options.paginationDataSent)e.paginationDataSentNames[o]=e.table.options.paginationDataSent[o];for(var i in e.table.options.paginationDataReceived)e.paginationDataReceivedNames[i]=e.table.options.paginationDataReceived[i];e.table.modules.localize.bind("pagination|first",function(t){e.firstBut.innerHTML=t}),e.table.modules.localize.bind("pagination|first_title",function(t){e.firstBut.setAttribute("aria-label",t),e.firstBut.setAttribute("title",t) -}),e.table.modules.localize.bind("pagination|prev",function(t){e.prevBut.innerHTML=t}),e.table.modules.localize.bind("pagination|prev_title",function(t){e.prevBut.setAttribute("aria-label",t),e.prevBut.setAttribute("title",t)}),e.table.modules.localize.bind("pagination|next",function(t){e.nextBut.innerHTML=t}),e.table.modules.localize.bind("pagination|next_title",function(t){e.nextBut.setAttribute("aria-label",t),e.nextBut.setAttribute("title",t)}),e.table.modules.localize.bind("pagination|last",function(t){e.lastBut.innerHTML=t}),e.table.modules.localize.bind("pagination|last_title",function(t){e.lastBut.setAttribute("aria-label",t),e.lastBut.setAttribute("title",t)}),e.firstBut.addEventListener("click",function(){e.setPage(1)}),e.prevBut.addEventListener("click",function(){e.previousPage()}),e.nextBut.addEventListener("click",function(){e.nextPage().then(function(){}).catch(function(){})}),e.lastBut.addEventListener("click",function(){e.setPage(e.max)}),e.table.options.paginationElement&&(e.element=e.table.options.paginationElement),e.element.appendChild(e.firstBut),e.element.appendChild(e.prevBut),e.element.appendChild(e.pagesElement),e.element.appendChild(e.nextBut),e.element.appendChild(e.lastBut),e.table.options.paginationElement||t||e.table.footerManager.append(e.element,e),e.mode=e.table.options.pagination,e.size=e.table.options.paginationSize||Math.floor(e.table.rowManager.getElement().clientHeight/24),e.count=e.table.options.paginationButtonCount},H.prototype.initializeProgressive=function(t){this.initialize(!0),this.mode="progressive_"+t,this.progressiveLoad=!0},H.prototype.setDisplayIndex=function(t){this.displayIndex=t},H.prototype.getDisplayIndex=function(){return this.displayIndex},H.prototype.setMaxRows=function(t){this.max=t?Math.ceil(t/this.size):1,this.page>this.max&&(this.page=this.max)},H.prototype.reset=function(t){return("local"==this.mode||t)&&(this.page=1),!0},H.prototype.setMaxPage=function(t){this.max=t||1,this.page>this.max&&(this.page=this.max,this.trigger())},H.prototype.setPage=function(t){var e=this;return new Promise(function(o,i){t>0&&t<=e.max?(e.page=t,e.trigger().then(function(){o()}).catch(function(){i()})):(console.warn("Pagination Error - Requested page is out of range of 1 - "+e.max+":",t),i())})},H.prototype.setPageSize=function(t){t>0&&(this.size=t)},H.prototype._setPageButtons=function(){for(var t=this,e=Math.floor((this.count-1)/2),o=Math.ceil((this.count-1)/2),i=this.max-this.page+e+10&&s<=t.max&&t.pagesElement.appendChild(t._generatePageButton(s));this.footerRedraw()},H.prototype._generatePageButton=function(t){var e=this,o=document.createElement("button");return o.classList.add("tabulator-page"),t==e.page&&o.classList.add("active"),o.setAttribute("type","button"),o.setAttribute("role","button"),o.setAttribute("aria-label","Show Page "+t),o.setAttribute("title","Show Page "+t),o.setAttribute("data-page",t),o.textContent=t,o.addEventListener("click",function(o){e.setPage(t)}),o},H.prototype.previousPage=function(){var t=this;return new Promise(function(e,o){t.page>1?(t.page--,t.trigger().then(function(){e()}).catch(function(){o()})):(console.warn("Pagination Error - Previous page would be less than page 1:",0),o())})},H.prototype.nextPage=function(){var t=this;return new Promise(function(e,o){t.page-1&&(i=i.substr(n),s=i.indexOf(";"),s>-1&&(i=i.substr(0,s)),e=i.replace(o+"=",""));break;default:console.warn("Persistance Load Error - invalid mode selected",this.mode)}return!!e&&JSON.parse(e)},P.prototype.mergeDefinition=function(t,e){var o=this,i=[];return e=e||[],e.forEach(function(e,n){var s=o._findColumn(t,e);s&&(s.width=e.width,s.visible=e.visible,s.columns&&(s.columns=o.mergeDefinition(s.columns,e.columns)),i.push(s))}),t.forEach(function(t,n){o._findColumn(e,t)||(i.length>n?i.splice(n,0,t):i.push(t))}),i},P.prototype._findColumn=function(t,e){var o=e.columns?"group":e.field?"field":"object";return t.find(function(t){switch(o){case"group":return t.title===e.title&&t.columns.length===e.columns.length;case"field":return t.field===e.field;case"object":return t===e}})},P.prototype.save=function(t){var e={};switch(t){case"columns":e=this.parseColumns(this.table.columnManager.getColumns());break;case"filter":e=this.table.modules.filter.getFilters();break;case"sort":e=this.validateSorters(this.table.modules.sort.getSort())}var o=this.id+("columns"===t?"":"-"+t);this.saveData(o,e)},P.prototype.validateSorters=function(t){return t.forEach(function(t){t.column=t.field,delete t.field}),t},P.prototype.saveData=function(t,e){switch(e=JSON.stringify(e),this.mode){case"local":localStorage.setItem(t,e);break;case"cookie":var o=new Date;o.setDate(o.getDate()+1e4),document.cookie=t+"="+e+"; expires="+o.toUTCString();break;default:console.warn("Persistance Save Error - invalid mode selected",this.mode)}},P.prototype.parseColumns=function(t){var e=this,o=[];return t.forEach(function(t){var i={};t.isGroup?(i.title=t.getDefinition().title,i.columns=e.parseColumns(t.getColumns())):(i.title=t.getDefinition().title,i.field=t.getField(),i.width=t.getWidth(),i.visible=t.visible),o.push(i)}),o},c.prototype.registerModule("persistence",P);var A=function(t){this.table=t,this.startColumn=!1,this.startX=!1,this.startWidth=!1,this.handle=null,this.prevHandle=null};A.prototype.initializeColumn=function(t,e,o){var i=this,n=!1,s=this.table.options.resizableColumns;if("header"===t&&(n="textarea"==e.definition.formatter||e.definition.variableHeight,e.modules.resize={variableHeight:n}),!0===s||s==t){var r=document.createElement("div");r.className="tabulator-col-resize-handle";var a=document.createElement("div");a.className="tabulator-col-resize-handle prev",r.addEventListener("click",function(t){t.stopPropagation()}),r.addEventListener("mousedown",function(t){var o=e.getLastColumn();o&&i._checkResizability(o)&&(i.startColumn=e,i._mouseDown(t,o))}),r.addEventListener("dblclick",function(t){i._checkResizability(e)&&e.reinitializeWidth(!0)}),a.addEventListener("click",function(t){t.stopPropagation()}),a.addEventListener("mousedown",function(t){var o,n,s;(o=e.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&(i.startColumn=e,i._mouseDown(t,s)))}),a.addEventListener("dblclick",function(t){var o,n,s;(o=e.getFirstColumn())&&(n=i.table.columnManager.findColumnIndex(o),(s=n>0&&i.table.columnManager.getColumnByIndex(n-1))&&i._checkResizability(s)&&s.reinitializeWidth(!0))}),o.appendChild(r),o.appendChild(a)}},A.prototype._checkResizability=function(t){return void 0!==t.definition.resizable?t.definition.resizable:this.table.options.resizableColumns},A.prototype._mouseDown=function(t,e){function o(t){e.setWidth(n.startWidth+(t.screenX-n.startX)),!n.table.browserSlow&&e.modules.resize&&e.modules.resize.variableHeight&&e.checkCellHeights()}function i(t){n.startColumn.modules.edit&&(n.startColumn.modules.edit.blocked=!1),n.table.browserSlow&&e.modules.resize&&e.modules.resize.variableHeight&&e.checkCellHeights(),document.body.removeEventListener("mouseup",i),document.body.removeEventListener("mousemove",o),n.table.element.classList.remove("tabulator-block-select"),n.table.options.persistentLayout&&n.table.modExists("persistence",!0)&&n.table.modules.persistence.save("columns"),n.table.options.columnResized.call(n.table,n.startColumn.getComponent())}var n=this;n.table.element.classList.add("tabulator-block-select"),t.stopPropagation(),n.startColumn.modules.edit&&(n.startColumn.modules.edit.blocked=!0),n.startX=t.screenX,n.startWidth=e.getWidth(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",i)},c.prototype.registerModule("resizeColumns",A);var B=function(t){this.table=t,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};B.prototype.initializeRow=function(t){var e=this,o=t.getElement(),i=document.createElement("div");i.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",i.addEventListener("click",function(t){t.stopPropagation()}),i.addEventListener("mousedown",function(o){e.startRow=t,e._mouseDown(o,t)}),n.addEventListener("click",function(t){t.stopPropagation()}),n.addEventListener("mousedown",function(o){var i=e.table.rowManager.prevDisplayRow(t);i&&(e.startRow=i,e._mouseDown(o,i))}),o.appendChild(i),o.appendChild(n)},B.prototype._mouseDown=function(t,e){function o(t){e.setHeight(n.startHeight+(t.screenY-n.startY))}function i(t){document.body.removeEventListener("mouseup",o),document.body.removeEventListener("mousemove",o),n.table.element.classList.remove("tabulator-block-select"),n.table.options.rowResized.call(this.table,e.getComponent())}var n=this;n.table.element.classList.add("tabulator-block-select"),t.stopPropagation(),n.startY=t.screenY,n.startHeight=e.getHeight(),document.body.addEventListener("mousemove",o),document.body.addEventListener("mouseup",i)},c.prototype.registerModule("resizeRows",B);var N=function(t){this.table=t,this.binding=!1,this.observer=!1};N.prototype.initialize=function(t){var e=this.table;"undefined"!=typeof ResizeObserver&&"virtual"===e.rowManager.getRenderMode()?(this.observer=new ResizeObserver(function(t){e.redraw()}),this.observer.observe(e.element)):(this.binding=function(){e.redraw()},window.addEventListener("resize",this.binding))},N.prototype.clearBindings=function(t){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element)},c.prototype.registerModule("resizeTable",N);var I=function(t){this.table=t,this.columns=[],this.hiddenColumns=[],this.mode="",this.index=0,this.collapseFormatter=[],this.collapseStartOpen=!0};I.prototype.initialize=function(){var t=this,e=[];this.mode=this.table.options.responsiveLayout,this.collapseFormatter=this.table.options.responsiveLayoutCollapseFormatter||this.formatCollapsedData,this.collapseStartOpen=this.table.options.responsiveLayoutCollapseStartOpen,this.hiddenColumns=[],this.table.columnManager.columnsByIndex.forEach(function(o,i){o.modules.responsive&&o.modules.responsive.order&&o.modules.responsive.visible&&(o.modules.responsive.index=i,e.push(o),o.visible||"collapse"!==t.mode||t.hiddenColumns.push(o))}),e=e.reverse(),e=e.sort(function(t,e){return e.modules.responsive.order-t.modules.responsive.order||e.modules.responsive.index-t.modules.responsive.index}),this.columns=e,"collapse"===this.mode&&this.generateCollapsedContent()},I.prototype.initializeColumn=function(t){var e=t.getDefinition();t.modules.responsive={order:void 0===e.responsive?1:e.responsive,visible:!1!==e.visible}},I.prototype.layoutRow=function(t){var e=t.getElement(),o=document.createElement("div");o.classList.add("tabulator-responsive-collapse"),e.classList.contains("tabulator-calcs")||(t.modules.responsiveLayout={element:o},this.collapseStartOpen||(o.style.display="none"),e.appendChild(o),this.generateCollapsedRowContent(t))},I.prototype.updateColumnVisibility=function(t,e){t.modules.responsive&&(t.modules.responsive.visible=e,this.initialize())},I.prototype.hideColumn=function(t){t.hide(!1,!0),"collapse"===this.mode&&(this.hiddenColumns.unshift(t),this.generateCollapsedContent())},I.prototype.showColumn=function(t){var e;t.show(!1,!0),t.setWidth(t.getWidth()),"collapse"===this.mode&&(e=this.hiddenColumns.indexOf(t),e>-1&&this.hiddenColumns.splice(e,1),this.generateCollapsedContent())},I.prototype.update=function(){for(var t=this,e=!0;e;){var o="fitColumns"==t.table.modules.layout.getMode()?t.table.columnManager.getFlexBaseWidth():t.table.columnManager.getWidth(),i=t.table.columnManager.element.clientWidth-o;if(i<0){var n=t.columns[t.index];n?(t.hideColumn(n),t.index++):e=!1}else{var s=t.columns[t.index-1];s&&i>0&&i>=s.getWidth()?(t.showColumn(s),t.index--):e=!1}t.table.rowManager.activeRowsCount||t.table.rowManager.renderEmptyScroll()}},I.prototype.generateCollapsedContent=function(){var t=this;this.table.rowManager.getDisplayRows().forEach(function(e){t.generateCollapsedRowContent(e)})},I.prototype.generateCollapsedRowContent=function(t){var e,o;if(t.modules.responsiveLayout){for(e=t.modules.responsiveLayout.element;e.firstChild;)e.removeChild(e.firstChild);o=this.collapseFormatter(this.generateCollapsedRowData(t)),o&&e.appendChild(o)}},I.prototype.generateCollapsedRowData=function(t){var e,o=this,i=t.getData(),n={};return this.hiddenColumns.forEach(function(s){var r=s.getFieldValue(i);s.definition.title&&s.field&&(s.modules.format&&o.table.options.responsiveLayoutCollapseUseFormatters?(e={value:!1,data:{},getValue:function(){return r},getData:function(){return i},getElement:function(){return document.createElement("div")},getRow:function(){return t.getComponent()},getColumn:function(){return s.getComponent()}},n[s.definition.title]=s.modules.format.formatter.call(o.table.modules.format,e,s.modules.format.params)):n[s.definition.title]=r)}),n},I.prototype.formatCollapsedData=function(t){var e=document.createElement("table"),o="";for(var i in t)o+=""+i+""+t[i]+"";return e.innerHTML=o,Object.keys(t).length?e:""},c.prototype.registerModule("responsiveLayout",I);var G=function(t){this.table=t,this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[]};G.prototype.clearSelectionData=function(t){this.selecting=!1,this.lastClickedRow=!1,this.selectPrev=[],this.selectedRows=[],t||this._rowSelectionChanged()},G.prototype.initializeRow=function(t){var e=this,o=t.getElement(),i=function t(){setTimeout(function(){e.selecting=!1},50),document.body.removeEventListener("mouseup",t)};t.modules.select={selected:!1},e.table.options.selectableCheck.call(this.table,t.getComponent())?(o.classList.add("tabulator-selectable"),o.classList.remove("tabulator-unselectable"),e.table.options.selectable&&"highlight"!=e.table.options.selectable&&(e.table.options.selectableRangeMode&&"click"===e.table.options.selectableRangeMode?o.addEventListener("click",function(o){if(o.shiftKey){e.lastClickedRow=e.lastClickedRow||t;var i=e.table.rowManager.getDisplayRowIndex(e.lastClickedRow),n=e.table.rowManager.getDisplayRowIndex(t),s=i<=n?i:n,r=i>=n?i:n,a=e.table.rowManager.getDisplayRows().slice(0),l=a.splice(s,r-s+1);o.ctrlKey?(l.forEach(function(t){t!==e.lastClickedRow&&e.toggleRow(t)}),e.lastClickedRow=t):(e.deselectRows(),e.selectRows(l))}else o.ctrlKey?(e.toggleRow(t),e.lastClickedRow=t):(e.deselectRows(),e.selectRows(t),e.lastClickedRow=t)}):(o.addEventListener("click",function(o){e.selecting||e.toggleRow(t)}),o.addEventListener("mousedown",function(o){if(o.shiftKey)return e.selecting=!0,e.selectPrev=[],document.body.addEventListener("mouseup",i),document.body.addEventListener("keyup",i),e.toggleRow(t),!1}),o.addEventListener("mouseenter",function(o){e.selecting&&(e.toggleRow(t),e.selectPrev[1]==t&&e.toggleRow(e.selectPrev[0]))}),o.addEventListener("mouseout",function(o){e.selecting&&e.selectPrev.unshift(t)})))):(o.classList.add("tabulator-unselectable"),o.classList.remove("tabulator-selectable"))},G.prototype.toggleRow=function(t){this.table.options.selectableCheck.call(this.table,t.getComponent())&&(t.modules.select.selected?this._deselectRow(t):this._selectRow(t))},G.prototype.selectRows=function(t){var e=this;switch(void 0===t?"undefined":_typeof(t)){case"undefined":e.table.rowManager.rows.forEach(function(t){e._selectRow(t,!1,!0)}),e._rowSelectionChanged();break;case"boolean":!0===t&&(e.table.rowManager.activeRows.forEach(function(t){e._selectRow(t,!1,!0)}),e._rowSelectionChanged());break;default:Array.isArray(t)?(t.forEach(function(t){e._selectRow(t)}),e._rowSelectionChanged()):e._selectRow(t)}},G.prototype._selectRow=function(t,e,o){if(!isNaN(this.table.options.selectable)&&!0!==this.table.options.selectable&&!o&&this.selectedRows.length>=this.table.options.selectable){if(!this.table.options.selectableRollingSelection)return!1;this._deselectRow(this.selectedRows[0])}var i=this.table.rowManager.findRow(t);i?-1==this.selectedRows.indexOf(i)&&(i.modules.select.selected=!0,i.getElement().classList.add("tabulator-selected"),this.selectedRows.push(i),e||(this.table.options.rowSelected.call(this.table,i.getComponent()),this._rowSelectionChanged())):e||console.warn("Selection Error - No such row found, ignoring selection:"+t)},G.prototype.isRowSelected=function(t){return-1!==this.selectedRows.indexOf(t)},G.prototype.deselectRows=function(t){var e,o=this;if(void 0===t){e=o.selectedRows.length;for(var i=0;i-1&&(n.modules.select.selected=!1,n.getElement().classList.remove("tabulator-selected"),i.selectedRows.splice(o,1),e||(i.table.options.rowDeselected.call(this.table,n.getComponent()),i._rowSelectionChanged())):e||console.warn("Deselection Error - No such row found, ignoring selection:"+t)},G.prototype.getSelectedData=function(){var t=[];return this.selectedRows.forEach(function(e){t.push(e.getData())}),t},G.prototype.getSelectedRows=function(){var t=[];return this.selectedRows.forEach(function(e){t.push(e.getComponent())}),t},G.prototype._rowSelectionChanged=function(){this.table.options.rowSelectionChanged.call(this.table,this.getSelectedData(),this.getSelectedRows())},c.prototype.registerModule("selectRow",G);var j=function(t){this.table=t,this.sortList=[],this.changed=!1};j.prototype.initializeColumn=function(t,e){var o,i,n=this,s=!1;switch(_typeof(t.definition.sorter)){case"string":n.sorters[t.definition.sorter]?s=n.sorters[t.definition.sorter]:console.warn("Sort Error - No such sorter found: ",t.definition.sorter);break;case"function":s=t.definition.sorter}t.modules.sort={sorter:s,dir:"none",params:t.definition.sorterParams||{},startingDir:t.definition.headerSortStartingDir||"asc"},!1!==t.definition.headerSort&&(o=t.getElement(),o.classList.add("tabulator-sortable"),i=document.createElement("div"),i.classList.add("tabulator-arrow"),e.appendChild(i),o.addEventListener("click",function(e){var o="",i=[],s=!1;t.modules.sort&&(o="asc"==t.modules.sort.dir?"desc":"desc"==t.modules.sort.dir?"asc":t.modules.sort.startingDir,n.table.options.columnHeaderSortMulti&&(e.shiftKey||e.ctrlKey)?(i=n.getSort(),s=i.findIndex(function(e){return e.field===t.getField()}),s>-1?(i[s].dir="asc"==i[s].dir?"desc":"asc",s!=i.length-1&&i.push(i.splice(s,1)[0])):i.push({column:t,dir:o}),n.setSort(i)):n.setSort(t,o),n.table.rowManager.sorterRefresh())}))},j.prototype.hasChanged=function(){var t=this.changed;return this.changed=!1,t},j.prototype.getSort=function(){var t=this,e=[];return t.sortList.forEach(function(t){t.column&&e.push({column:t.column.getComponent(),field:t.column.getField(),dir:t.dir})}),e},j.prototype.setSort=function(t,e){var o=this,i=[];Array.isArray(t)||(t=[{column:t,dir:e}]),t.forEach(function(t){var e;e=o.table.columnManager.findColumn(t.column),e?(t.column=e,i.push(t),o.changed=!0):console.warn("Sort Warning - Sort field does not exist and is being ignored: ",t.column)}),o.sortList=i,this.table.options.persistentSort&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.save("sort")},j.prototype.clear=function(){this.setSort([])},j.prototype.findSorter=function(t){var e,o=this.table.rowManager.activeRows[0],i="string";if(o&&(o=o.getData(),t.getField()))switch(e=t.getFieldValue(o),void 0===e?"undefined":_typeof(e)){case"undefined":i="string";break;case"boolean":i="boolean";break;default:isNaN(e)||""===e?e.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)&&(i="alphanum"):i="number"}return this.sorters[i]},j.prototype.sort=function(){var t,e=this;t=this.table.options.sortOrderReverse?e.sortList.slice().reverse():e.sortList,e.table.options.dataSorting&&e.table.options.dataSorting.call(e.table,e.getSort()),e.clearColumnHeaders(),e.table.options.ajaxSorting?t.forEach(function(t,o){e.setColumnHeader(t.column,t.dir)}):t.forEach(function(o,i){o.column&&o.column.modules.sort&&(o.column.modules.sort.sorter||(o.column.modules.sort.sorter=e.findSorter(o.column)),e._sortItem(o.column,o.dir,t,i)),e.setColumnHeader(o.column,o.dir)}),e.table.options.dataSorted&&e.table.options.dataSorted.call(e.table,e.getSort(),e.table.rowManager.getComponents(!0))},j.prototype.clearColumnHeaders=function(){this.table.columnManager.getRealColumns().forEach(function(t){t.modules.sort&&(t.modules.sort.dir="none",t.getElement().setAttribute("aria-sort","none"))})},j.prototype.setColumnHeader=function(t,e){t.modules.sort.dir=e,t.getElement().setAttribute("aria-sort",e)},j.prototype._sortItem=function(t,e,o,i){var n=this,s=n.table.rowManager.activeRows,r="function"==typeof t.modules.sort.params?t.modules.sort.params(t.getComponent(),e):t.modules.sort.params;s.sort(function(s,a){var l=n._sortRow(s,a,t,e,r);if(0===l&&i)for(var u=i-1;u>=0&&0===(l=n._sortRow(s,a,o[u].column,o[u].dir,r));u--);return l})},j.prototype._sortRow=function(t,e,o,i,n){var s,r,a="asc"==i?t:e,l="asc"==i?e:t;return t=o.getFieldValue(a.getData()),e=o.getFieldValue(l.getData()),t=void 0!==t?t:"",e=void 0!==e?e:"",s=a.getComponent(),r=l.getComponent(),o.modules.sort.sorter.call(this,t,e,s,r,o.getComponent(),i,n)},j.prototype.sorters={number:function(t,e,o,i,n,s,r){var a=r.alignEmptyValues,l=0;if(t=parseFloat(String(t).replace(",","")),e=parseFloat(String(e).replace(",","")),isNaN(t))l=isNaN(e)?0:-1;else{if(!isNaN(e))return t-e;l=1}return("top"===a&&"desc"===s||"bottom"===a&&"asc"===s)&&(l*=-1),l},string:function(t,e,o,i,n,s,r){var a,l=r.alignEmptyValues,u=0;if(t){if(e){switch(_typeof(r.locale)){case"boolean":r.locale&&(a=this.table.modules.localize.getLocale());break;case"string":a=r.locale}return String(t).toLowerCase().localeCompare(String(e).toLowerCase(),a)}u=1}else u=e?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(u*=-1),u},date:function(t,e,o,i,n,s,r){return r.format||(r.format="DD/MM/YYYY"),this.sorters.datetime.call(this,t,e,o,i,n,s,r)},time:function(t,e,o,i,n,s,r){return r.format||(r.format="hh:mm"),this.sorters.datetime.call(this,t,e,o,i,n,s,r)},datetime:function(t,e,o,i,n,s,r){var a=r.format||"DD/MM/YYYY hh:mm:ss",l=r.alignEmptyValues,u=0;if("undefined"!=typeof moment){if(t=moment(t,a),e=moment(e,a),t.isValid()){if(e.isValid())return t-e;u=1}else u=e.isValid()?-1:0;return("top"===l&&"desc"===s||"bottom"===l&&"asc"===s)&&(u*=-1),u}console.error("Sort Error - 'datetime' sorter is dependant on moment.js")},boolean:function(t,e,o,i,n,s,r){return(!0===t||"true"===t||"True"===t||1===t?1:0)-(!0===e||"true"===e||"True"===e||1===e?1:0)},array:function(t,e,o,i,n,s,r){function a(t){switch(c){case"length":return t.length;case"sum":return t.reduce(function(t,e){return t+e});case"max":return Math.max.apply(null,t);case"min":return Math.min.apply(null,t);case"avg":return t.reduce(function(t,e){return t+e})/t.length}}var l=0,u=0,c=r.type||"length",d=r.alignEmptyValues,h=0;if(Array.isArray(t)){if(Array.isArray(e))return l=t?a(t):0,u=e?a(e):0,l-u;d=1}else d=Array.isArray(e)?-1:0;return("top"===d&&"desc"===s||"bottom"===d&&"asc"===s)&&(h*=-1),h},exists:function(t,e,o,i,n,s,r){return(void 0===t?0:1)-(void 0===e?0:1)},alphanum:function(t,e,o,i,n,s,r){var a,l,u,c,d,h=0,p=/(\d+)|(\D+)/g,m=/\d/,f=r.alignEmptyValues,g=0;if(t||0===t){if(e||0===e){if(isFinite(t)&&isFinite(e))return t-e;if(a=String(t).toLowerCase(),l=String(e).toLowerCase(),a===l)return 0;if(!m.test(a)||!m.test(l))return a>l?1:-1;for(a=a.match(p),l=l.match(p),d=a.length>l.length?l.length:a.length;hc?1:-1;return a.length>l.length}g=1}else g=e||0===e?-1:0;return("top"===f&&"desc"===s||"bottom"===f&&"asc"===s)&&(g*=-1),g}},c.prototype.registerModule("sort",j);var V=function(t){this.table=t};return V.prototype.initializeColumn=function(t){var e,o=this,i=[];t.definition.validator&&(Array.isArray(t.definition.validator)?t.definition.validator.forEach(function(t){(e=o._extractValidator(t))&&i.push(e)}):(e=this._extractValidator(t.definition.validator))&&i.push(e),t.modules.validate=!!i.length&&i)},V.prototype._extractValidator=function(t){var e,o,i;switch(void 0===t?"undefined":_typeof(t)){case"string":return e=t.split(":",2),o=e.shift(),i=e[0],this._buildValidator(o,i);case"function":return this._buildValidator(t);case"object":return this._buildValidator(t.type,t.parameters)}},V.prototype._buildValidator=function(t,e){var o="function"==typeof t?t:this.validators[t];return o?{type:"function"==typeof t?"function":t,func:o,params:e}:(console.warn("Validator Setup Error - No matching validator found:",t),!1)},V.prototype.validate=function(t,e,o){var i=this,n=[];return t&&t.forEach(function(t){t.func.call(i,e,o,t.params)||n.push({type:t.type,parameters:t.params})}),!n.length||n},V.prototype.validators={integer:function(t,e,o){return""===e||null===e||void 0===e||"number"==typeof(e=Number(e))&&isFinite(e)&&Math.floor(e)===e},float:function(t,e,o){return""===e||null===e||void 0===e||"number"==typeof(e=Number(e))&&isFinite(e)&&e%1!=0},numeric:function(t,e,o){return""===e||null===e||void 0===e||!isNaN(e)},string:function(t,e,o){return""===e||null===e||void 0===e||isNaN(e)},max:function(t,e,o){return""===e||null===e||void 0===e||parseFloat(e)<=o},min:function(t,e,o){return""===e||null===e||void 0===e||parseFloat(e)>=o},minLength:function(t,e,o){return""===e||null===e||void 0===e||String(e).length>=o},maxLength:function(t,e,o){return""===e||null===e||void 0===e||String(e).length<=o},in:function(t,e,o){return""===e||null===e||void 0===e||("string"==typeof o&&(o=o.split("|")),""===e||o.indexOf(e)>-1)},regex:function(t,e,o){return""===e||null===e||void 0===e||new RegExp(o).test(e)},unique:function(t,e,o){if(""===e||null===e||void 0===e)return!0;var i=!0,n=t.getData(),s=t.getColumn()._getSelf();return this.table.rowManager.rows.forEach(function(t){var o=t.getData();o!==n&&e==s.getFieldValue(o)&&(i=!1)}),i},required:function(t,e,o){return""!==e&null!==e&&void 0!==e}},c.prototype.registerModule("validate",V),c}); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/tabulator_core.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/tabulator_core.js deleted file mode 100644 index 9df66af27c..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/tabulator_core.js +++ /dev/null @@ -1,7057 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ - -'use strict'; - -// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -if (!Array.prototype.findIndex) { - - Object.defineProperty(Array.prototype, 'findIndex', { - - value: function value(predicate) { - - // 1. Let O be ? ToObject(this value). - - if (this == null) { - - throw new TypeError('"this" is null or not defined'); - } - - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - - var len = o.length >>> 0; - - // 3. If IsCallable(predicate) is false, throw a TypeError exception. - - if (typeof predicate !== 'function') { - - throw new TypeError('predicate must be a function'); - } - - // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. - - var thisArg = arguments[1]; - - // 5. Let k be 0. - - var k = 0; - - // 6. Repeat, while k < len - - while (k < len) { - - // a. Let Pk be ! ToString(k). - - // b. Let kValue be ? Get(O, Pk). - - // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). - - // d. If testResult is true, return k. - - var kValue = o[k]; - - if (predicate.call(thisArg, kValue, k, o)) { - - return k; - } - - // e. Increase k by 1. - - k++; - } - - // 7. Return -1. - - return -1; - } - - }); -} - -// https://tc39.github.io/ecma262/#sec-array.prototype.find - -if (!Array.prototype.find) { - - Object.defineProperty(Array.prototype, 'find', { - - value: function value(predicate) { - - // 1. Let O be ? ToObject(this value). - - if (this == null) { - - throw new TypeError('"this" is null or not defined'); - } - - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - - var len = o.length >>> 0; - - // 3. If IsCallable(predicate) is false, throw a TypeError exception. - - if (typeof predicate !== 'function') { - - throw new TypeError('predicate must be a function'); - } - - // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. - - var thisArg = arguments[1]; - - // 5. Let k be 0. - - var k = 0; - - // 6. Repeat, while k < len - - while (k < len) { - - // a. Let Pk be ! ToString(k). - - // b. Let kValue be ? Get(O, Pk). - - // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). - - // d. If testResult is true, return kValue. - - var kValue = o[k]; - - if (predicate.call(thisArg, kValue, k, o)) { - - return kValue; - } - - // e. Increase k by 1. - - k++; - } - - // 7. Return undefined. - - return undefined; - } - - }); -} - -var ColumnManager = function ColumnManager(table) { - - this.table = table; //hold parent table - - this.headersElement = this.createHeadersElement(); - - this.element = this.createHeaderElement(); //containing element - - this.rowManager = null; //hold row manager object - - this.columns = []; // column definition object - - this.columnsByIndex = []; //columns by index - - this.columnsByField = []; //columns by field - - this.scrollLeft = 0; - - this.element.insertBefore(this.headersElement, this.element.firstChild); -}; - -////////////// Setup Functions ///////////////// - - -ColumnManager.prototype.createHeadersElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-headers"); - - return el; -}; - -ColumnManager.prototype.createHeaderElement = function () { - - var el = document.createElement("div"); - - el.classList.add("tabulator-header"); - - return el; -}; - -//link to row manager - -ColumnManager.prototype.setRowManager = function (manager) { - - this.rowManager = manager; -}; - -//return containing element - -ColumnManager.prototype.getElement = function () { - - return this.element; -}; - -//return header containing element - -ColumnManager.prototype.getHeadersElement = function () { - - return this.headersElement; -}; - -//scroll horizontally to match table body - -ColumnManager.prototype.scrollHorizontal = function (left) { - - var hozAdjust = 0, - scrollWidth = this.element.scrollWidth - this.table.element.clientWidth; - - this.element.scrollLeft = left; - - //adjust for vertical scrollbar moving table when present - - if (left > scrollWidth) { - - hozAdjust = left - scrollWidth; - - this.element.style.marginLeft = -hozAdjust + "px"; - } else { - - this.element.style.marginLeft = 0; - } - - //keep frozen columns fixed in position - - //this._calcFrozenColumnsPos(hozAdjust + 3); - - - this.scrollLeft = left; - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.layout(); - } -}; - -///////////// Column Setup Functions ///////////// - - -ColumnManager.prototype.setColumns = function (cols, row) { - - var self = this; - - while (self.headersElement.firstChild) { - self.headersElement.removeChild(self.headersElement.firstChild); - }self.columns = []; - - self.columnsByIndex = []; - - self.columnsByField = []; - - //reset frozen columns - - if (self.table.modExists("frozenColumns")) { - - self.table.modules.frozenColumns.reset(); - } - - cols.forEach(function (def, i) { - - self._addColumn(def); - }); - - self._reIndexColumns(); - - if (self.table.options.responsiveLayout && self.table.modExists("responsiveLayout", true)) { - - self.table.modules.responsiveLayout.initialize(); - } - - self.redraw(true); -}; - -ColumnManager.prototype._addColumn = function (definition, before, nextToColumn) { - - var column = new Column(definition, this), - colEl = column.getElement(), - index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn; - - if (nextToColumn && index > -1) { - - var parentIndex = this.columns.indexOf(nextToColumn.getTopColumn()); - - var nextEl = nextToColumn.getElement(); - - if (before) { - - this.columns.splice(parentIndex, 0, column); - - nextEl.parentNode.insertBefore(colEl, nextEl); - } else { - - this.columns.splice(parentIndex + 1, 0, column); - - nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling); - } - } else { - - if (before) { - - this.columns.unshift(column); - - this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild); - } else { - - this.columns.push(column); - - this.headersElement.appendChild(column.getElement()); - } - } - - return column; -}; - -ColumnManager.prototype.registerColumnField = function (col) { - - if (col.definition.field) { - - this.columnsByField[col.definition.field] = col; - } -}; - -ColumnManager.prototype.registerColumnPosition = function (col) { - - this.columnsByIndex.push(col); -}; - -ColumnManager.prototype._reIndexColumns = function () { - - this.columnsByIndex = []; - - this.columns.forEach(function (column) { - - column.reRegisterPosition(); - }); -}; - -//ensure column headers take up the correct amount of space in column groups - -ColumnManager.prototype._verticalAlignHeaders = function () { - - var self = this, - minHeight = 0; - - self.columns.forEach(function (column) { - - var height; - - column.clearVerticalAlign(); - - height = column.getHeight(); - - if (height > minHeight) { - - minHeight = height; - } - }); - - self.columns.forEach(function (column) { - - column.verticalAlign(self.table.options.columnVertAlign, minHeight); - }); - - self.rowManager.adjustTableSize(); -}; - -//////////////// Column Details ///////////////// - - -ColumnManager.prototype.findColumn = function (subject) { - - var self = this; - - if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") { - - if (subject instanceof Column) { - - //subject is column element - - return subject; - } else if (subject instanceof ColumnComponent) { - - //subject is public column component - - return subject._getSelf() || false; - } else if (subject instanceof HTMLElement) { - - //subject is a HTML element of the column header - - var match = self.columns.find(function (column) { - - return column.element === subject; - }); - - return match || false; - } - } else { - - //subject should be treated as the field name of the column - - return this.columnsByField[subject] || false; - } - - //catch all for any other type of input - - - return false; -}; - -ColumnManager.prototype.getColumnByField = function (field) { - - return this.columnsByField[field]; -}; - -ColumnManager.prototype.getColumnByIndex = function (index) { - - return this.columnsByIndex[index]; -}; - -ColumnManager.prototype.getColumns = function () { - - return this.columns; -}; - -ColumnManager.prototype.findColumnIndex = function (column) { - - return this.columnsByIndex.findIndex(function (col) { - - return column === col; - }); -}; - -//return all columns that are not groups - -ColumnManager.prototype.getRealColumns = function () { - - return this.columnsByIndex; -}; - -//travers across columns and call action - -ColumnManager.prototype.traverse = function (callback) { - - var self = this; - - self.columnsByIndex.forEach(function (column, i) { - - callback(column, i); - }); -}; - -//get defintions of actual columns - -ColumnManager.prototype.getDefinitions = function (active) { - - var self = this, - output = []; - - self.columnsByIndex.forEach(function (column) { - - if (!active || active && column.visible) { - - output.push(column.getDefinition()); - } - }); - - return output; -}; - -//get full nested definition tree - -ColumnManager.prototype.getDefinitionTree = function () { - - var self = this, - output = []; - - self.columns.forEach(function (column) { - - output.push(column.getDefinition(true)); - }); - - return output; -}; - -ColumnManager.prototype.getComponents = function (structured) { - - var self = this, - output = [], - columns = structured ? self.columns : self.columnsByIndex; - - columns.forEach(function (column) { - - output.push(column.getComponent()); - }); - - return output; -}; - -ColumnManager.prototype.getWidth = function () { - - var width = 0; - - this.columnsByIndex.forEach(function (column) { - - if (column.visible) { - - width += column.getWidth(); - } - }); - - return width; -}; - -ColumnManager.prototype.moveColumn = function (from, to, after) { - - this._moveColumnInArray(this.columns, from, to, after); - - this._moveColumnInArray(this.columnsByIndex, from, to, after, true); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.initialize(); - } - - if (this.table.options.columnMoved) { - - this.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents()); - } - - if (this.table.options.persistentLayout && this.table.modExists("persistence", true)) { - - this.table.modules.persistence.save("columns"); - } -}; - -ColumnManager.prototype._moveColumnInArray = function (columns, from, to, after, updateRows) { - - var fromIndex = columns.indexOf(from), - toIndex; - - if (fromIndex > -1) { - - columns.splice(fromIndex, 1); - - toIndex = columns.indexOf(to); - - if (toIndex > -1) { - - if (after) { - - toIndex = toIndex + 1; - } - } else { - - toIndex = fromIndex; - } - - columns.splice(toIndex, 0, from); - - if (updateRows) { - - this.table.rowManager.rows.forEach(function (row) { - - if (row.cells.length) { - - var cell = row.cells.splice(fromIndex, 1)[0]; - - row.cells.splice(toIndex, 0, cell); - } - }); - } - } -}; - -ColumnManager.prototype.scrollToColumn = function (column, position, ifVisible) { - var _this = this; - - var left = 0, - offset = 0, - adjust = 0, - colEl = column.getElement(); - - return new Promise(function (resolve, reject) { - - if (typeof position === "undefined") { - - position = _this.table.options.scrollToColumnPosition; - } - - if (typeof ifVisible === "undefined") { - - ifVisible = _this.table.options.scrollToColumnIfVisible; - } - - if (column.visible) { - - //align to correct position - - switch (position) { - - case "middle": - - case "center": - - adjust = -_this.element.clientWidth / 2; - - break; - - case "right": - - adjust = colEl.clientWidth - _this.headersElement.clientWidth; - - break; - - } - - //check column visibility - - if (!ifVisible) { - - offset = colEl.offsetLeft; - - if (offset > 0 && offset + colEl.offsetWidth < _this.element.clientWidth) { - - return false; - } - } - - //calculate scroll position - - left = colEl.offsetLeft + _this.element.scrollLeft + adjust; - - left = Math.max(Math.min(left, _this.table.rowManager.element.scrollWidth - _this.table.rowManager.element.clientWidth), 0); - - _this.table.rowManager.scrollHorizontal(left); - - _this.scrollHorizontal(left); - - resolve(); - } else { - - console.warn("Scroll Error - Column not visible"); - - reject("Scroll Error - Column not visible"); - } - }); -}; - -//////////////// Cell Management ///////////////// - - -ColumnManager.prototype.generateCells = function (row) { - - var self = this; - - var cells = []; - - self.columnsByIndex.forEach(function (column) { - - cells.push(column.generateCell(row)); - }); - - return cells; -}; - -//////////////// Column Management ///////////////// - - -ColumnManager.prototype.getFlexBaseWidth = function () { - - var self = this, - totalWidth = self.table.element.clientWidth, - //table element width - - fixedWidth = 0; - - //adjust for vertical scrollbar if present - - if (self.rowManager.element.scrollHeight > self.rowManager.element.clientHeight) { - - totalWidth -= self.rowManager.element.offsetWidth - self.rowManager.element.clientWidth; - } - - this.columnsByIndex.forEach(function (column) { - - var width, minWidth, colWidth; - - if (column.visible) { - - width = column.definition.width || 0; - - minWidth = typeof column.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(column.minWidth); - - if (typeof width == "string") { - - if (width.indexOf("%") > -1) { - - colWidth = totalWidth / 100 * parseInt(width); - } else { - - colWidth = parseInt(width); - } - } else { - - colWidth = width; - } - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - } - }); - - return fixedWidth; -}; - -ColumnManager.prototype.addColumn = function (definition, before, nextToColumn) { - - var column = this._addColumn(definition, before, nextToColumn); - - this._reIndexColumns(); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.initialize(); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - this.redraw(); - - if (this.table.modules.layout.getMode() != "fitColumns") { - - column.reinitializeWidth(); - } - - this._verticalAlignHeaders(); - - this.table.rowManager.reinitialize(); -}; - -//remove column from system - -ColumnManager.prototype.deregisterColumn = function (column) { - - var field = column.getField(), - index; - - //remove from field list - - if (field) { - - delete this.columnsByField[field]; - } - - //remove from index list - - index = this.columnsByIndex.indexOf(column); - - if (index > -1) { - - this.columnsByIndex.splice(index, 1); - } - - //remove from column list - - index = this.columns.indexOf(column); - - if (index > -1) { - - this.columns.splice(index, 1); - } - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.initialize(); - } - - this.redraw(); -}; - -//redraw columns - -ColumnManager.prototype.redraw = function (force) { - - if (force) { - - if (Tabulator.prototype.helpers.elVisible(this.element)) { - - this._verticalAlignHeaders(); - } - - this.table.rowManager.resetScroll(); - - this.table.rowManager.reinitialize(); - } - - if (this.table.modules.layout.getMode() == "fitColumns") { - - this.table.modules.layout.layout(); - } else { - - if (force) { - - this.table.modules.layout.layout(); - } else { - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - } - } - - if (this.table.modExists("frozenColumns")) { - - this.table.modules.frozenColumns.layout(); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - if (force) { - - if (this.table.options.persistentLayout && this.table.modExists("persistence", true)) { - - this.table.modules.persistence.save("columns"); - } - - if (this.table.modExists("columnCalcs")) { - - this.table.modules.columnCalcs.redraw(); - } - } - - this.table.footerManager.redraw(); -}; - -//public column object -var ColumnComponent = function ColumnComponent(column) { - this._column = column; - this.type = "ColumnComponent"; -}; - -ColumnComponent.prototype.getElement = function () { - return this._column.getElement(); -}; - -ColumnComponent.prototype.getDefinition = function () { - return this._column.getDefinition(); -}; - -ColumnComponent.prototype.getField = function () { - return this._column.getField(); -}; - -ColumnComponent.prototype.getCells = function () { - var cells = []; - - this._column.cells.forEach(function (cell) { - cells.push(cell.getComponent()); - }); - - return cells; -}; - -ColumnComponent.prototype.getVisibility = function () { - return this._column.visible; -}; - -ColumnComponent.prototype.show = function () { - if (this._column.isGroup) { - this._column.columns.forEach(function (column) { - column.show(); - }); - } else { - this._column.show(); - } -}; - -ColumnComponent.prototype.hide = function () { - if (this._column.isGroup) { - this._column.columns.forEach(function (column) { - column.hide(); - }); - } else { - this._column.hide(); - } -}; - -ColumnComponent.prototype.toggle = function () { - if (this._column.visible) { - this.hide(); - } else { - this.show(); - } -}; - -ColumnComponent.prototype.delete = function () { - this._column.delete(); -}; - -ColumnComponent.prototype.getSubColumns = function () { - var output = []; - - if (this._column.columns.length) { - this._column.columns.forEach(function (column) { - output.push(column.getComponent()); - }); - } - - return output; -}; - -ColumnComponent.prototype.getParentColumn = function () { - return this._column.parent instanceof Column ? this._column.parent.getComponent() : false; -}; - -ColumnComponent.prototype._getSelf = function () { - return this._column; -}; - -ColumnComponent.prototype.scrollTo = function () { - return this._column.table.columnManager.scrollToColumn(this._column); -}; - -ColumnComponent.prototype.getTable = function () { - return this._column.table; -}; - -ColumnComponent.prototype.headerFilterFocus = function () { - if (this._column.table.modExists("filter", true)) { - this._column.table.modules.filter.setHeaderFilterFocus(this._column); - } -}; - -ColumnComponent.prototype.reloadHeaderFilter = function () { - if (this._column.table.modExists("filter", true)) { - this._column.table.modules.filter.reloadHeaderFilter(this._column); - } -}; - -ColumnComponent.prototype.setHeaderFilterValue = function (value) { - if (this._column.table.modExists("filter", true)) { - this._column.table.modules.filter.setHeaderFilterValue(this._column, value); - } -}; - -var Column = function Column(def, parent) { - var self = this; - - this.table = parent.table; - this.definition = def; //column definition - this.parent = parent; //hold parent object - this.type = "column"; //type of element - this.columns = []; //child columns - this.cells = []; //cells bound to this column - this.element = this.createElement(); //column header element - this.contentElement = false; - this.groupElement = this.createGroupElement(); //column group holder element - this.isGroup = false; - this.tooltip = false; //hold column tooltip - this.hozAlign = ""; //horizontal text alignment - - //multi dimentional filed handling - this.field = ""; - this.fieldStructure = ""; - this.getFieldValue = ""; - this.setFieldValue = ""; - - this.setField(this.definition.field); - - this.modules = {}; //hold module variables; - - this.cellEvents = { - cellClick: false, - cellDblClick: false, - cellContext: false, - cellTap: false, - cellDblTap: false, - cellTapHold: false - }; - - this.width = null; //column width - this.minWidth = null; //column minimum width - this.widthFixed = false; //user has specified a width for this column - - this.visible = true; //default visible state - - //initialize column - if (def.columns) { - - this.isGroup = true; - - def.columns.forEach(function (def, i) { - var newCol = new Column(def, self); - self.attachColumn(newCol); - }); - - self.checkColumnVisibility(); - } else { - parent.registerColumnField(this); - } - - if (def.rowHandle && this.table.options.movableRows !== false && this.table.modExists("moveRow")) { - this.table.modules.moveRow.setHandle(true); - } - - this._buildHeader(); -}; - -Column.prototype.createElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.setAttribute("role", "columnheader"); - el.setAttribute("aria-sort", "none"); - - return el; -}; - -Column.prototype.createGroupElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-col-group-cols"); - - return el; -}; - -Column.prototype.setField = function (field) { - this.field = field; - this.fieldStructure = field ? this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field] : []; - this.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData; - this.setFieldValue = this.fieldStructure.length > 1 ? this._setNesteData : this._setFlatData; -}; - -//register column position with column manager -Column.prototype.registerColumnPosition = function (column) { - this.parent.registerColumnPosition(column); -}; - -//register column position with column manager -Column.prototype.registerColumnField = function (column) { - this.parent.registerColumnField(column); -}; - -//trigger position registration -Column.prototype.reRegisterPosition = function () { - if (this.isGroup) { - this.columns.forEach(function (column) { - column.reRegisterPosition(); - }); - } else { - this.registerColumnPosition(this); - } -}; - -Column.prototype.setTooltip = function () { - var self = this, - def = self.definition; - - //set header tooltips - var tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader; - - if (tooltip) { - if (tooltip === true) { - if (def.field) { - self.table.modules.localize.bind("columns|" + def.field, function (value) { - self.element.setAttribute("title", value || def.title); - }); - } else { - self.element.setAttribute("title", def.title); - } - } else { - if (typeof tooltip == "function") { - tooltip = tooltip(self.getComponent()); - - if (tooltip === false) { - tooltip = ""; - } - } - - self.element.setAttribute("title", tooltip); - } - } else { - self.element.setAttribute("title", ""); - } -}; - -//build header element -Column.prototype._buildHeader = function () { - var self = this, - def = self.definition; - - while (self.element.firstChild) { - self.element.removeChild(self.element.firstChild); - }if (def.headerVertical) { - self.element.classList.add("tabulator-col-vertical"); - - if (def.headerVertical === "flip") { - self.element.classList.add("tabulator-col-vertical-flip"); - } - } - - self.contentElement = self._bindEvents(); - - self.contentElement = self._buildColumnHeaderContent(); - - self.element.appendChild(self.contentElement); - - if (self.isGroup) { - self._buildGroupHeader(); - } else { - self._buildColumnHeader(); - } - - self.setTooltip(); - - //set resizable handles - if (self.table.options.resizableColumns && self.table.modExists("resizeColumns")) { - self.table.modules.resizeColumns.initializeColumn("header", self, self.element); - } - - //set resizable handles - if (def.headerFilter && self.table.modExists("filter") && self.table.modExists("edit")) { - if (typeof def.headerFilterPlaceholder !== "undefined" && def.field) { - self.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder); - } - - self.table.modules.filter.initializeColumn(self); - } - - //set resizable handles - if (self.table.modExists("frozenColumns")) { - self.table.modules.frozenColumns.initializeColumn(self); - } - - //set movable column - if (self.table.options.movableColumns && !self.isGroup && self.table.modExists("moveColumn")) { - self.table.modules.moveColumn.initializeColumn(self); - } - - //set calcs column - if ((def.topCalc || def.bottomCalc) && self.table.modExists("columnCalcs")) { - self.table.modules.columnCalcs.initializeColumn(self); - } - - //update header tooltip on mouse enter - self.element.addEventListener("mouseenter", function (e) { - self.setTooltip(); - }); -}; - -Column.prototype._bindEvents = function () { - - var self = this, - def = self.definition, - dblTap, - tapHold, - tap; - - //setup header click event bindings - if (typeof def.headerClick == "function") { - self.element.addEventListener("click", function (e) { - def.headerClick(e, self.getComponent()); - }); - } - - if (typeof def.headerDblClick == "function") { - self.element.addEventListener("dblclick", function (e) { - def.headerDblClick(e, self.getComponent()); - }); - } - - if (typeof def.headerContext == "function") { - self.element.addEventListener("contextmenu", function (e) { - def.headerContext(e, self.getComponent()); - }); - } - - //setup header tap event bindings - if (typeof def.headerTap == "function") { - tap = false; - - self.element.addEventListener("touchstart", function (e) { - tap = true; - }); - - self.element.addEventListener("touchend", function (e) { - if (tap) { - def.headerTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (typeof def.headerDblTap == "function") { - dblTap = null; - - self.element.addEventListener("touchend", function (e) { - - if (dblTap) { - clearTimeout(dblTap); - dblTap = null; - - def.headerDblTap(e, self.getComponent()); - } else { - - dblTap = setTimeout(function () { - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - }); - } - - if (typeof def.headerTapHold == "function") { - tapHold = null; - - self.element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - tap = false; - def.headerTapHold(e, self.getComponent()); - }, 1000); - }); - - self.element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; - }); - } - - //store column cell click event bindings - if (typeof def.cellClick == "function") { - self.cellEvents.cellClick = def.cellClick; - } - - if (typeof def.cellDblClick == "function") { - self.cellEvents.cellDblClick = def.cellDblClick; - } - - if (typeof def.cellContext == "function") { - self.cellEvents.cellContext = def.cellContext; - } - - //setup column cell tap event bindings - if (typeof def.cellTap == "function") { - self.cellEvents.cellTap = def.cellTap; - } - - if (typeof def.cellDblTap == "function") { - self.cellEvents.cellDblTap = def.cellDblTap; - } - - if (typeof def.cellTapHold == "function") { - self.cellEvents.cellTapHold = def.cellTapHold; - } - - //setup column cell edit callbacks - if (typeof def.cellEdited == "function") { - self.cellEvents.cellEdited = def.cellEdited; - } - - if (typeof def.cellEditing == "function") { - self.cellEvents.cellEditing = def.cellEditing; - } - - if (typeof def.cellEditCancelled == "function") { - self.cellEvents.cellEditCancelled = def.cellEditCancelled; - } -}; - -//build header element for header -Column.prototype._buildColumnHeader = function () { - var self = this, - def = self.definition, - table = self.table, - sortable; - - //set column sorter - if (table.modExists("sort")) { - table.modules.sort.initializeColumn(self, self.contentElement); - } - - //set column formatter - if (table.modExists("format")) { - table.modules.format.initializeColumn(self); - } - - //set column editor - if (typeof def.editor != "undefined" && table.modExists("edit")) { - table.modules.edit.initializeColumn(self); - } - - //set colum validator - if (typeof def.validator != "undefined" && table.modExists("validate")) { - table.modules.validate.initializeColumn(self); - } - - //set column mutator - if (table.modExists("mutator")) { - table.modules.mutator.initializeColumn(self); - } - - //set column accessor - if (table.modExists("accessor")) { - table.modules.accessor.initializeColumn(self); - } - - //set respoviveLayout - if (_typeof(table.options.responsiveLayout) && table.modExists("responsiveLayout")) { - table.modules.responsiveLayout.initializeColumn(self); - } - - //set column visibility - if (typeof def.visible != "undefined") { - if (def.visible) { - self.show(true); - } else { - self.hide(true); - } - } - - //asign additional css classes to column header - if (def.cssClass) { - self.element.classList.add(def.cssClass); - } - - if (def.field) { - this.element.setAttribute("tabulator-field", def.field); - } - - //set min width if present - self.setMinWidth(typeof def.minWidth == "undefined" ? self.table.options.columnMinWidth : def.minWidth); - - self.reinitializeWidth(); - - //set tooltip if present - self.tooltip = self.definition.tooltip || self.definition.tooltip === false ? self.definition.tooltip : self.table.options.tooltips; - - //set orizontal text alignment - self.hozAlign = typeof self.definition.align == "undefined" ? "" : self.definition.align; -}; - -Column.prototype._buildColumnHeaderContent = function () { - var self = this, - def = self.definition, - table = self.table; - - var contentElement = document.createElement("div"); - contentElement.classList.add("tabulator-col-content"); - - contentElement.appendChild(self._buildColumnHeaderTitle()); - - return contentElement; -}; - -//build title element of column -Column.prototype._buildColumnHeaderTitle = function () { - var self = this, - def = self.definition, - table = self.table, - title; - - var titleHolderElement = document.createElement("div"); - titleHolderElement.classList.add("tabulator-col-title"); - - if (def.editableTitle) { - var titleElement = document.createElement("input"); - titleElement.classList.add("tabulator-title-editor"); - - titleElement.addEventListener("click", function (e) { - e.stopPropagation(); - titleElement.focus(); - }); - - titleElement.addEventListener("change", function () { - def.title = titleElement.value; - table.options.columnTitleChanged.call(self.table, self.getComponent()); - }); - - titleHolderElement.appendChild(titleElement); - - if (def.field) { - table.modules.localize.bind("columns|" + def.field, function (text) { - titleElement.value = text || def.title || " "; - }); - } else { - titleElement.value = def.title || " "; - } - } else { - if (def.field) { - table.modules.localize.bind("columns|" + def.field, function (text) { - self._formatColumnHeaderTitle(titleHolderElement, text || def.title || " "); - }); - } else { - self._formatColumnHeaderTitle(titleHolderElement, def.title || " "); - } - } - - return titleHolderElement; -}; - -Column.prototype._formatColumnHeaderTitle = function (el, title) { - var formatter, contents, params, mockCell; - - if (this.definition.titleFormatter && this.table.modExists("format")) { - - formatter = this.table.modules.format.getFormatter(this.definition.titleFormatter); - - mockCell = { - getValue: function getValue() { - return title; - }, - getElement: function getElement() { - return el; - } - }; - - params = this.definition.titleFormatterParams || {}; - - params = typeof params === "function" ? params() : params; - - contents = formatter.call(this.table.modules.format, mockCell, params); - - switch (typeof contents === 'undefined' ? 'undefined' : _typeof(contents)) { - case "object": - if (contents instanceof Node) { - this.element.appendChild(contents); - } else { - this.element.innerHTML = ""; - console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", contents); - } - break; - case "undefined": - case "null": - this.element.innerHTML = ""; - break; - default: - this.element.innerHTML = contents; - } - } else { - el.innerHTML = title; - } -}; - -//build header element for column group -Column.prototype._buildGroupHeader = function () { - this.element.classList.add("tabulator-col-group"); - this.element.setAttribute("role", "columngroup"); - this.element.setAttribute("aria-title", this.definition.title); - - this.element.appendChild(this.groupElement); -}; - -//flat field lookup -Column.prototype._getFlatData = function (data) { - return data[this.field]; -}; - -//nested field lookup -Column.prototype._getNestedData = function (data) { - var dataObj = data, - structure = this.fieldStructure, - length = structure.length, - output; - - for (var i = 0; i < length; i++) { - - dataObj = dataObj[structure[i]]; - - output = dataObj; - - if (!dataObj) { - break; - } - } - - return output; -}; - -//flat field set -Column.prototype._setFlatData = function (data, value) { - data[this.field] = value; -}; - -//nested field set -Column.prototype._setNesteData = function (data, value) { - var dataObj = data, - structure = this.fieldStructure, - length = structure.length; - - for (var i = 0; i < length; i++) { - - if (i == length - 1) { - dataObj[structure[i]] = value; - } else { - if (!dataObj[structure[i]]) { - dataObj[structure[i]] = {}; - } - - dataObj = dataObj[structure[i]]; - } - } -}; - -//attach column to this group -Column.prototype.attachColumn = function (column) { - var self = this; - - if (self.groupElement) { - self.columns.push(column); - self.groupElement.appendChild(column.getElement()); - } else { - console.warn("Column Warning - Column being attached to another column instead of column group"); - } -}; - -//vertically align header in column -Column.prototype.verticalAlign = function (alignment, height) { - - //calculate height of column header and group holder element - var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : height || this.parent.getHeadersElement().clientHeight; - // var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight; - - this.element.style.height = parentHeight + "px"; - - if (this.isGroup) { - this.groupElement.style.minHeight = parentHeight - this.contentElement.offsetHeight + "px"; - } - - //vertically align cell contents - if (!this.isGroup && alignment !== "top") { - if (alignment === "bottom") { - this.element.style.paddingTop = this.element.clientHeight - this.contentElement.offsetHeight + "px"; - } else { - this.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) / 2 + "px"; - } - } - - this.columns.forEach(function (column) { - column.verticalAlign(alignment); - }); -}; - -//clear vertical alignmenet -Column.prototype.clearVerticalAlign = function () { - this.element.style.paddingTop = ""; - this.element.style.height = ""; - this.element.style.minHeight = ""; - - this.columns.forEach(function (column) { - column.clearVerticalAlign(); - }); -}; - -//// Retreive Column Information //// - -//return column header element -Column.prototype.getElement = function () { - return this.element; -}; - -//return colunm group element -Column.prototype.getGroupElement = function () { - return this.groupElement; -}; - -//return field name -Column.prototype.getField = function () { - return this.field; -}; - -//return the first column in a group -Column.prototype.getFirstColumn = function () { - if (!this.isGroup) { - return this; - } else { - if (this.columns.length) { - return this.columns[0].getFirstColumn(); - } else { - return false; - } - } -}; - -//return the last column in a group -Column.prototype.getLastColumn = function () { - if (!this.isGroup) { - return this; - } else { - if (this.columns.length) { - return this.columns[this.columns.length - 1].getLastColumn(); - } else { - return false; - } - } -}; - -//return all columns in a group -Column.prototype.getColumns = function () { - return this.columns; -}; - -//return all columns in a group -Column.prototype.getCells = function () { - return this.cells; -}; - -//retreive the top column in a group of columns -Column.prototype.getTopColumn = function () { - if (this.parent.isGroup) { - return this.parent.getTopColumn(); - } else { - return this; - } -}; - -//return column definition object -Column.prototype.getDefinition = function (updateBranches) { - var colDefs = []; - - if (this.isGroup && updateBranches) { - this.columns.forEach(function (column) { - colDefs.push(column.getDefinition(true)); - }); - - this.definition.columns = colDefs; - } - - return this.definition; -}; - -//////////////////// Actions //////////////////// - -Column.prototype.checkColumnVisibility = function () { - var visible = false; - - this.columns.forEach(function (column) { - if (column.visible) { - visible = true; - } - }); - - if (visible) { - this.show(); - this.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false); - } else { - this.hide(); - } -}; - -//show column -Column.prototype.show = function (silent, responsiveToggle) { - if (!this.visible) { - this.visible = true; - - this.element.style.display = ""; - - this.table.columnManager._verticalAlignHeaders(); - - if (this.parent.isGroup) { - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function (cell) { - cell.show(); - }); - - if (this.table.options.persistentLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.persistence.save("columns"); - } - - if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible); - } - - if (!silent) { - this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true); - } - } -}; - -//hide column -Column.prototype.hide = function (silent, responsiveToggle) { - if (this.visible) { - this.visible = false; - - this.element.style.display = "none"; - - this.table.columnManager._verticalAlignHeaders(); - - if (this.parent.isGroup) { - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function (cell) { - cell.hide(); - }); - - if (this.table.options.persistentLayout && this.table.modExists("persistence", true)) { - this.table.modules.persistence.save("columns"); - } - - if (!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible); - } - - if (!silent) { - this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false); - } - } -}; - -Column.prototype.matchChildWidths = function () { - var childWidth = 0; - - if (this.contentElement && this.columns.length) { - this.columns.forEach(function (column) { - childWidth += column.getWidth(); - }); - - this.contentElement.style.maxWidth = childWidth - 1 + "px"; - } -}; - -Column.prototype.setWidth = function (width) { - this.widthFixed = true; - this.setWidthActual(width); -}; - -Column.prototype.setWidthActual = function (width) { - - if (isNaN(width)) { - width = Math.floor(this.table.element.clientWidth / 100 * parseInt(width)); - } - - width = Math.max(this.minWidth, width); - - this.width = width; - - this.element.style.width = width ? width + "px" : ""; - - if (!this.isGroup) { - this.cells.forEach(function (cell) { - cell.setWidth(width); - }); - } - - if (this.parent.isGroup) { - this.parent.matchChildWidths(); - } - - //set resizable handles - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.layout(); - } -}; - -Column.prototype.checkCellHeights = function () { - var rows = []; - - this.cells.forEach(function (cell) { - if (cell.row.heightInitialized) { - if (cell.row.getElement().offsetParent !== null) { - rows.push(cell.row); - cell.row.clearCellHeight(); - } else { - cell.row.heightInitialized = false; - } - } - }); - - rows.forEach(function (row) { - row.calcHeight(); - }); - - rows.forEach(function (row) { - row.setCellHeight(); - }); -}; - -Column.prototype.getWidth = function () { - // return this.element.offsetWidth; - return this.width; -}; - -Column.prototype.getHeight = function () { - return this.element.offsetHeight; -}; - -Column.prototype.setMinWidth = function (minWidth) { - this.minWidth = minWidth; - - this.element.style.minWidth = minWidth ? minWidth + "px" : ""; - - this.cells.forEach(function (cell) { - cell.setMinWidth(minWidth); - }); -}; - -Column.prototype.delete = function () { - if (this.isGroup) { - this.columns.forEach(function (column) { - column.delete(); - }); - } - - var cellCount = this.cells.length; - - for (var i = 0; i < cellCount; i++) { - this.cells[0].delete(); - } - - this.element.parentNode.removeChild(this.element); - - this.table.columnManager.deregisterColumn(this); -}; - -//////////////// Cell Management ///////////////// - -//generate cell for this column -Column.prototype.generateCell = function (row) { - var self = this; - - var cell = new Cell(self, row); - - this.cells.push(cell); - - return cell; -}; - -Column.prototype.reinitializeWidth = function (force) { - - this.widthFixed = false; - - //set width if present - if (typeof this.definition.width !== "undefined" && !force) { - this.setWidth(this.definition.width); - } - - //hide header filters to prevent them altering column width - if (this.table.modExists("filter")) { - this.table.modules.filter.hideHeaderFilterElements(); - } - - this.fitToData(); - - //show header filters again after layout is complete - if (this.table.modExists("filter")) { - this.table.modules.filter.showHeaderFilterElements(); - } -}; - -//set column width to maximum cell width -Column.prototype.fitToData = function () { - var self = this; - - if (!this.widthFixed) { - this.element.width = ""; - - self.cells.forEach(function (cell) { - cell.setWidth(""); - }); - } - - var maxWidth = this.element.offsetWidth; - - if (!self.width || !this.widthFixed) { - self.cells.forEach(function (cell) { - var width = cell.getWidth(); - - if (width > maxWidth) { - maxWidth = width; - } - }); - - if (maxWidth) { - self.setWidthActual(maxWidth + 1); - } - } -}; - -Column.prototype.deleteCell = function (cell) { - var index = this.cells.indexOf(cell); - - if (index > -1) { - this.cells.splice(index, 1); - } -}; - -//////////////// Event Bindings ///////////////// - -//////////////// Object Generation ///////////////// -Column.prototype.getComponent = function () { - return new ColumnComponent(this); -}; -var RowManager = function RowManager(table) { - - this.table = table; - this.element = this.createHolderElement(); //containing element - this.tableElement = this.createTableElement(); //table element - this.columnManager = null; //hold column manager object - this.height = 0; //hold height of table element - - this.firstRender = false; //handle first render - this.renderMode = "classic"; //current rendering mode - - this.rows = []; //hold row data objects - this.activeRows = []; //rows currently available to on display in the table - this.activeRowsCount = 0; //count of active rows - - this.displayRows = []; //rows currently on display in the table - this.displayRowsCount = 0; //count of display rows - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.vDomRowHeight = 20; //approximation of row heights for padding - - this.vDomTop = 0; //hold position for first rendered row in the virtual DOM - this.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM - - this.vDomScrollPosTop = 0; //last scroll position of the vDom top; - this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom; - - this.vDomTopPad = 0; //hold value of padding for top of virtual DOM - this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM - - this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go - - this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling - - this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows) - this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin - - this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed - this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed -}; - -//////////////// Setup Functions ///////////////// - -RowManager.prototype.createHolderElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-tableHolder"); - el.setAttribute("tabindex", 0); - - return el; -}; - -RowManager.prototype.createTableElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-table"); - - return el; -}; - -//return containing element -RowManager.prototype.getElement = function () { - return this.element; -}; - -//return table element -RowManager.prototype.getTableElement = function () { - return this.tableElement; -}; - -//return position of row in table -RowManager.prototype.getRowPosition = function (row, active) { - if (active) { - return this.activeRows.indexOf(row); - } else { - return this.rows.indexOf(row); - } -}; - -//link to column manager -RowManager.prototype.setColumnManager = function (manager) { - this.columnManager = manager; -}; - -RowManager.prototype.initialize = function () { - var self = this; - - self.setRenderMode(); - - //initialize manager - self.element.appendChild(self.tableElement); - - self.firstRender = true; - - //scroll header along with table body - self.element.addEventListener("scroll", function () { - var left = self.element.scrollLeft; - - //handle horizontal scrolling - if (self.scrollLeft != left) { - self.columnManager.scrollHorizontal(left); - - if (self.table.options.groupBy) { - self.table.modules.groupRows.scrollHeaders(left); - } - - if (self.table.modExists("columnCalcs")) { - self.table.modules.columnCalcs.scrollHorizontal(left); - } - } - - self.scrollLeft = left; - }); - - //handle virtual dom scrolling - if (this.renderMode === "virtual") { - - self.element.addEventListener("scroll", function () { - var top = self.element.scrollTop; - var dir = self.scrollTop > top; - - //handle verical scrolling - if (self.scrollTop != top) { - self.scrollTop = top; - self.scrollVertical(dir); - - if (self.table.options.ajaxProgressiveLoad == "scroll") { - self.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top); - } - } else { - self.scrollTop = top; - } - }); - } -}; - -////////////////// Row Manipulation ////////////////// - -RowManager.prototype.findRow = function (subject) { - var self = this; - - if ((typeof subject === 'undefined' ? 'undefined' : _typeof(subject)) == "object") { - - if (subject instanceof Row) { - //subject is row element - return subject; - } else if (subject instanceof RowComponent) { - //subject is public row component - return subject._getSelf() || false; - } else if (subject instanceof HTMLElement) { - //subject is a HTML element of the row - var match = self.rows.find(function (row) { - return row.element === subject; - }); - - return match || false; - } - } else if (typeof subject == "undefined" || subject === null) { - return false; - } else { - //subject should be treated as the index of the row - var _match = self.rows.find(function (row) { - return row.data[self.table.options.index] == subject; - }); - - return _match || false; - } - - //catch all for any other type of input - - return false; -}; - -RowManager.prototype.getRowFromPosition = function (position, active) { - if (active) { - return this.activeRows[position]; - } else { - return this.rows[position]; - } -}; - -RowManager.prototype.scrollToRow = function (row, position, ifVisible) { - var _this2 = this; - - var rowIndex = this.getDisplayRows().indexOf(row), - rowEl = row.getElement(), - rowTop, - offset = 0; - - return new Promise(function (resolve, reject) { - if (rowIndex > -1) { - - if (typeof position === "undefined") { - position = _this2.table.options.scrollToRowPosition; - } - - if (typeof ifVisible === "undefined") { - ifVisible = _this2.table.options.scrollToRowIfVisible; - } - - if (position === "nearest") { - switch (_this2.renderMode) { - case "classic": - rowTop = Tabulator.prototype.helpers.elOffset(rowEl).top; - position = Math.abs(_this2.element.scrollTop - rowTop) > Math.abs(_this2.element.scrollTop + _this2.element.clientHeight - rowTop) ? "bottom" : "top"; - break; - case "virtual": - position = Math.abs(_this2.vDomTop - rowIndex) > Math.abs(_this2.vDomBottom - rowIndex) ? "bottom" : "top"; - break; - } - } - - //check row visibility - if (!ifVisible) { - if (Tabulator.prototype.helpers.elVisible(rowEl)) { - offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this2.element).top; - - if (offset > 0 && offset < _this2.element.clientHeight - rowEl.offsetHeight) { - return false; - } - } - } - - //scroll to row - switch (_this2.renderMode) { - case "classic": - _this2.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(_this2.element).top + _this2.element.scrollTop; - break; - case "virtual": - _this2._virtualRenderFill(rowIndex, true); - break; - } - - //align to correct position - switch (position) { - case "middle": - case "center": - _this2.element.scrollTop = _this2.element.scrollTop - _this2.element.clientHeight / 2; - break; - - case "bottom": - _this2.element.scrollTop = _this2.element.scrollTop - _this2.element.clientHeight + rowEl.offsetHeight; - break; - } - - resolve(); - } else { - console.warn("Scroll Error - Row not visible"); - reject("Scroll Error - Row not visible"); - } - }); -}; - -////////////////// Data Handling ////////////////// - -RowManager.prototype.setData = function (data, renderInPosition) { - var _this3 = this; - - var self = this; - - return new Promise(function (resolve, reject) { - if (renderInPosition && _this3.getDisplayRows().length) { - if (self.table.options.pagination) { - self._setDataActual(data, true); - } else { - _this3.reRenderInPosition(function () { - self._setDataActual(data); - }); - } - } else { - _this3.resetScroll(); - _this3._setDataActual(data); - } - - resolve(); - }); -}; - -RowManager.prototype._setDataActual = function (data, renderInPosition) { - var self = this; - - self.table.options.dataLoading.call(this.table, data); - - self.rows.forEach(function (row) { - row.wipe(); - }); - - self.rows = []; - - if (this.table.options.history && this.table.modExists("history")) { - this.table.modules.history.clear(); - } - - if (Array.isArray(data)) { - - if (this.table.modExists("selectRow")) { - this.table.modules.selectRow.clearSelectionData(); - } - - data.forEach(function (def, i) { - if (def && (typeof def === 'undefined' ? 'undefined' : _typeof(def)) === "object") { - var row = new Row(def, self); - self.rows.push(row); - } else { - console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:", def); - } - }); - - self.table.options.dataLoaded.call(this.table, data); - - self.refreshActiveData(false, false, renderInPosition); - } else { - console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", typeof data === 'undefined' ? 'undefined' : _typeof(data), "\nData: ", data); - } -}; - -RowManager.prototype.deleteRow = function (row) { - var allIndex = this.rows.indexOf(row), - activeIndex = this.activeRows.indexOf(row); - - if (activeIndex > -1) { - this.activeRows.splice(activeIndex, 1); - } - - if (allIndex > -1) { - this.rows.splice(allIndex, 1); - } - - this.setActiveRows(this.activeRows); - - this.displayRowIterator(function (rows) { - var displayIndex = rows.indexOf(row); - - if (displayIndex > -1) { - rows.splice(displayIndex, 1); - } - }); - - this.reRenderInPosition(); - - this.table.options.rowDeleted.call(this.table, row.getComponent()); - - this.table.options.dataEdited.call(this.table, this.getData()); - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.updateGroupRows(true); - } else if (this.table.options.pagination && this.table.modExists("page")) { - this.refreshActiveData(false, false, true); - } else { - if (this.table.options.pagination && this.table.modExists("page")) { - this.refreshActiveData("page"); - } - } -}; - -RowManager.prototype.addRow = function (data, pos, index, blockRedraw) { - - var row = this.addRowActual(data, pos, index, blockRedraw); - - if (this.table.options.history && this.table.modExists("history")) { - this.table.modules.history.action("rowAdd", row, { data: data, pos: pos, index: index }); - } - - return row; -}; - -//add multiple rows -RowManager.prototype.addRows = function (data, pos, index) { - var _this4 = this; - - var self = this, - length = 0, - rows = []; - - return new Promise(function (resolve, reject) { - pos = _this4.findAddRowPos(pos); - - if (!Array.isArray(data)) { - data = [data]; - } - - length = data.length - 1; - - if (typeof index == "undefined" && pos || typeof index !== "undefined" && !pos) { - data.reverse(); - } - - data.forEach(function (item, i) { - var row = self.addRow(item, pos, index, true); - rows.push(row); - }); - - if (_this4.table.options.groupBy && _this4.table.modExists("groupRows")) { - _this4.table.modules.groupRows.updateGroupRows(true); - } else if (_this4.table.options.pagination && _this4.table.modExists("page")) { - _this4.refreshActiveData(false, false, true); - } else { - _this4.reRenderInPosition(); - } - - //recalc column calculations if present - if (_this4.table.modExists("columnCalcs")) { - _this4.table.modules.columnCalcs.recalc(_this4.table.rowManager.activeRows); - } - - resolve(rows); - }); -}; - -RowManager.prototype.findAddRowPos = function (pos) { - if (typeof pos === "undefined") { - pos = this.table.options.addRowPos; - } - - if (pos === "pos") { - pos = true; - } - - if (pos === "bottom") { - pos = false; - } - - return pos; -}; - -RowManager.prototype.addRowActual = function (data, pos, index, blockRedraw) { - var row = data instanceof Row ? data : new Row(data || {}, this), - top = this.findAddRowPos(pos), - dispRows; - - if (!index && this.table.options.pagination && this.table.options.paginationAddRow == "page") { - dispRows = this.getDisplayRows(); - - if (top) { - if (dispRows.length) { - index = dispRows[0]; - } else { - if (this.activeRows.length) { - index = this.activeRows[this.activeRows.length - 1]; - top = false; - } - } - } else { - if (dispRows.length) { - index = dispRows[dispRows.length - 1]; - top = dispRows.length < this.table.modules.page.getPageSize() ? false : true; - } - } - } - - if (index) { - index = this.findRow(index); - } - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.assignRowToGroup(row); - - var groupRows = row.getGroup().rows; - - if (groupRows.length > 1) { - - if (!index || index && groupRows.indexOf(index) == -1) { - if (top) { - if (groupRows[0] !== row) { - index = groupRows[0]; - this._moveRowInArray(row.getGroup().rows, row, index, top); - } - } else { - if (groupRows[groupRows.length - 1] !== row) { - index = groupRows[groupRows.length - 1]; - this._moveRowInArray(row.getGroup().rows, row, index, top); - } - } - } else { - this._moveRowInArray(row.getGroup().rows, row, index, top); - } - } - } - - if (index) { - var allIndex = this.rows.indexOf(index), - activeIndex = this.activeRows.indexOf(index); - - this.displayRowIterator(function (rows) { - var displayIndex = rows.indexOf(index); - - if (displayIndex > -1) { - rows.splice(top ? displayIndex : displayIndex + 1, 0, row); - } - }); - - if (activeIndex > -1) { - this.activeRows.splice(top ? activeIndex : activeIndex + 1, 0, row); - } - - if (allIndex > -1) { - this.rows.splice(top ? allIndex : allIndex + 1, 0, row); - } - } else { - - if (top) { - - this.displayRowIterator(function (rows) { - rows.unshift(row); - }); - - this.activeRows.unshift(row); - this.rows.unshift(row); - } else { - this.displayRowIterator(function (rows) { - rows.push(row); - }); - - this.activeRows.push(row); - this.rows.push(row); - } - } - - this.setActiveRows(this.activeRows); - - this.table.options.rowAdded.call(this.table, row.getComponent()); - - this.table.options.dataEdited.call(this.table, this.getData()); - - if (!blockRedraw) { - this.reRenderInPosition(); - } - - return row; -}; - -RowManager.prototype.moveRow = function (from, to, after) { - if (this.table.options.history && this.table.modExists("history")) { - this.table.modules.history.action("rowMove", from, { pos: this.getRowPosition(from), to: to, after: after }); - } - - this.moveRowActual(from, to, after); - - this.table.options.rowMoved.call(this.table, from.getComponent()); -}; - -RowManager.prototype.moveRowActual = function (from, to, after) { - var self = this; - this._moveRowInArray(this.rows, from, to, after); - this._moveRowInArray(this.activeRows, from, to, after); - - this.displayRowIterator(function (rows) { - self._moveRowInArray(rows, from, to, after); - }); - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - var toGroup = to.getGroup(); - var fromGroup = from.getGroup(); - - if (toGroup === fromGroup) { - this._moveRowInArray(toGroup.rows, from, to, after); - } else { - if (fromGroup) { - fromGroup.removeRow(from); - } - - toGroup.insertRow(from, to, after); - } - } -}; - -RowManager.prototype._moveRowInArray = function (rows, from, to, after) { - var fromIndex, toIndex, start, end; - - if (from !== to) { - - fromIndex = rows.indexOf(from); - - if (fromIndex > -1) { - - rows.splice(fromIndex, 1); - - toIndex = rows.indexOf(to); - - if (toIndex > -1) { - - if (after) { - rows.splice(toIndex + 1, 0, from); - } else { - rows.splice(toIndex, 0, from); - } - } else { - rows.splice(fromIndex, 0, from); - } - } - - //restyle rows - if (rows === this.getDisplayRows()) { - - start = fromIndex < toIndex ? fromIndex : toIndex; - end = toIndex > fromIndex ? toIndex : fromIndex + 1; - - for (var i = start; i <= end; i++) { - if (rows[i]) { - this.styleRow(rows[i], i); - } - } - } - } -}; - -RowManager.prototype.clearData = function () { - this.setData([]); -}; - -RowManager.prototype.getRowIndex = function (row) { - return this.findRowIndex(row, this.rows); -}; - -RowManager.prototype.getDisplayRowIndex = function (row) { - var index = this.getDisplayRows().indexOf(row); - return index > -1 ? index : false; -}; - -RowManager.prototype.nextDisplayRow = function (row, rowOnly) { - var index = this.getDisplayRowIndex(row), - nextRow = false; - - if (index !== false && index < this.displayRowsCount - 1) { - nextRow = this.getDisplayRows()[index + 1]; - } - - if (nextRow && (!(nextRow instanceof Row) || nextRow.type != "row")) { - return this.nextDisplayRow(nextRow, rowOnly); - } - - return nextRow; -}; - -RowManager.prototype.prevDisplayRow = function (row, rowOnly) { - var index = this.getDisplayRowIndex(row), - prevRow = false; - - if (index) { - prevRow = this.getDisplayRows()[index - 1]; - } - - if (prevRow && (!(prevRow instanceof Row) || prevRow.type != "row")) { - return this.prevDisplayRow(prevRow, rowOnly); - } - - return prevRow; -}; - -RowManager.prototype.findRowIndex = function (row, list) { - var rowIndex; - - row = this.findRow(row); - - if (row) { - rowIndex = list.indexOf(row); - - if (rowIndex > -1) { - return rowIndex; - } - } - - return false; -}; - -RowManager.prototype.getData = function (active, transform) { - var self = this, - output = []; - - var rows = active ? self.activeRows : self.rows; - - rows.forEach(function (row) { - output.push(row.getData(transform || "data")); - }); - - return output; -}; - -RowManager.prototype.getHtml = function (active) { - var data = this.getData(active), - columns = [], - header = "", - body = "", - table = ""; - - //build header row - this.table.columnManager.getColumns().forEach(function (column) { - var def = column.getDefinition(); - - if (column.visible && !def.hideInHtml) { - header += '' + (def.title || "") + ''; - columns.push(column); - } - }); - - //build body rows - data.forEach(function (rowData) { - var row = ""; - - columns.forEach(function (column) { - var value = column.getFieldValue(rowData); - - if (typeof value === "undefined" || value === null) { - value = ":"; - } - - row += '' + value + ''; - }); - - body += '' + row + ''; - }); - - //build table - table = '\n\t\t\n\t\t' + header + '\n\t\t\n\t\t' + body + '\n\t\t
'; - - return table; -}; - -RowManager.prototype.getComponents = function (active) { - var self = this, - output = []; - - var rows = active ? self.activeRows : self.rows; - - rows.forEach(function (row) { - output.push(row.getComponent()); - }); - - return output; -}; - -RowManager.prototype.getDataCount = function (active) { - return active ? this.rows.length : this.activeRows.length; -}; - -RowManager.prototype._genRemoteRequest = function () { - var self = this, - table = self.table, - options = table.options, - params = {}; - - if (table.modExists("page")) { - //set sort data if defined - if (options.ajaxSorting) { - var sorters = self.table.modules.sort.getSort(); - - sorters.forEach(function (item) { - delete item.column; - }); - - params[self.table.modules.page.paginationDataSentNames.sorters] = sorters; - } - - //set filter data if defined - if (options.ajaxFiltering) { - var filters = self.table.modules.filter.getFilters(true, true); - - params[self.table.modules.page.paginationDataSentNames.filters] = filters; - } - - self.table.modules.ajax.setParams(params, true); - } - - table.modules.ajax.sendRequest().then(function (data) { - self.setData(data); - }).catch(function (e) {}); -}; - -//choose the path to refresh data after a filter update -RowManager.prototype.filterRefresh = function () { - var table = this.table, - options = table.options, - left = this.scrollLeft; - - if (options.ajaxFiltering) { - if (options.pagination == "remote" && table.modExists("page")) { - table.modules.page.reset(true); - table.modules.page.setPage(1); - } else if (options.ajaxProgressiveLoad) { - table.modules.ajax.loadData(); - } else { - //assume data is url, make ajax call to url to get data - this._genRemoteRequest(); - } - } else { - this.refreshActiveData("filter"); - } - - this.scrollHorizontal(left); -}; - -//choose the path to refresh data after a sorter update -RowManager.prototype.sorterRefresh = function () { - var table = this.table, - options = this.table.options, - left = this.scrollLeft; - - if (options.ajaxSorting) { - if ((options.pagination == "remote" || options.progressiveLoad) && table.modExists("page")) { - table.modules.page.reset(true); - table.modules.page.setPage(1); - } else if (options.ajaxProgressiveLoad) { - table.modules.ajax.loadData(); - } else { - //assume data is url, make ajax call to url to get data - this._genRemoteRequest(); - } - } else { - this.refreshActiveData("sort"); - } - - this.scrollHorizontal(left); -}; - -RowManager.prototype.scrollHorizontal = function (left) { - this.scrollLeft = left; - this.element.scrollLeft = left; - - if (this.table.options.groupBy) { - this.table.modules.groupRows.scrollHeaders(left); - } - - if (this.table.modExists("columnCalcs")) { - this.table.modules.columnCalcs.scrollHorizontal(left); - } -}; - -//set active data set -RowManager.prototype.refreshActiveData = function (stage, skipStage, renderInPosition) { - var self = this, - table = this.table, - displayIndex; - - if (!stage) { - stage = "all"; - } - - if (table.options.selectable && !table.options.selectablePersistence && table.modExists("selectRow")) { - table.modules.selectRow.deselectRows(); - } - - //cascade through data refresh stages - switch (stage) { - case "all": - - case "filter": - if (!skipStage) { - if (table.modExists("filter")) { - self.setActiveRows(table.modules.filter.filter(self.rows)); - } else { - self.setActiveRows(self.rows.slice(0)); - } - } else { - skipStage = false; - } - - case "sort": - if (!skipStage) { - if (table.modExists("sort")) { - table.modules.sort.sort(); - } - } else { - skipStage = false; - } - - //generic stage to allow for pipeline trigger after the data manipulation stage - case "display": - this.resetDisplayRows(); - - case "freeze": - if (!skipStage) { - if (this.table.modExists("frozenRows")) { - if (table.modules.frozenRows.isFrozen()) { - if (!table.modules.frozenRows.getDisplayIndex()) { - table.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.frozenRows.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - table.modules.frozenRows.setDisplayIndex(displayIndex); - } - } - } - } else { - skipStage = false; - } - - case "group": - if (!skipStage) { - if (table.options.groupBy && table.modExists("groupRows")) { - - if (!table.modules.groupRows.getDisplayIndex()) { - table.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.groupRows.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - table.modules.groupRows.setDisplayIndex(displayIndex); - } - } - } else { - skipStage = false; - } - - case "tree": - - if (!skipStage) { - if (table.options.dataTree && table.modExists("dataTree")) { - if (!table.modules.dataTree.getDisplayIndex()) { - table.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.dataTree.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - table.modules.dataTree.setDisplayIndex(displayIndex); - } - } - } else { - skipStage = false; - } - - if (table.options.pagination && table.modExists("page") && !renderInPosition) { - if (table.modules.page.getMode() == "local") { - table.modules.page.reset(); - } - } - - case "page": - if (!skipStage) { - if (table.options.pagination && table.modExists("page")) { - - if (!table.modules.page.getDisplayIndex()) { - table.modules.page.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.page.getDisplayIndex(); - - if (table.modules.page.getMode() == "local") { - table.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length); - } - - displayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if (displayIndex !== true) { - table.modules.page.setDisplayIndex(displayIndex); - } - } - } else { - skipStage = false; - } - } - - if (Tabulator.prototype.helpers.elVisible(self.element)) { - if (renderInPosition) { - self.reRenderInPosition(); - } else { - self.renderTable(); - if (table.options.layoutColumnsOnNewData) { - self.table.columnManager.redraw(true); - } - } - } - - if (table.modExists("columnCalcs")) { - table.modules.columnCalcs.recalc(this.activeRows); - } -}; - -RowManager.prototype.setActiveRows = function (activeRows) { - this.activeRows = activeRows; - this.activeRowsCount = this.activeRows.length; -}; - -//reset display rows array -RowManager.prototype.resetDisplayRows = function () { - this.displayRows = []; - - this.displayRows.push(this.activeRows.slice(0)); - - this.displayRowsCount = this.displayRows[0].length; - - if (this.table.modExists("frozenRows")) { - this.table.modules.frozenRows.setDisplayIndex(0); - } - - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.groupRows.setDisplayIndex(0); - } - - if (this.table.options.pagination && this.table.modExists("page")) { - this.table.modules.page.setDisplayIndex(0); - } -}; - -RowManager.prototype.getNextDisplayIndex = function () { - return this.displayRows.length; -}; - -//set display row pipeline data -RowManager.prototype.setDisplayRows = function (displayRows, index) { - - var output = true; - - if (index && typeof this.displayRows[index] != "undefined") { - this.displayRows[index] = displayRows; - output = true; - } else { - this.displayRows.push(displayRows); - output = index = this.displayRows.length - 1; - } - - if (index == this.displayRows.length - 1) { - this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length; - } - - return output; -}; - -RowManager.prototype.getDisplayRows = function (index) { - if (typeof index == "undefined") { - return this.displayRows.length ? this.displayRows[this.displayRows.length - 1] : []; - } else { - return this.displayRows[index] || []; - } -}; - -//repeat action accross display rows -RowManager.prototype.displayRowIterator = function (callback) { - this.displayRows.forEach(callback); - - this.displayRowsCount = this.displayRows[this.displayRows.length - 1].length; -}; - -//return only actual rows (not group headers etc) -RowManager.prototype.getRows = function () { - return this.rows; -}; - -///////////////// Table Rendering ///////////////// - -//trigger rerender of table in current position -RowManager.prototype.reRenderInPosition = function (callback) { - if (this.getRenderMode() == "virtual") { - - var scrollTop = this.element.scrollTop; - var topRow = false; - var topOffset = false; - - var left = this.scrollLeft; - - var rows = this.getDisplayRows(); - - for (var i = this.vDomTop; i <= this.vDomBottom; i++) { - - if (rows[i]) { - var diff = scrollTop - rows[i].getElement().offsetTop; - - if (topOffset === false || Math.abs(diff) < topOffset) { - topOffset = diff; - topRow = i; - } else { - break; - } - } - } - - if (callback) { - callback(); - } - - this._virtualRenderFill(topRow === false ? this.displayRowsCount - 1 : topRow, true, topOffset || 0); - - this.scrollHorizontal(left); - } else { - this.renderTable(); - } -}; - -RowManager.prototype.setRenderMode = function () { - if ((this.table.element.clientHeight || this.table.options.height) && this.table.options.virtualDom) { - this.renderMode = "virtual"; - } else { - this.renderMode = "classic"; - } -}; - -RowManager.prototype.getRenderMode = function () { - return this.renderMode; -}; - -RowManager.prototype.renderTable = function () { - var self = this; - - self.table.options.renderStarted.call(this.table); - - self.element.scrollTop = 0; - - switch (self.renderMode) { - case "classic": - self._simpleRender(); - break; - - case "virtual": - self._virtualRenderFill(); - break; - } - - if (self.firstRender) { - if (self.displayRowsCount) { - self.firstRender = false; - self.table.modules.layout.layout(); - } else { - self.renderEmptyScroll(); - } - } - - if (self.table.modExists("frozenColumns")) { - self.table.modules.frozenColumns.layout(); - } - - if (!self.displayRowsCount) { - if (self.table.options.placeholder) { - - if (this.renderMode) { - self.table.options.placeholder.setAttribute("tabulator-render-mode", this.renderMode); - } - - self.getElement().appendChild(self.table.options.placeholder); - } - } - - self.table.options.renderComplete.call(this.table); -}; - -//simple render on heightless table -RowManager.prototype._simpleRender = function () { - var self = this, - element = this.tableElement; - - self._clearVirtualDom(); - - if (self.displayRowsCount) { - - var onlyGroupHeaders = true; - - self.getDisplayRows().forEach(function (row, index) { - self.styleRow(row, index); - element.appendChild(row.getElement()); - row.initialize(true); - - if (row.type !== "group") { - onlyGroupHeaders = false; - } - }); - - if (onlyGroupHeaders) { - element.style.minWidth = self.table.columnManager.getWidth() + "px"; - } - } else { - self.renderEmptyScroll(); - } -}; - -//show scrollbars on empty table div -RowManager.prototype.renderEmptyScroll = function () { - this.tableElement.style.minWidth = this.table.columnManager.getWidth(); - this.tableElement.style.minHeight = "1px"; - // this.tableElement.style.visibility = "hidden"; -}; - -RowManager.prototype._clearVirtualDom = function () { - var element = this.tableElement; - - if (this.table.options.placeholder && this.table.options.placeholder.parentNode) { - this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder); - } - - // element.children.detach(); - while (element.firstChild) { - element.removeChild(element.firstChild); - }element.style.paddingTop = ""; - element.style.paddingBottom = ""; - element.style.minWidth = ""; - element.style.minHeight = ""; - element.style.visibility = ""; - - this.scrollTop = 0; - this.scrollLeft = 0; - this.vDomTop = 0; - this.vDomBottom = 0; - this.vDomTopPad = 0; - this.vDomBottomPad = 0; -}; - -RowManager.prototype.styleRow = function (row, index) { - var rowEl = row.getElement(); - - if (index % 2) { - rowEl.classList.add("tabulator-row-even"); - rowEl.classList.remove("tabulator-row-odd"); - } else { - rowEl.classList.add("tabulator-row-odd"); - rowEl.classList.remove("tabulator-row-even"); - } -}; - -//full virtual render -RowManager.prototype._virtualRenderFill = function (position, forceMove, offset) { - var self = this, - element = self.tableElement, - holder = self.element, - topPad = 0, - rowsHeight = 0, - topPadHeight = 0, - i = 0, - onlyGroupHeaders = true, - rows = self.getDisplayRows(); - - position = position || 0; - - offset = offset || 0; - - if (!position) { - self._clearVirtualDom(); - } else { - // element.children().detach(); - while (element.firstChild) { - element.removeChild(element.firstChild); - } //check if position is too close to bottom of table - var heightOccpied = (self.displayRowsCount - position + 1) * self.vDomRowHeight; - - if (heightOccpied < self.height) { - position -= Math.ceil((self.height - heightOccpied) / self.vDomRowHeight); - - if (position < 0) { - position = 0; - } - } - - //calculate initial pad - topPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position); - position -= topPad; - } - - if (self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)) { - - self.vDomTop = position; - - self.vDomBottom = position - 1; - - while ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount - 1) { - var index = self.vDomBottom + 1, - row = rows[index]; - - self.styleRow(row, index); - - element.appendChild(row.getElement()); - if (!row.initialized) { - row.initialize(true); - } else { - if (!row.heightInitialized) { - row.normalizeHeight(true); - } - } - - if (i < topPad) { - topPadHeight += row.getHeight(); - } else { - rowsHeight += row.getHeight(); - } - - if (row.type !== "group") { - onlyGroupHeaders = false; - } - - self.vDomBottom++; - i++; - } - - if (!position) { - this.vDomTopPad = 0; - //adjust rowheight to match average of rendered elements - self.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i); - self.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom - 1); - - self.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height; - } else { - self.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : self.vDomRowHeight * this.vDomTop + offset; - self.vDomBottomPad = self.vDomBottom == self.displayRowsCount - 1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0); - } - - element.style.paddingTop = self.vDomTopPad + "px"; - element.style.paddingBottom = self.vDomBottomPad + "px"; - - if (forceMove) { - this.scrollTop = self.vDomTopPad + topPadHeight + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0); - } - - this.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height); - - //adjust for horizontal scrollbar if present - if (this.element.scrollWidth > this.element.offsetWidth) { - this.scrollTop += this.element.offsetHeight - this.element.clientHeight; - } - - this.vDomScrollPosTop = this.scrollTop; - this.vDomScrollPosBottom = this.scrollTop; - - holder.scrollTop = this.scrollTop; - - element.style.minWidth = onlyGroupHeaders ? self.table.columnManager.getWidth() + "px" : ""; - - if (self.table.options.groupBy) { - if (self.table.modules.layout.getMode() != "fitDataFill" && self.displayRowsCount == self.table.modules.groupRows.countGroups()) { - self.tableElement.style.minWidth = self.table.columnManager.getWidth(); - } - } - } else { - this.renderEmptyScroll(); - } -}; - -//handle vertical scrolling -RowManager.prototype.scrollVertical = function (dir) { - var topDiff = this.scrollTop - this.vDomScrollPosTop; - var bottomDiff = this.scrollTop - this.vDomScrollPosBottom; - var margin = this.vDomWindowBuffer * 2; - - if (-topDiff > margin || bottomDiff > margin) { - //if big scroll redraw table; - var left = this.scrollLeft; - this._virtualRenderFill(Math.floor(this.element.scrollTop / this.element.scrollHeight * this.displayRowsCount)); - this.scrollHorizontal(left); - } else { - - if (dir) { - //scrolling up - if (topDiff < 0) { - this._addTopRow(-topDiff); - } - - if (topDiff < 0) { - - //hide bottom row if needed - if (this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer) { - this._removeBottomRow(-bottomDiff); - } - } - } else { - //scrolling down - if (topDiff >= 0) { - - //hide top row if needed - if (this.scrollTop > this.vDomWindowBuffer) { - this._removeTopRow(topDiff); - } - } - - if (bottomDiff >= 0) { - this._addBottomRow(bottomDiff); - } - } - } -}; - -RowManager.prototype._addTopRow = function (topDiff) { - var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - var table = this.tableElement, - rows = this.getDisplayRows(); - - if (this.vDomTop) { - var index = this.vDomTop - 1, - topRow = rows[index], - topRowHeight = topRow.getHeight() || this.vDomRowHeight; - - //hide top row if needed - if (topDiff >= topRowHeight) { - this.styleRow(topRow, index); - table.insertBefore(topRow.getElement(), table.firstChild); - if (!topRow.initialized || !topRow.heightInitialized) { - this.vDomTopNewRows.push(topRow); - - if (!topRow.heightInitialized) { - topRow.clearCellHeight(); - } - } - topRow.initialize(); - - this.vDomTopPad -= topRowHeight; - - if (this.vDomTopPad < 0) { - this.vDomTopPad = index * this.vDomRowHeight; - } - - if (!index) { - this.vDomTopPad = 0; - } - - table.style.paddingTop = this.vDomTopPad + "px"; - this.vDomScrollPosTop -= topRowHeight; - this.vDomTop--; - } - - topDiff = -(this.scrollTop - this.vDomScrollPosTop); - - if (i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop - 1].getHeight() || this.vDomRowHeight)) { - this._addTopRow(topDiff, i + 1); - } else { - this._quickNormalizeRowHeight(this.vDomTopNewRows); - } - } -}; - -RowManager.prototype._removeTopRow = function (topDiff) { - var table = this.tableElement, - topRow = this.getDisplayRows()[this.vDomTop], - topRowHeight = topRow.getHeight() || this.vDomRowHeight; - - if (topDiff >= topRowHeight) { - - var rowEl = topRow.getElement(); - rowEl.parentNode.removeChild(rowEl); - - this.vDomTopPad += topRowHeight; - table.style.paddingTop = this.vDomTopPad + "px"; - this.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer; - this.vDomTop++; - - topDiff = this.scrollTop - this.vDomScrollPosTop; - - this._removeTopRow(topDiff); - } -}; - -RowManager.prototype._addBottomRow = function (bottomDiff) { - var i = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - - var table = this.tableElement, - rows = this.getDisplayRows(); - - if (this.vDomBottom < this.displayRowsCount - 1) { - var index = this.vDomBottom + 1, - bottomRow = rows[index], - bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight; - - //hide bottom row if needed - if (bottomDiff >= bottomRowHeight) { - this.styleRow(bottomRow, index); - table.appendChild(bottomRow.getElement()); - - if (!bottomRow.initialized || !bottomRow.heightInitialized) { - this.vDomBottomNewRows.push(bottomRow); - - if (!bottomRow.heightInitialized) { - bottomRow.clearCellHeight(); - } - } - - bottomRow.initialize(); - - this.vDomBottomPad -= bottomRowHeight; - - if (this.vDomBottomPad < 0 || index == this.displayRowsCount - 1) { - this.vDomBottomPad = 0; - } - - table.style.paddingBottom = this.vDomBottomPad + "px"; - this.vDomScrollPosBottom += bottomRowHeight; - this.vDomBottom++; - } - - bottomDiff = this.scrollTop - this.vDomScrollPosBottom; - - if (i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount - 1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)) { - this._addBottomRow(bottomDiff, i + 1); - } else { - this._quickNormalizeRowHeight(this.vDomBottomNewRows); - } - } -}; - -RowManager.prototype._removeBottomRow = function (bottomDiff) { - var table = this.tableElement, - bottomRow = this.getDisplayRows()[this.vDomBottom], - bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight; - - if (bottomDiff >= bottomRowHeight) { - - var rowEl = bottomRow.getElement(); - - if (rowEl.parentNode) { - rowEl.parentNode.removeChild(rowEl); - } - - this.vDomBottomPad += bottomRowHeight; - - if (this.vDomBottomPad < 0) { - this.vDomBottomPad = 0; - } - - table.style.paddingBottom = this.vDomBottomPad + "px"; - this.vDomScrollPosBottom -= bottomRowHeight; - this.vDomBottom--; - - bottomDiff = -(this.scrollTop - this.vDomScrollPosBottom); - - this._removeBottomRow(bottomDiff); - } -}; - -RowManager.prototype._quickNormalizeRowHeight = function (rows) { - rows.forEach(function (row) { - row.calcHeight(); - }); - - rows.forEach(function (row) { - row.setCellHeight(); - }); - - rows.length = 0; -}; - -//normalize height of active rows -RowManager.prototype.normalizeHeight = function () { - this.activeRows.forEach(function (row) { - row.normalizeHeight(); - }); -}; - -//adjust the height of the table holder to fit in the Tabulator element -RowManager.prototype.adjustTableSize = function () { - - if (this.renderMode === "virtual") { - this.height = this.element.clientHeight; - this.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height; - - var otherHeight = this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0); - - this.element.style.minHeight = "calc(100% - " + otherHeight + "px)"; - this.element.style.height = "calc(100% - " + otherHeight + "px)"; - this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)"; - } -}; - -//renitialize all rows -RowManager.prototype.reinitialize = function () { - this.rows.forEach(function (row) { - row.reinitialize(); - }); -}; - -//redraw table -RowManager.prototype.redraw = function (force) { - var pos = 0, - left = this.scrollLeft; - - this.adjustTableSize(); - - if (!force) { - - if (self.renderMode == "classic") { - - if (self.table.options.groupBy) { - self.refreshActiveData("group", false, false); - } else { - this._simpleRender(); - } - } else { - this.reRenderInPosition(); - this.scrollHorizontal(left); - } - - if (!this.displayRowsCount) { - if (this.table.options.placeholder) { - this.getElement().appendChild(this.table.options.placeholder); - } - } - } else { - this.renderTable(); - } -}; - -RowManager.prototype.resetScroll = function () { - this.element.scrollLeft = 0; - this.element.scrollTop = 0; - - if (this.table.browser === "ie") { - var event = document.createEvent("Event"); - event.initEvent("scroll", false, true); - this.element.dispatchEvent(event); - } else { - this.element.dispatchEvent(new Event('scroll')); - } -}; - -//public row object -var RowComponent = function RowComponent(row) { - this._row = row; -}; - -RowComponent.prototype.getData = function (transform) { - return this._row.getData(transform); -}; - -RowComponent.prototype.getElement = function () { - return this._row.getElement(); -}; - -RowComponent.prototype.getCells = function () { - var cells = []; - - this._row.getCells().forEach(function (cell) { - cells.push(cell.getComponent()); - }); - - return cells; -}; - -RowComponent.prototype.getCell = function (column) { - var cell = this._row.getCell(column); - return cell ? cell.getComponent() : false; -}; - -RowComponent.prototype.getIndex = function () { - return this._row.getData("data")[this._row.table.options.index]; -}; - -RowComponent.prototype.getPosition = function (active) { - return this._row.table.rowManager.getRowPosition(this._row, active); -}; - -RowComponent.prototype.delete = function () { - return this._row.delete(); -}; - -RowComponent.prototype.scrollTo = function () { - return this._row.table.rowManager.scrollToRow(this._row); -}; - -RowComponent.prototype.update = function (data) { - return this._row.updateData(data); -}; - -RowComponent.prototype.normalizeHeight = function () { - this._row.normalizeHeight(true); -}; - -RowComponent.prototype.select = function () { - this._row.table.modules.selectRow.selectRows(this._row); -}; - -RowComponent.prototype.deselect = function () { - this._row.table.modules.selectRow.deselectRows(this._row); -}; - -RowComponent.prototype.toggleSelect = function () { - this._row.table.modules.selectRow.toggleRow(this._row); -}; - -RowComponent.prototype.isSelected = function () { - return this._row.table.modules.selectRow.isRowSelected(this._row); -}; - -RowComponent.prototype._getSelf = function () { - return this._row; -}; - -RowComponent.prototype.freeze = function () { - if (this._row.table.modExists("frozenRows", true)) { - this._row.table.modules.frozenRows.freezeRow(this._row); - } -}; - -RowComponent.prototype.unfreeze = function () { - if (this._row.table.modExists("frozenRows", true)) { - this._row.table.modules.frozenRows.unfreezeRow(this._row); - } -}; - -RowComponent.prototype.treeCollapse = function () { - if (this._row.table.modExists("dataTree", true)) { - this._row.table.modules.dataTree.collapseRow(this._row); - } -}; - -RowComponent.prototype.treeExpand = function () { - if (this._row.table.modExists("dataTree", true)) { - this._row.table.modules.dataTree.expandRow(this._row); - } -}; - -RowComponent.prototype.treeToggle = function () { - if (this._row.table.modExists("dataTree", true)) { - this._row.table.modules.dataTree.toggleRow(this._row); - } -}; - -RowComponent.prototype.getTreeParent = function () { - if (this._row.table.modExists("dataTree", true)) { - return this._row.table.modules.dataTree.getTreeParent(this._row); - } - - return false; -}; - -RowComponent.prototype.getTreeChildren = function () { - if (this._row.table.modExists("dataTree", true)) { - return this._row.table.modules.dataTree.getTreeChildren(this._row); - } - - return false; -}; - -RowComponent.prototype.reformat = function () { - return this._row.reinitialize(); -}; - -RowComponent.prototype.getGroup = function () { - return this._row.getGroup().getComponent(); -}; - -RowComponent.prototype.getTable = function () { - return this._row.table; -}; - -RowComponent.prototype.getNextRow = function () { - return this._row.nextRow(); -}; - -RowComponent.prototype.getPrevRow = function () { - return this._row.prevRow(); -}; - -var Row = function Row(data, parent) { - this.table = parent.table; - this.parent = parent; - this.data = {}; - this.type = "row"; //type of element - this.element = this.createElement(); - this.modules = {}; //hold module variables; - this.cells = []; - this.height = 0; //hold element height - this.outerHeight = 0; //holde lements outer height - this.initialized = false; //element has been rendered - this.heightInitialized = false; //element has resized cells to fit - - this.setData(data); - this.generateElement(); -}; - -Row.prototype.createElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - el.setAttribute("role", "row"); - - return el; -}; - -Row.prototype.getElement = function () { - return this.element; -}; - -Row.prototype.generateElement = function () { - var self = this, - dblTap, - tapHold, - tap; - - //set row selection characteristics - if (self.table.options.selectable !== false && self.table.modExists("selectRow")) { - self.table.modules.selectRow.initializeRow(this); - } - - //setup movable rows - if (self.table.options.movableRows !== false && self.table.modExists("moveRow")) { - self.table.modules.moveRow.initializeRow(this); - } - - //setup data tree - if (self.table.options.dataTree !== false && self.table.modExists("dataTree")) { - self.table.modules.dataTree.initializeRow(this); - } - - //handle row click events - if (self.table.options.rowClick) { - self.element.addEventListener("click", function (e) { - self.table.options.rowClick(e, self.getComponent()); - }); - } - - if (self.table.options.rowDblClick) { - self.element.addEventListener("dblclick", function (e) { - self.table.options.rowDblClick(e, self.getComponent()); - }); - } - - if (self.table.options.rowContext) { - self.element.addEventListener("contextmenu", function (e) { - self.table.options.rowContext(e, self.getComponent()); - }); - } - - if (self.table.options.rowTap) { - - tap = false; - - self.element.addEventListener("touchstart", function (e) { - tap = true; - }); - - self.element.addEventListener("touchend", function (e) { - if (tap) { - self.table.options.rowTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (self.table.options.rowDblTap) { - - dblTap = null; - - self.element.addEventListener("touchend", function (e) { - - if (dblTap) { - clearTimeout(dblTap); - dblTap = null; - - self.table.options.rowDblTap(e, self.getComponent()); - } else { - - dblTap = setTimeout(function () { - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - }); - } - - if (self.table.options.rowTapHold) { - - tapHold = null; - - self.element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - tap = false; - self.table.options.rowTapHold(e, self.getComponent()); - }, 1000); - }); - - self.element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; - }); - } -}; - -Row.prototype.generateCells = function () { - this.cells = this.table.columnManager.generateCells(this); -}; - -//functions to setup on first render -Row.prototype.initialize = function (force) { - var self = this; - - if (!self.initialized || force) { - - self.deleteCells(); - - while (self.element.firstChild) { - self.element.removeChild(self.element.firstChild); - } //handle frozen cells - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.layoutRow(this); - } - - this.generateCells(); - - self.cells.forEach(function (cell) { - self.element.appendChild(cell.getElement()); - cell.cellRendered(); - }); - - if (force) { - self.normalizeHeight(); - } - - //setup movable rows - if (self.table.options.dataTree && self.table.modExists("dataTree")) { - self.table.modules.dataTree.layoutRow(this); - } - - //setup movable rows - if (self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")) { - self.table.modules.responsiveLayout.layoutRow(this); - } - - if (self.table.options.rowFormatter) { - self.table.options.rowFormatter(self.getComponent()); - } - - //set resizable handles - if (self.table.options.resizableRows && self.table.modExists("resizeRows")) { - self.table.modules.resizeRows.initializeRow(self); - } - - self.initialized = true; - } -}; - -Row.prototype.reinitializeHeight = function () { - this.heightInitialized = false; - - if (this.element.offsetParent !== null) { - this.normalizeHeight(true); - } -}; - -Row.prototype.reinitialize = function () { - this.initialized = false; - this.heightInitialized = false; - this.height = 0; - - if (this.element.offsetParent !== null) { - this.initialize(true); - } -}; - -//get heights when doing bulk row style calcs in virtual DOM -Row.prototype.calcHeight = function () { - - var maxHeight = 0, - minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0; - - this.cells.forEach(function (cell) { - var height = cell.getHeight(); - if (height > maxHeight) { - maxHeight = height; - } - }); - - this.height = Math.max(maxHeight, minHeight); - this.outerHeight = this.element.offsetHeight; -}; - -//set of cells -Row.prototype.setCellHeight = function () { - var height = this.height; - - this.cells.forEach(function (cell) { - cell.setHeight(height); - }); - - this.heightInitialized = true; -}; - -Row.prototype.clearCellHeight = function () { - this.cells.forEach(function (cell) { - - cell.clearHeight(); - }); -}; - -//normalize the height of elements in the row -Row.prototype.normalizeHeight = function (force) { - - if (force) { - this.clearCellHeight(); - } - - this.calcHeight(); - - this.setCellHeight(); -}; - -Row.prototype.setHeight = function (height) { - this.height = height; - - this.setCellHeight(); -}; - -//set height of rows -Row.prototype.setHeight = function (height, force) { - if (this.height != height || force) { - - this.height = height; - - this.setCellHeight(); - - // this.outerHeight = this.element.outerHeight(); - this.outerHeight = this.element.offsetHeight; - } -}; - -//return rows outer height -Row.prototype.getHeight = function () { - return this.outerHeight; -}; - -//return rows outer Width -Row.prototype.getWidth = function () { - return this.element.offsetWidth; -}; - -//////////////// Cell Management ///////////////// - -Row.prototype.deleteCell = function (cell) { - var index = this.cells.indexOf(cell); - - if (index > -1) { - this.cells.splice(index, 1); - } -}; - -//////////////// Data Management ///////////////// - -Row.prototype.setData = function (data) { - var self = this; - - if (self.table.modExists("mutator")) { - self.data = self.table.modules.mutator.transformRow(data, "data"); - } else { - self.data = data; - } -}; - -//update the rows data -Row.prototype.updateData = function (data) { - var _this5 = this; - - var self = this; - - return new Promise(function (resolve, reject) { - - if (typeof data === "string") { - data = JSON.parse(data); - } - - //mutate incomming data if needed - if (self.table.modExists("mutator")) { - data = self.table.modules.mutator.transformRow(data, "data", true); - } - - //set data - for (var attrname in data) { - self.data[attrname] = data[attrname]; - } - - //update affected cells only - for (var attrname in data) { - var cell = _this5.getCell(attrname); - - if (cell) { - if (cell.getValue() != data[attrname]) { - cell.setValueProcessData(data[attrname]); - } - } - } - - //Partial reinitialization if visible - if (Tabulator.prototype.helpers.elVisible(_this5.element)) { - self.normalizeHeight(); - - if (self.table.options.rowFormatter) { - self.table.options.rowFormatter(self.getComponent()); - } - } else { - _this5.initialized = false; - _this5.height = 0; - } - - //self.reinitialize(); - - self.table.options.rowUpdated.call(_this5.table, self.getComponent()); - - resolve(); - }); -}; - -Row.prototype.getData = function (transform) { - var self = this; - - if (transform) { - if (self.table.modExists("accessor")) { - return self.table.modules.accessor.transformRow(self.data, transform); - } - } else { - return this.data; - } -}; - -Row.prototype.getCell = function (column) { - var match = false; - - column = this.table.columnManager.findColumn(column); - - match = this.cells.find(function (cell) { - return cell.column === column; - }); - - return match; -}; - -Row.prototype.getCellIndex = function (findCell) { - return this.cells.findIndex(function (cell) { - return cell === findCell; - }); -}; - -Row.prototype.findNextEditableCell = function (index) { - var nextCell = false; - - if (index < this.cells.length - 1) { - for (var i = index + 1; i < this.cells.length; i++) { - var cell = this.cells[i]; - - if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) { - var allowEdit = true; - - if (typeof cell.column.modules.edit.check == "function") { - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - } - - if (allowEdit) { - nextCell = cell; - break; - } - } - } - } - - return nextCell; -}; - -Row.prototype.findPrevEditableCell = function (index) { - var prevCell = false; - - if (index > 0) { - for (var i = index - 1; i >= 0; i--) { - var cell = this.cells[i], - allowEdit = true; - - if (cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())) { - if (typeof cell.column.modules.edit.check == "function") { - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - } - - if (allowEdit) { - prevCell = cell; - break; - } - } - } - } - - return prevCell; -}; - -Row.prototype.getCells = function () { - return this.cells; -}; - -Row.prototype.nextRow = function () { - var row = this.table.rowManager.nextDisplayRow(this, true); - return row ? row.getComponent() : false; -}; - -Row.prototype.prevRow = function () { - var row = this.table.rowManager.prevDisplayRow(this, true); - return row ? row.getComponent() : false; -}; - -///////////////////// Actions ///////////////////// - -Row.prototype.delete = function () { - var _this6 = this; - - return new Promise(function (resolve, reject) { - var index = _this6.table.rowManager.getRowIndex(_this6); - - _this6.deleteActual(); - - if (_this6.table.options.history && _this6.table.modExists("history")) { - - if (index) { - index = _this6.table.rowManager.rows[index - 1]; - } - - _this6.table.modules.history.action("rowDelete", _this6, { data: _this6.getData(), pos: !index, index: index }); - } - - resolve(); - }); -}; - -Row.prototype.deleteActual = function () { - - var index = this.table.rowManager.getRowIndex(this); - - //deselect row if it is selected - if (this.table.modExists("selectRow")) { - this.table.modules.selectRow._deselectRow(this, true); - } - - // if(this.table.options.dataTree && this.table.modExists("dataTree")){ - // this.table.modules.dataTree.collapseRow(this, true); - // } - - this.table.rowManager.deleteRow(this); - - this.deleteCells(); - - this.initialized = false; - this.heightInitialized = false; - - //remove from group - if (this.modules.group) { - this.modules.group.removeRow(this); - } - - //recalc column calculations if present - if (this.table.modExists("columnCalcs")) { - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.columnCalcs.recalcRowGroup(this); - } else { - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - } -}; - -Row.prototype.deleteCells = function () { - var cellCount = this.cells.length; - - for (var i = 0; i < cellCount; i++) { - this.cells[0].delete(); - } -}; - -Row.prototype.wipe = function () { - this.deleteCells(); - - // this.element.children().each(function(){ - // $(this).remove(); - // }) - // this.element.empty(); - - while (this.element.firstChild) { - this.element.removeChild(this.element.firstChild); - } // this.element.remove(); - if (this.element.parentNode) { - this.element.parentNode.removeChild(this.element); - } -}; - -Row.prototype.getGroup = function () { - return this.modules.group || false; -}; - -//////////////// Object Generation ///////////////// -Row.prototype.getComponent = function () { - return new RowComponent(this); -}; - -//public row object -var CellComponent = function CellComponent(cell) { - this._cell = cell; -}; - -CellComponent.prototype.getValue = function () { - return this._cell.getValue(); -}; - -CellComponent.prototype.getOldValue = function () { - return this._cell.getOldValue(); -}; - -CellComponent.prototype.getElement = function () { - return this._cell.getElement(); -}; - -CellComponent.prototype.getRow = function () { - return this._cell.row.getComponent(); -}; - -CellComponent.prototype.getData = function () { - return this._cell.row.getData(); -}; - -CellComponent.prototype.getField = function () { - return this._cell.column.getField(); -}; - -CellComponent.prototype.getColumn = function () { - return this._cell.column.getComponent(); -}; - -CellComponent.prototype.setValue = function (value, mutate) { - if (typeof mutate == "undefined") { - mutate = true; - } - - this._cell.setValue(value, mutate); -}; - -CellComponent.prototype.restoreOldValue = function () { - this._cell.setValueActual(this._cell.getOldValue()); -}; - -CellComponent.prototype.edit = function (force) { - return this._cell.edit(force); -}; - -CellComponent.prototype.cancelEdit = function () { - this._cell.cancelEdit(); -}; - -CellComponent.prototype.nav = function () { - return this._cell.nav(); -}; - -CellComponent.prototype.checkHeight = function () { - this._cell.checkHeight(); -}; - -CellComponent.prototype.getTable = function () { - return this._cell.table; -}; - -CellComponent.prototype._getSelf = function () { - return this._cell; -}; - -var Cell = function Cell(column, row) { - - this.table = column.table; - this.column = column; - this.row = row; - this.element = null; - this.value = null; - this.oldValue = null; - - this.height = null; - this.width = null; - this.minWidth = null; - - this.build(); -}; - -//////////////// Setup Functions ///////////////// - -//generate element -Cell.prototype.build = function () { - this.generateElement(); - - this.setWidth(this.column.width); - - this._configureCell(); - - this.setValueActual(this.column.getFieldValue(this.row.data)); -}; - -Cell.prototype.generateElement = function () { - this.element = document.createElement('div'); - this.element.className = "tabulator-cell"; - this.element.setAttribute("role", "gridcell"); - this.element = this.element; -}; - -Cell.prototype._configureCell = function () { - var self = this, - cellEvents = self.column.cellEvents, - element = self.element, - field = this.column.getField(), - dblTap, - tapHold, - tap; - - //set text alignment - element.style.textAlign = self.column.hozAlign; - - if (field) { - element.setAttribute("tabulator-field", field); - } - - if (self.column.definition.cssClass) { - element.classList.add(self.column.definition.cssClass); - } - - //set event bindings - if (cellEvents.cellClick || self.table.options.cellClick) { - self.element.addEventListener("click", function (e) { - var component = self.getComponent(); - - if (cellEvents.cellClick) { - cellEvents.cellClick.call(self.table, e, component); - } - - if (self.table.options.cellClick) { - self.table.options.cellClick.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellDblClick || this.table.options.cellDblClick) { - element.addEventListener("dblclick", function (e) { - var component = self.getComponent(); - - if (cellEvents.cellDblClick) { - cellEvents.cellDblClick.call(self.table, e, component); - } - - if (self.table.options.cellDblClick) { - self.table.options.cellDblClick.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellContext || this.table.options.cellContext) { - element.addEventListener("contextmenu", function (e) { - var component = self.getComponent(); - - if (cellEvents.cellContext) { - cellEvents.cellContext.call(self.table, e, component); - } - - if (self.table.options.cellContext) { - self.table.options.cellContext.call(self.table, e, component); - } - }); - } - - if (this.table.options.tooltipGenerationMode === "hover") { - //update tooltip on mouse enter - element.addEventListener("mouseenter", function (e) { - self._generateTooltip(); - }); - } - - if (cellEvents.cellTap || this.table.options.cellTap) { - tap = false; - - element.addEventListener("touchstart", function (e) { - tap = true; - }); - - element.addEventListener("touchend", function (e) { - if (tap) { - var component = self.getComponent(); - - if (cellEvents.cellTap) { - cellEvents.cellTap.call(self.table, e, component); - } - - if (self.table.options.cellTap) { - self.table.options.cellTap.call(self.table, e, component); - } - } - - tap = false; - }); - } - - if (cellEvents.cellDblTap || this.table.options.cellDblTap) { - dblTap = null; - - element.addEventListener("touchend", function (e) { - - if (dblTap) { - clearTimeout(dblTap); - dblTap = null; - - var component = self.getComponent(); - - if (cellEvents.cellDblTap) { - cellEvents.cellDblTap.call(self.table, e, component); - } - - if (self.table.options.cellDblTap) { - self.table.options.cellDblTap.call(self.table, e, component); - } - } else { - - dblTap = setTimeout(function () { - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - }); - } - - if (cellEvents.cellTapHold || this.table.options.cellTapHold) { - tapHold = null; - - element.addEventListener("touchstart", function (e) { - clearTimeout(tapHold); - - tapHold = setTimeout(function () { - clearTimeout(tapHold); - tapHold = null; - tap = false; - var component = self.getComponent(); - - if (cellEvents.cellTapHold) { - cellEvents.cellTapHold.call(self.table, e, component); - } - - if (self.table.options.cellTapHold) { - self.table.options.cellTapHold.call(self.table, e, component); - } - }, 1000); - }); - - element.addEventListener("touchend", function (e) { - clearTimeout(tapHold); - tapHold = null; - }); - } - - if (self.column.modules.edit) { - self.table.modules.edit.bindEditor(self); - } - - if (self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists("moveRow")) { - self.table.modules.moveRow.initializeCell(self); - } - - //hide cell if not visible - if (!self.column.visible) { - self.hide(); - } -}; - -//generate cell contents -Cell.prototype._generateContents = function () { - var val; - - if (this.table.modExists("format")) { - val = this.table.modules.format.formatValue(this); - } else { - val = this.element.innerHTML = this.value; - } - - switch (typeof val === 'undefined' ? 'undefined' : _typeof(val)) { - case "object": - if (val instanceof Node) { - this.element.appendChild(val); - } else { - this.element.innerHTML = ""; - console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val); - } - break; - case "undefined": - case "null": - this.element.innerHTML = ""; - break; - default: - this.element.innerHTML = val; - } -}; - -Cell.prototype.cellRendered = function () { - if (this.table.modExists("format") && this.table.modules.format.cellRendered) { - this.table.modules.format.cellRendered(this); - } -}; - -//generate tooltip text -Cell.prototype._generateTooltip = function () { - var tooltip = this.column.tooltip; - - if (tooltip) { - if (tooltip === true) { - tooltip = this.value; - } else if (typeof tooltip == "function") { - tooltip = tooltip(this.getComponent()); - - if (tooltip === false) { - tooltip = ""; - } - } - - if (typeof tooltip === "undefined") { - tooltip = ""; - } - - this.element.setAttribute("title", tooltip); - } else { - this.element.setAttribute("title", ""); - } -}; - -//////////////////// Getters //////////////////// -Cell.prototype.getElement = function () { - return this.element; -}; - -Cell.prototype.getValue = function () { - return this.value; -}; - -Cell.prototype.getOldValue = function () { - return this.oldValue; -}; - -//////////////////// Actions //////////////////// - -Cell.prototype.setValue = function (value, mutate) { - - var changed = this.setValueProcessData(value, mutate), - component; - - if (changed) { - if (this.table.options.history && this.table.modExists("history")) { - this.table.modules.history.action("cellEdit", this, { oldValue: this.oldValue, newValue: this.value }); - } - - component = this.getComponent(); - - if (this.column.cellEvents.cellEdited) { - this.column.cellEvents.cellEdited.call(this.table, component); - } - - this.table.options.cellEdited.call(this.table, component); - - this.table.options.dataEdited.call(this.table, this.table.rowManager.getData()); - } - - if (this.table.modExists("columnCalcs")) { - if (this.column.definition.topCalc || this.column.definition.bottomCalc) { - if (this.table.options.groupBy && this.table.modExists("groupRows")) { - this.table.modules.columnCalcs.recalcRowGroup(this.row); - } else { - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - } - } -}; - -Cell.prototype.setValueProcessData = function (value, mutate) { - var changed = false; - - if (this.value != value) { - - changed = true; - - if (mutate) { - if (this.column.modules.mutate) { - value = this.table.modules.mutator.transformCell(this, value); - } - } - } - - this.setValueActual(value); - - return changed; -}; - -Cell.prototype.setValueActual = function (value) { - this.oldValue = this.value; - - this.value = value; - - this.column.setFieldValue(this.row.data, value); - - this._generateContents(); - this._generateTooltip(); - - //set resizable handles - if (this.table.options.resizableColumns && this.table.modExists("resizeColumns")) { - this.table.modules.resizeColumns.initializeColumn("cell", this.column, this.element); - } - - //handle frozen cells - if (this.table.modExists("frozenColumns")) { - this.table.modules.frozenColumns.layoutElement(this.element, this.column); - } -}; - -Cell.prototype.setWidth = function (width) { - this.width = width; - // this.element.css("width", width || ""); - this.element.style.width = width ? width + "px" : ""; -}; - -Cell.prototype.getWidth = function () { - return this.width || this.element.offsetWidth; -}; - -Cell.prototype.setMinWidth = function (minWidth) { - this.minWidth = minWidth; - this.element.style.minWidth = minWidth ? minWidth + "px" : ""; -}; - -Cell.prototype.checkHeight = function () { - // var height = this.element.css("height"); - - this.row.reinitializeHeight(); -}; - -Cell.prototype.clearHeight = function () { - this.element.style.height = ""; - this.height = null; -}; - -Cell.prototype.setHeight = function (height) { - this.height = height; - this.element.style.height = height ? height + "px" : ""; -}; - -Cell.prototype.getHeight = function () { - return this.height || this.element.offsetHeight; -}; - -Cell.prototype.show = function () { - this.element.style.display = ""; -}; - -Cell.prototype.hide = function () { - this.element.style.display = "none"; -}; - -Cell.prototype.edit = function (force) { - if (this.table.modExists("edit", true)) { - return this.table.modules.edit.editCell(this, force); - } -}; - -Cell.prototype.cancelEdit = function () { - if (this.table.modExists("edit", true)) { - var editing = this.table.modules.edit.getCurrentCell(); - - if (editing && editing._getSelf() === this) { - this.table.modules.edit.cancelEdit(); - } else { - console.warn("Cancel Editor Error - This cell is not currently being edited "); - } - } -}; - -Cell.prototype.delete = function () { - this.element.parentNode.removeChild(this.element); - this.column.deleteCell(this); - this.row.deleteCell(this); -}; - -//////////////// Navigation ///////////////// - -Cell.prototype.nav = function () { - - var self = this, - nextCell = false, - index = this.row.getCellIndex(this); - - return { - next: function next() { - var nextCell = this.right(), - nextRow; - - if (!nextCell) { - nextRow = self.table.rowManager.nextDisplayRow(self.row, true); - - if (nextRow) { - nextCell = nextRow.findNextEditableCell(-1); - - if (nextCell) { - nextCell.edit(); - return true; - } - } - } else { - return true; - } - - return false; - }, - prev: function prev() { - var nextCell = this.left(), - prevRow; - - if (!nextCell) { - prevRow = self.table.rowManager.prevDisplayRow(self.row, true); - - if (prevRow) { - nextCell = prevRow.findPrevEditableCell(prevRow.cells.length); - - if (nextCell) { - nextCell.edit(); - return true; - } - } - } else { - return true; - } - - return false; - }, - left: function left() { - - nextCell = self.row.findPrevEditableCell(index); - - if (nextCell) { - nextCell.edit(); - return true; - } else { - return false; - } - }, - right: function right() { - nextCell = self.row.findNextEditableCell(index); - - if (nextCell) { - nextCell.edit(); - return true; - } else { - return false; - } - }, - up: function up() { - var nextRow = self.table.rowManager.prevDisplayRow(self.row, true); - - if (nextRow) { - nextRow.cells[index].edit(); - } - }, - down: function down() { - var nextRow = self.table.rowManager.nextDisplayRow(self.row, true); - - if (nextRow) { - nextRow.cells[index].edit(); - } - } - - }; -}; - -Cell.prototype.getIndex = function () { - this.row.getCellIndex(this); -}; - -//////////////// Object Generation ///////////////// -Cell.prototype.getComponent = function () { - return new CellComponent(this); -}; -var FooterManager = function FooterManager(table) { - this.table = table; - this.active = false; - this.element = this.createElement(); //containing element - this.external = false; - this.links = []; - - this._initialize(); -}; - -FooterManager.prototype.createElement = function () { - var el = document.createElement("div"); - - el.classList.add("tabulator-footer"); - - return el; -}; - -FooterManager.prototype._initialize = function (element) { - if (this.table.options.footerElement) { - - switch (_typeof(this.table.options.footerElement)) { - case "string": - - if (this.table.options.footerElement[0] === "<") { - this.element.innerHTML = this.table.options.footerElement; - } else { - this.external = true; - this.element = document.querySelector(this.table.options.footerElement); - } - break; - default: - this.element = this.table.options.footerElement; - break; - } - } -}; - -FooterManager.prototype.getElement = function () { - return this.element; -}; - -FooterManager.prototype.append = function (element, parent) { - this.activate(parent); - - this.element.appendChild(element); - this.table.rowManager.adjustTableSize(); -}; - -FooterManager.prototype.prepend = function (element, parent) { - this.activate(parent); - - this.element.insertBefore(element, this.element.firstChild); - this.table.rowManager.adjustTableSize(); -}; - -FooterManager.prototype.remove = function (element) { - element.parentNode.removeChild(element); - this.deactivate(); -}; - -FooterManager.prototype.deactivate = function (force) { - if (!this.element.firstChild || force) { - if (!this.external) { - this.element.parentNode.removeChild(this.element); - } - this.active = false; - } - - // this.table.rowManager.adjustTableSize(); -}; - -FooterManager.prototype.activate = function (parent) { - if (!this.active) { - this.active = true; - if (!this.external) { - this.table.element.appendChild(this.getElement()); - this.table.element.style.display = ''; - } - } - - if (parent) { - this.links.push(parent); - } -}; - -FooterManager.prototype.redraw = function () { - this.links.forEach(function (link) { - link.footerRedraw(); - }); -}; - -var Tabulator = function Tabulator(element, options) { - - this.options = {}; - - this.columnManager = null; // hold Column Manager - this.rowManager = null; //hold Row Manager - this.footerManager = null; //holder Footer Manager - this.browser = ""; //hold current browser type - this.browserSlow = false; //handle reduced functionality for slower browsers - - this.modules = {}; //hold all modules bound to this table - - this.initializeElement(element); - this.initializeOptions(options || {}); - this._create(); - - Tabulator.prototype.comms.register(this); //register table for inderdevice communication -}; - -//default setup options -Tabulator.prototype.defaultOptions = { - - height: false, //height of tabulator - - layout: "fitData", ///layout type "fitColumns" | "fitData" - layoutColumnsOnNewData: false, //update column widths on setData - - columnMinWidth: 40, //minimum global width for a column - columnVertAlign: "top", //vertical alignment of column headers - - resizableColumns: true, //resizable columns - resizableRows: false, //resizable rows - autoResize: true, //auto resize table - - columns: [], //store for colum header info - - data: [], //default starting data - - nestedFieldSeparator: ".", //seperatpr for nested data - - tooltips: false, //Tool tip value - tooltipsHeader: false, //Tool tip for headers - tooltipGenerationMode: "load", //when to generate tooltips - - initialSort: false, //initial sorting criteria - initialFilter: false, //initial filtering criteria - - columnHeaderSortMulti: true, //multiple or single column sorting - - sortOrderReverse: false, //reverse internal sort ordering - - footerElement: false, //hold footer element - - index: "id", //filed for row index - - keybindings: [], //array for keybindings - - clipboard: false, //enable clipboard - clipboardCopyStyled: true, //formatted table data - clipboardCopySelector: "active", //method of chosing which data is coppied to the clipboard - clipboardCopyFormatter: "table", //convert data to a clipboard string - clipboardPasteParser: "table", //convert pasted clipboard data to rows - clipboardPasteAction: "insert", //how to insert pasted data into the table - clipboardCopyConfig: false, //clipboard config - - clipboardCopied: function clipboardCopied() {}, //data has been copied to the clipboard - clipboardPasted: function clipboardPasted() {}, //data has been pasted into the table - clipboardPasteError: function clipboardPasteError() {}, //data has not successfully been pasted into the table - - downloadDataFormatter: false, //function to manipulate table data before it is downloaded - downloadReady: function downloadReady(data, blob) { - return blob; - }, //function to manipulate download data - downloadComplete: false, //function to manipulate download data - downloadConfig: false, //download config - - dataTree: false, //enable data tree - dataTreeBranchElement: true, //show data tree branch element - dataTreeChildIndent: 9, //data tree child indent in px - dataTreeChildField: "_children", //data tre column field to look for child rows - dataTreeCollapseElement: false, //data tree row collapse element - dataTreeExpandElement: false, //data tree row expand element - dataTreeStartExpanded: false, - dataTreeRowExpanded: function dataTreeRowExpanded() {}, //row has been expanded - dataTreeRowCollapsed: function dataTreeRowCollapsed() {}, //row has been collapsed - - - addRowPos: "bottom", //position to insert blank rows, top|bottom - - selectable: "highlight", //highlight rows on hover - selectableRangeMode: "drag", //highlight rows on hover - selectableRollingSelection: true, //roll selection once maximum number of selectable rows is reached - selectablePersistence: true, // maintain selection when table view is updated - selectableCheck: function selectableCheck(data, row) { - return true; - }, //check wheather row is selectable - - headerFilterPlaceholder: false, //placeholder text to display in header filters - - history: false, //enable edit history - - locale: false, //current system language - langs: {}, - - virtualDom: true, //enable DOM virtualization - - persistentLayout: false, //store column layout in memory - persistentSort: false, //store sorting in memory - persistentFilter: false, //store filters in memory - persistenceID: "", //key for persistent storage - persistenceMode: true, //mode for storing persistence information - - responsiveLayout: false, //responsive layout flags - responsiveLayoutCollapseStartOpen: true, //start showing collapsed data - responsiveLayoutCollapseUseFormatters: true, //responsive layout collapse formatter - responsiveLayoutCollapseFormatter: false, //responsive layout collapse formatter - - pagination: false, //set pagination type - paginationSize: false, //set number of rows to a page - paginationButtonCount: 5, // set count of page button - paginationElement: false, //element to hold pagination numbers - paginationDataSent: {}, //pagination data sent to the server - paginationDataReceived: {}, //pagination data received from the server - paginationAddRow: "page", //add rows on table or page - - ajaxURL: false, //url for ajax loading - ajaxURLGenerator: false, - ajaxParams: {}, //params for ajax loading - ajaxConfig: "get", //ajax request type - ajaxContentType: "form", //ajax request type - ajaxRequestFunc: false, //promise function - ajaxLoader: true, //show loader - ajaxLoaderLoading: false, //loader element - ajaxLoaderError: false, //loader element - ajaxFiltering: false, - ajaxSorting: false, - ajaxProgressiveLoad: false, //progressive loading - ajaxProgressiveLoadDelay: 0, //delay between requests - ajaxProgressiveLoadScrollMargin: 0, //margin before scroll begins - - groupBy: false, //enable table grouping and set field to group by - groupStartOpen: true, //starting state of group - groupValues: false, - - groupHeader: false, //header generation function - - movableColumns: false, //enable movable columns - - movableRows: false, //enable movable rows - movableRowsConnectedTables: false, //tables for movable rows to be connected to - movableRowsSender: false, - movableRowsReceiver: "insert", - movableRowsSendingStart: function movableRowsSendingStart() {}, - movableRowsSent: function movableRowsSent() {}, - movableRowsSentFailed: function movableRowsSentFailed() {}, - movableRowsSendingStop: function movableRowsSendingStop() {}, - movableRowsReceivingStart: function movableRowsReceivingStart() {}, - movableRowsReceived: function movableRowsReceived() {}, - movableRowsReceivedFailed: function movableRowsReceivedFailed() {}, - movableRowsReceivingStop: function movableRowsReceivingStop() {}, - - scrollToRowPosition: "top", - scrollToRowIfVisible: true, - - scrollToColumnPosition: "left", - scrollToColumnIfVisible: true, - - rowFormatter: false, - - placeholder: false, - - //table building callbacks - tableBuilding: function tableBuilding() {}, - tableBuilt: function tableBuilt() {}, - - //render callbacks - renderStarted: function renderStarted() {}, - renderComplete: function renderComplete() {}, - - //row callbacks - rowClick: false, - rowDblClick: false, - rowContext: false, - rowTap: false, - rowDblTap: false, - rowTapHold: false, - rowAdded: function rowAdded() {}, - rowDeleted: function rowDeleted() {}, - rowMoved: function rowMoved() {}, - rowUpdated: function rowUpdated() {}, - rowSelectionChanged: function rowSelectionChanged() {}, - rowSelected: function rowSelected() {}, - rowDeselected: function rowDeselected() {}, - rowResized: function rowResized() {}, - - //cell callbacks - //row callbacks - cellClick: false, - cellDblClick: false, - cellContext: false, - cellTap: false, - cellDblTap: false, - cellTapHold: false, - cellEditing: function cellEditing() {}, - cellEdited: function cellEdited() {}, - cellEditCancelled: function cellEditCancelled() {}, - - //column callbacks - columnMoved: false, - columnResized: function columnResized() {}, - columnTitleChanged: function columnTitleChanged() {}, - columnVisibilityChanged: function columnVisibilityChanged() {}, - - //HTML iport callbacks - htmlImporting: function htmlImporting() {}, - htmlImported: function htmlImported() {}, - - //data callbacks - dataLoading: function dataLoading() {}, - dataLoaded: function dataLoaded() {}, - dataEdited: function dataEdited() {}, - - //ajax callbacks - ajaxRequesting: function ajaxRequesting() {}, - ajaxResponse: false, - ajaxError: function ajaxError() {}, - - //filtering callbacks - dataFiltering: false, - dataFiltered: false, - - //sorting callbacks - dataSorting: function dataSorting() {}, - dataSorted: function dataSorted() {}, - - //grouping callbacks - groupToggleElement: "arrow", - groupClosedShowCalcs: false, - dataGrouping: function dataGrouping() {}, - dataGrouped: false, - groupVisibilityChanged: function groupVisibilityChanged() {}, - groupClick: false, - groupDblClick: false, - groupContext: false, - groupTap: false, - groupDblTap: false, - groupTapHold: false, - - columnCalcs: true, - - //pagination callbacks - pageLoaded: function pageLoaded() {}, - - //localization callbacks - localized: function localized() {}, - - //validation has failed - validationFailed: function validationFailed() {}, - - //history callbacks - historyUndo: function historyUndo() {}, - historyRedo: function historyRedo() {} - -}; - -Tabulator.prototype.initializeOptions = function (options) { - for (var key in this.defaultOptions) { - if (key in options) { - this.options[key] = options[key]; - } else { - if (Array.isArray(this.defaultOptions[key])) { - this.options[key] = []; - } else if (_typeof(this.defaultOptions[key]) === "object") { - this.options[key] = {}; - } else { - this.options[key] = this.defaultOptions[key]; - } - } - } -}; - -Tabulator.prototype.initializeElement = function (element) { - - if (element instanceof HTMLElement) { - this.element = element; - return true; - } else if (typeof element === "string") { - this.element = document.querySelector(element); - - if (this.element) { - return true; - } else { - console.error("Tabulator Creation Error - no element found matching selector: ", element); - return false; - } - } else { - console.error("Tabulator Creation Error - Invalid element provided:", element); - return false; - } -}; - -//convert depricated functionality to new functions -Tabulator.prototype._mapDepricatedFunctionality = function () {}; - -//concreate table -Tabulator.prototype._create = function () { - this._clearObjectPointers(); - - this._mapDepricatedFunctionality(); - - this.bindModules(); - - if (this.element.tagName === "TABLE") { - if (this.modExists("htmlTableImport", true)) { - this.modules.htmlTableImport.parseTable(); - } - } - - this.columnManager = new ColumnManager(this); - this.rowManager = new RowManager(this); - this.footerManager = new FooterManager(this); - - this.columnManager.setRowManager(this.rowManager); - this.rowManager.setColumnManager(this.columnManager); - - this._buildElement(); - - this._loadInitialData(); -}; - -//clear pointers to objects in default config object -Tabulator.prototype._clearObjectPointers = function () { - this.options.columns = this.options.columns.slice(0); - this.options.data = this.options.data.slice(0); -}; - -//build tabulator element -Tabulator.prototype._buildElement = function () { - var element = this.element, - mod = this.modules, - options = this.options; - - options.tableBuilding.call(this); - - element.classList.add("tabulator"); - element.setAttribute("role", "grid"); - - //empty element - while (element.firstChild) { - element.removeChild(element.firstChild); - } //set table height - if (options.height) { - options.height = isNaN(options.height) ? options.height : options.height + "px"; - element.style.height = options.height; - } - - this.rowManager.initialize(); - - this._detectBrowser(); - - if (this.modExists("layout", true)) { - mod.layout.initialize(options.layout); - } - - //set localization - if (options.headerFilterPlaceholder !== false) { - mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder); - } - - for (var locale in options.langs) { - mod.localize.installLang(locale, options.langs[locale]); - } - - mod.localize.setLocale(options.locale); - - //configure placeholder element - if (typeof options.placeholder == "string") { - - var el = document.createElement("div"); - el.classList.add("tabulator-placeholder"); - - var span = document.createElement("span"); - span.innerHTML = options.placeholder; - - el.appendChild(span); - - options.placeholder = el; - } - - //build table elements - element.appendChild(this.columnManager.getElement()); - element.appendChild(this.rowManager.getElement()); - - if (options.footerElement) { - this.footerManager.activate(); - } - - if (options.dataTree && this.modExists("dataTree", true)) { - mod.dataTree.initialize(); - } - - if ((options.persistentLayout || options.persistentSort || options.persistentFilter) && this.modExists("persistence", true)) { - mod.persistence.initialize(options.persistenceMode, options.persistenceID); - } - - if (options.persistentLayout && this.modExists("persistence", true)) { - options.columns = mod.persistence.load("columns", options.columns); - } - - if (options.movableRows && this.modExists("moveRow")) { - mod.moveRow.initialize(); - } - - if (this.modExists("columnCalcs")) { - mod.columnCalcs.initialize(); - } - - this.columnManager.setColumns(options.columns); - - if (this.modExists("frozenRows")) { - this.modules.frozenRows.initialize(); - } - - if ((options.persistentSort || options.initialSort) && this.modExists("sort", true)) { - var sorters = []; - - if (options.persistentSort && this.modExists("persistence", true)) { - sorters = mod.persistence.load("sort"); - - if (sorters === false && options.initialSort) { - sorters = options.initialSort; - } - } else if (options.initialSort) { - sorters = options.initialSort; - } - - mod.sort.setSort(sorters); - } - - if ((options.persistentFilter || options.initialFilter) && this.modExists("filter", true)) { - var filters = []; - - if (options.persistentFilter && this.modExists("persistence", true)) { - filters = mod.persistence.load("filter"); - - if (filters === false && options.initialFilter) { - filters = options.initialFilter; - } - } else if (options.initialFilter) { - filters = options.initialFilter; - } - - mod.filter.setFilter(filters); - // this.setFilter(filters); - } - - if (this.modExists("ajax")) { - mod.ajax.initialize(); - } - - if (options.pagination && this.modExists("page", true)) { - mod.page.initialize(); - } - - if (options.groupBy && this.modExists("groupRows", true)) { - mod.groupRows.initialize(); - } - - if (this.modExists("keybindings")) { - mod.keybindings.initialize(); - } - - if (this.modExists("selectRow")) { - mod.selectRow.clearSelectionData(true); - } - - if (options.autoResize && this.modExists("resizeTable")) { - mod.resizeTable.initialize(); - } - - if (this.modExists("clipboard")) { - mod.clipboard.initialize(); - } - - options.tableBuilt.call(this); -}; - -Tabulator.prototype._loadInitialData = function () { - var self = this; - - if (self.options.pagination && self.modExists("page")) { - self.modules.page.reset(true); - - if (self.options.pagination == "local") { - if (self.options.data.length) { - self.rowManager.setData(self.options.data); - } else { - if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) { - self.modules.ajax.loadData(); - } else { - self.rowManager.setData(self.options.data); - } - } - } else { - self.modules.page.setPage(1); - } - } else { - if (self.options.data.length) { - self.rowManager.setData(self.options.data); - } else { - if ((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")) { - self.modules.ajax.loadData(); - } else { - self.rowManager.setData(self.options.data); - } - } - } -}; - -//deconstructor -Tabulator.prototype.destroy = function () { - var element = this.element; - - Tabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication - - //clear row data - this.rowManager.rows.forEach(function (row) { - row.wipe(); - }); - - this.rowManager.rows = []; - this.rowManager.activeRows = []; - this.rowManager.displayRows = []; - - //clear event bindings - if (this.options.autoResize && this.modExists("resizeTable")) { - this.modules.resizeTable.clearBindings(); - } - - if (this.modExists("keybindings")) { - this.modules.keybindings.clearBindings(); - } - - //clear DOM - while (element.firstChild) { - element.removeChild(element.firstChild); - }element.classList.remove("tabulator"); -}; - -Tabulator.prototype._detectBrowser = function () { - var ua = navigator.userAgent; - - if (ua.indexOf("Trident") > -1) { - this.browser = "ie"; - this.browserSlow = true; - } else if (ua.indexOf("Edge") > -1) { - this.browser = "edge"; - this.browserSlow = true; - } else if (ua.indexOf("Firefox") > -1) { - this.browser = "firefox"; - this.browserSlow = false; - } else { - this.browser = "other"; - this.browserSlow = false; - } -}; - -////////////////// Data Handling ////////////////// - - -//load data -Tabulator.prototype.setData = function (data, params, config) { - if (this.modExists("ajax")) { - this.modules.ajax.blockActiveRequest(); - } - - return this._setData(data, params, config); -}; - -Tabulator.prototype._setData = function (data, params, config, inPosition) { - var self = this; - - if (typeof data === "string") { - if (data.indexOf("{") == 0 || data.indexOf("[") == 0) { - //data is a json encoded string - return self.rowManager.setData(JSON.parse(data), inPosition); - } else { - - if (self.modExists("ajax", true)) { - if (params) { - self.modules.ajax.setParams(params); - } - - if (config) { - self.modules.ajax.setConfig(config); - } - - self.modules.ajax.setUrl(data); - - if (self.options.pagination == "remote" && self.modExists("page", true)) { - self.modules.page.reset(true); - return self.modules.page.setPage(1); - } else { - //assume data is url, make ajax call to url to get data - return self.modules.ajax.loadData(inPosition); - } - } - } - } else { - if (data) { - //asume data is already an object - return self.rowManager.setData(data, inPosition); - } else { - - //no data provided, check if ajaxURL is present; - if (self.modExists("ajax") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)) { - - if (self.options.pagination == "remote" && self.modExists("page", true)) { - self.modules.page.reset(true); - return self.modules.page.setPage(1); - } else { - return self.modules.ajax.loadData(inPosition); - } - } else { - //empty data - return self.rowManager.setData([], inPosition); - } - } - } -}; - -//clear data -Tabulator.prototype.clearData = function () { - if (this.modExists("ajax")) { - this.modules.ajax.blockActiveRequest(); - } - - this.rowManager.clearData(); -}; - -//get table data array -Tabulator.prototype.getData = function (active) { - return this.rowManager.getData(active); -}; - -//get table data array count -Tabulator.prototype.getDataCount = function (active) { - return this.rowManager.getDataCount(active); -}; - -//search for specific row components -Tabulator.prototype.searchRows = function (field, type, value) { - if (this.modExists("filter", true)) { - return this.modules.filter.search("rows", field, type, value); - } -}; - -//search for specific data -Tabulator.prototype.searchData = function (field, type, value) { - if (this.modExists("filter", true)) { - return this.modules.filter.search("data", field, type, value); - } -}; - -//get table html -Tabulator.prototype.getHtml = function (active) { - return this.rowManager.getHtml(active); -}; - -//retrieve Ajax URL -Tabulator.prototype.getAjaxUrl = function () { - if (this.modExists("ajax", true)) { - return this.modules.ajax.getUrl(); - } -}; - -//replace data, keeping table in position with same sort -Tabulator.prototype.replaceData = function (data, params, config) { - if (this.modExists("ajax")) { - this.modules.ajax.blockActiveRequest(); - } - - return this._setData(data, params, config, true); -}; - -//update table data -Tabulator.prototype.updateData = function (data) { - var _this7 = this; - - var self = this; - var responses = 0; - - return new Promise(function (resolve, reject) { - if (_this7.modExists("ajax")) { - _this7.modules.ajax.blockActiveRequest(); - } - - if (typeof data === "string") { - data = JSON.parse(data); - } - - if (data) { - data.forEach(function (item) { - var row = self.rowManager.findRow(item[self.options.index]); - - if (row) { - responses++; - - row.updateData(item).then(function () { - responses--; - - if (!responses) { - resolve(); - } - }); - } - }); - } else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); -}; - -Tabulator.prototype.addData = function (data, pos, index) { - var _this8 = this; - - return new Promise(function (resolve, reject) { - if (_this8.modExists("ajax")) { - _this8.modules.ajax.blockActiveRequest(); - } - - if (typeof data === "string") { - data = JSON.parse(data); - } - - if (data) { - _this8.rowManager.addRows(data, pos, index).then(function (rows) { - var output = []; - - rows.forEach(function (row) { - output.push(row.getComponent()); - }); - - resolve(output); - }); - } else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); -}; - -//update table data -Tabulator.prototype.updateOrAddData = function (data) { - var _this9 = this; - - var self = this, - rows = [], - responses = 0; - - return new Promise(function (resolve, reject) { - if (_this9.modExists("ajax")) { - _this9.modules.ajax.blockActiveRequest(); - } - - if (typeof data === "string") { - data = JSON.parse(data); - } - - if (data) { - data.forEach(function (item) { - var row = self.rowManager.findRow(item[self.options.index]); - - responses++; - - if (row) { - row.updateData(item).then(function () { - responses--; - rows.push(row.getComponent()); - - if (!responses) { - resolve(rows); - } - }); - } else { - self.rowManager.addRows(item).then(function (newRows) { - responses--; - rows.push(newRows[0].getComponent()); - - if (!responses) { - resolve(rows); - } - }); - } - }); - } else { - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); -}; - -//get row object -Tabulator.prototype.getRow = function (index) { - var row = this.rowManager.findRow(index); - - if (row) { - return row.getComponent(); - } else { - console.warn("Find Error - No matching row found:", index); - return false; - } -}; - -//get row object -Tabulator.prototype.getRowFromPosition = function (position, active) { - var row = this.rowManager.getRowFromPosition(position, active); - - if (row) { - return row.getComponent(); - } else { - console.warn("Find Error - No matching row found:", position); - return false; - } -}; - -//delete row from table -Tabulator.prototype.deleteRow = function (index) { - var _this10 = this; - - return new Promise(function (resolve, reject) { - var row = _this10.rowManager.findRow(index); - - if (row) { - row.delete().then(function () { - resolve(); - }).catch(function (err) { - reject(err); - }); - } else { - console.warn("Delete Error - No matching row found:", index); - reject("Delete Error - No matching row found"); - } - }); -}; - -//add row to table -Tabulator.prototype.addRow = function (data, pos, index) { - var _this11 = this; - - return new Promise(function (resolve, reject) { - if (typeof data === "string") { - data = JSON.parse(data); - } - - _this11.rowManager.addRows(data, pos, index).then(function (rows) { - //recalc column calculations if present - if (_this11.modExists("columnCalcs")) { - _this11.modules.columnCalcs.recalc(_this11.rowManager.activeRows); - } - - resolve(rows[0].getComponent()); - }); - }); -}; - -//update a row if it exitsts otherwise create it -Tabulator.prototype.updateOrAddRow = function (index, data) { - var _this12 = this; - - return new Promise(function (resolve, reject) { - var row = _this12.rowManager.findRow(index); - - if (typeof data === "string") { - data = JSON.parse(data); - } - - if (row) { - row.updateData(data).then(function () { - //recalc column calculations if present - if (_this12.modExists("columnCalcs")) { - _this12.modules.columnCalcs.recalc(_this12.rowManager.activeRows); - } - - resolve(row.getComponent()); - }).catch(function (err) { - reject(err); - }); - } else { - row = _this12.rowManager.addRows(data).then(function (rows) { - //recalc column calculations if present - if (_this12.modExists("columnCalcs")) { - _this12.modules.columnCalcs.recalc(_this12.rowManager.activeRows); - } - - resolve(rows[0].getComponent()); - }).catch(function (err) { - reject(err); - }); - } - }); -}; - -//update row data -Tabulator.prototype.updateRow = function (index, data) { - var _this13 = this; - - return new Promise(function (resolve, reject) { - var row = _this13.rowManager.findRow(index); - - if (typeof data === "string") { - data = JSON.parse(data); - } - - if (row) { - row.updateData(data).then(function () { - resolve(row.getComponent()); - }).catch(function (err) { - reject(err); - }); - } else { - console.warn("Update Error - No matching row found:", index); - reject("Update Error - No matching row found"); - } - }); -}; - -//scroll to row in DOM -Tabulator.prototype.scrollToRow = function (index, position, ifVisible) { - var _this14 = this; - - return new Promise(function (resolve, reject) { - var row = _this14.rowManager.findRow(index); - - if (row) { - _this14.rowManager.scrollToRow(row, position, ifVisible).then(function () { - resolve(); - }).catch(function (err) { - reject(err); - }); - } else { - console.warn("Scroll Error - No matching row found:", index); - reject("Scroll Error - No matching row found"); - } - }); -}; - -Tabulator.prototype.getRows = function (active) { - return this.rowManager.getComponents(active); -}; - -//get position of row in table -Tabulator.prototype.getRowPosition = function (index, active) { - var row = this.rowManager.findRow(index); - - if (row) { - return this.rowManager.getRowPosition(row, active); - } else { - console.warn("Position Error - No matching row found:", index); - return false; - } -}; - -//copy table data to clipboard -Tabulator.prototype.copyToClipboard = function (selector, selectorParams, formatter, formatterParams) { - if (this.modExists("clipboard", true)) { - this.modules.clipboard.copy(selector, selectorParams, formatter, formatterParams); - } -}; - -/////////////// Column Functions /////////////// - -Tabulator.prototype.setColumns = function (definition) { - this.columnManager.setColumns(definition); -}; - -Tabulator.prototype.getColumns = function (structured) { - return this.columnManager.getComponents(structured); -}; - -Tabulator.prototype.getColumn = function (field) { - var col = this.columnManager.findColumn(field); - - if (col) { - return col.getComponent(); - } else { - console.warn("Find Error - No matching column found:", field); - return false; - } -}; - -Tabulator.prototype.getColumnDefinitions = function () { - return this.columnManager.getDefinitionTree(); -}; - -Tabulator.prototype.getColumnLayout = function () { - if (this.modExists("persistence", true)) { - return this.modules.persistence.parseColumns(this.columnManager.getColumns()); - } -}; - -Tabulator.prototype.setColumnLayout = function (layout) { - if (this.modExists("persistence", true)) { - this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout)); - return true; - } - return false; -}; - -Tabulator.prototype.showColumn = function (field) { - var column = this.columnManager.findColumn(field); - - if (column) { - column.show(); - - if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) { - this.modules.responsiveLayout.update(); - } - } else { - console.warn("Column Show Error - No matching column found:", field); - return false; - } -}; - -Tabulator.prototype.hideColumn = function (field) { - var column = this.columnManager.findColumn(field); - - if (column) { - column.hide(); - - if (this.options.responsiveLayout && this.modExists("responsiveLayout", true)) { - this.modules.responsiveLayout.update(); - } - } else { - console.warn("Column Hide Error - No matching column found:", field); - return false; - } -}; - -Tabulator.prototype.toggleColumn = function (field) { - var column = this.columnManager.findColumn(field); - - if (column) { - if (column.visible) { - column.hide(); - } else { - column.show(); - } - } else { - console.warn("Column Visibility Toggle Error - No matching column found:", field); - return false; - } -}; - -Tabulator.prototype.addColumn = function (definition, before, field) { - var column = this.columnManager.findColumn(field); - - this.columnManager.addColumn(definition, before, column); -}; - -Tabulator.prototype.deleteColumn = function (field) { - var column = this.columnManager.findColumn(field); - - if (column) { - column.delete(); - } else { - console.warn("Column Delete Error - No matching column found:", field); - return false; - } -}; - -//scroll to column in DOM -Tabulator.prototype.scrollToColumn = function (field, position, ifVisible) { - var _this15 = this; - - return new Promise(function (resolve, reject) { - var column = _this15.columnManager.findColumn(field); - - if (column) { - _this15.columnManager.scrollToColumn(column, position, ifVisible).then(function () { - resolve(); - }).catch(function (err) { - reject(err); - }); - } else { - console.warn("Scroll Error - No matching column found:", field); - reject("Scroll Error - No matching column found"); - } - }); -}; - -//////////// Localization Functions //////////// -Tabulator.prototype.setLocale = function (locale) { - this.modules.localize.setLocale(locale); -}; - -Tabulator.prototype.getLocale = function () { - return this.modules.localize.getLocale(); -}; - -Tabulator.prototype.getLang = function (locale) { - return this.modules.localize.getLang(locale); -}; - -//////////// General Public Functions //////////// - -//redraw list without updating data -Tabulator.prototype.redraw = function (force) { - this.columnManager.redraw(force); - this.rowManager.redraw(force); -}; - -Tabulator.prototype.setHeight = function (height) { - this.options.height = isNaN(height) ? height : height + "px"; - this.element.style.height = this.options.height; - this.rowManager.redraw(); -}; - -///////////////////// Sorting //////////////////// - -//trigger sort -Tabulator.prototype.setSort = function (sortList, dir) { - if (this.modExists("sort", true)) { - this.modules.sort.setSort(sortList, dir); - this.rowManager.sorterRefresh(); - } -}; - -Tabulator.prototype.getSorters = function () { - if (this.modExists("sort", true)) { - return this.modules.sort.getSort(); - } -}; - -Tabulator.prototype.clearSort = function () { - if (this.modExists("sort", true)) { - this.modules.sort.clear(); - this.rowManager.sorterRefresh(); - } -}; - -///////////////////// Filtering //////////////////// - -//set standard filters -Tabulator.prototype.setFilter = function (field, type, value) { - if (this.modExists("filter", true)) { - this.modules.filter.setFilter(field, type, value); - this.rowManager.filterRefresh(); - } -}; - -//add filter to array -Tabulator.prototype.addFilter = function (field, type, value) { - if (this.modExists("filter", true)) { - this.modules.filter.addFilter(field, type, value); - this.rowManager.filterRefresh(); - } -}; - -//get all filters -Tabulator.prototype.getFilters = function (all) { - if (this.modExists("filter", true)) { - return this.modules.filter.getFilters(all); - } -}; - -Tabulator.prototype.setHeaderFilterFocus = function (field) { - if (this.modExists("filter", true)) { - var column = this.columnManager.findColumn(field); - - if (column) { - this.modules.filter.setHeaderFilterFocus(column); - } else { - console.warn("Column Filter Focus Error - No matching column found:", field); - return false; - } - } -}; - -Tabulator.prototype.setHeaderFilterValue = function (field, value) { - if (this.modExists("filter", true)) { - var column = this.columnManager.findColumn(field); - - if (column) { - this.modules.filter.setHeaderFilterValue(column, value); - } else { - console.warn("Column Filter Error - No matching column found:", field); - return false; - } - } -}; - -Tabulator.prototype.getHeaderFilters = function () { - if (this.modExists("filter", true)) { - return this.modules.filter.getHeaderFilters(); - } -}; - -//remove filter from array -Tabulator.prototype.removeFilter = function (field, type, value) { - if (this.modExists("filter", true)) { - this.modules.filter.removeFilter(field, type, value); - this.rowManager.filterRefresh(); - } -}; - -//clear filters -Tabulator.prototype.clearFilter = function (all) { - if (this.modExists("filter", true)) { - this.modules.filter.clearFilter(all); - this.rowManager.filterRefresh(); - } -}; - -//clear header filters -Tabulator.prototype.clearHeaderFilter = function () { - if (this.modExists("filter", true)) { - this.modules.filter.clearHeaderFilter(); - this.rowManager.filterRefresh(); - } -}; - -///////////////////// Filtering //////////////////// -Tabulator.prototype.selectRow = function (rows) { - if (this.modExists("selectRow", true)) { - this.modules.selectRow.selectRows(rows); - } -}; - -Tabulator.prototype.deselectRow = function (rows) { - if (this.modExists("selectRow", true)) { - this.modules.selectRow.deselectRows(rows); - } -}; - -Tabulator.prototype.toggleSelectRow = function (row) { - if (this.modExists("selectRow", true)) { - this.modules.selectRow.toggleRow(row); - } -}; - -Tabulator.prototype.getSelectedRows = function () { - if (this.modExists("selectRow", true)) { - return this.modules.selectRow.getSelectedRows(); - } -}; - -Tabulator.prototype.getSelectedData = function () { - if (this.modExists("selectRow", true)) { - return this.modules.selectRow.getSelectedData(); - } -}; - -//////////// Pagination Functions //////////// - -Tabulator.prototype.setMaxPage = function (max) { - if (this.options.pagination && this.modExists("page")) { - this.modules.page.setMaxPage(max); - } else { - return false; - } -}; - -Tabulator.prototype.setPage = function (page) { - if (this.options.pagination && this.modExists("page")) { - this.modules.page.setPage(page); - } else { - return false; - } -}; - -Tabulator.prototype.setPageSize = function (size) { - if (this.options.pagination && this.modExists("page")) { - this.modules.page.setPageSize(size); - this.modules.page.setPage(1); - } else { - return false; - } -}; - -Tabulator.prototype.getPageSize = function () { - if (this.options.pagination && this.modExists("page", true)) { - return this.modules.page.getPageSize(); - } -}; - -Tabulator.prototype.previousPage = function () { - if (this.options.pagination && this.modExists("page")) { - this.modules.page.previousPage(); - } else { - return false; - } -}; - -Tabulator.prototype.nextPage = function () { - if (this.options.pagination && this.modExists("page")) { - this.modules.page.nextPage(); - } else { - return false; - } -}; - -Tabulator.prototype.getPage = function () { - if (this.options.pagination && this.modExists("page")) { - return this.modules.page.getPage(); - } else { - return false; - } -}; - -Tabulator.prototype.getPageMax = function () { - if (this.options.pagination && this.modExists("page")) { - return this.modules.page.getPageMax(); - } else { - return false; - } -}; - -///////////////// Grouping Functions /////////////// - -Tabulator.prototype.setGroupBy = function (groups) { - if (this.modExists("groupRows", true)) { - this.options.groupBy = groups; - this.modules.groupRows.initialize(); - this.rowManager.refreshActiveData("display"); - } else { - return false; - } -}; - -Tabulator.prototype.setGroupStartOpen = function (values) { - if (this.modExists("groupRows", true)) { - this.options.groupStartOpen = values; - this.modules.groupRows.initialize(); - if (this.options.groupBy) { - this.rowManager.refreshActiveData("group"); - } else { - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } else { - return false; - } -}; - -Tabulator.prototype.setGroupHeader = function (values) { - if (this.modExists("groupRows", true)) { - this.options.groupHeader = values; - this.modules.groupRows.initialize(); - if (this.options.groupBy) { - this.rowManager.refreshActiveData("group"); - } else { - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - } else { - return false; - } -}; - -Tabulator.prototype.getGroups = function (values) { - if (this.modExists("groupRows", true)) { - return this.modules.groupRows.getGroups(true); - } else { - return false; - } -}; - -// get grouped table data in the same format as getData() -Tabulator.prototype.getGroupedData = function () { - if (this.modExists("groupRows", true)) { - return this.options.groupBy ? this.modules.groupRows.getGroupedData() : this.getData(); - } -}; - -///////////////// Column Calculation Functions /////////////// -Tabulator.prototype.getCalcResults = function () { - if (this.modExists("columnCalcs", true)) { - return this.modules.columnCalcs.getResults(); - } else { - return false; - } -}; - -/////////////// Navigation Management ////////////// - -Tabulator.prototype.navigatePrev = function () { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - return cell.nav().prev(); - } - } - - return false; -}; - -Tabulator.prototype.navigateNext = function () { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - return cell.nav().next(); - } - } - - return false; -}; - -Tabulator.prototype.navigateLeft = function () { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - return cell.nav().left(); - } - } - - return false; -}; - -Tabulator.prototype.navigateRight = function () { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - return cell.nav().right(); - } - } - - return false; -}; - -Tabulator.prototype.navigateUp = function () { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - return cell.nav().up(); - } - } - - return false; -}; - -Tabulator.prototype.navigateDown = function () { - var cell = false; - - if (this.modExists("edit", true)) { - cell = this.modules.edit.currentCell; - - if (cell) { - e.preventDefault(); - return cell.nav().dpwn(); - } - } - - return false; -}; - -/////////////// History Management ////////////// -Tabulator.prototype.undo = function () { - if (this.options.history && this.modExists("history", true)) { - return this.modules.history.undo(); - } else { - return false; - } -}; - -Tabulator.prototype.redo = function () { - if (this.options.history && this.modExists("history", true)) { - return this.modules.history.redo(); - } else { - return false; - } -}; - -Tabulator.prototype.getHistoryUndoSize = function () { - if (this.options.history && this.modExists("history", true)) { - return this.modules.history.getHistoryUndoSize(); - } else { - return false; - } -}; - -Tabulator.prototype.getHistoryRedoSize = function () { - if (this.options.history && this.modExists("history", true)) { - return this.modules.history.getHistoryRedoSize(); - } else { - return false; - } -}; - -/////////////// Download Management ////////////// - -Tabulator.prototype.download = function (type, filename, options) { - if (this.modExists("download", true)) { - this.modules.download.download(type, filename, options); - } -}; - -/////////// Inter Table Communications /////////// - -Tabulator.prototype.tableComms = function (table, module, action, data) { - this.modules.comms.receive(table, module, action, data); -}; - -////////////// Extension Management ////////////// - -//object to hold module -Tabulator.prototype.moduleBindings = {}; - -//extend module -Tabulator.prototype.extendModule = function (name, property, values) { - - if (Tabulator.prototype.moduleBindings[name]) { - var source = Tabulator.prototype.moduleBindings[name].prototype[property]; - - if (source) { - if ((typeof values === 'undefined' ? 'undefined' : _typeof(values)) == "object") { - for (var key in values) { - source[key] = values[key]; - } - } else { - console.warn("Module Error - Invalid value type, it must be an object"); - } - } else { - console.warn("Module Error - property does not exist:", property); - } - } else { - console.warn("Module Error - module does not exist:", name); - } -}; - -//add module to tabulator -Tabulator.prototype.registerModule = function (name, module) { - var self = this; - Tabulator.prototype.moduleBindings[name] = module; -}; - -//ensure that module are bound to instantiated function -Tabulator.prototype.bindModules = function () { - this.modules = {}; - - for (var name in Tabulator.prototype.moduleBindings) { - this.modules[name] = new Tabulator.prototype.moduleBindings[name](this); - } -}; - -//Check for module -Tabulator.prototype.modExists = function (plugin, required) { - if (this.modules[plugin]) { - return true; - } else { - if (required) { - console.error("Tabulator Module Not Installed: " + plugin); - } - return false; - } -}; - -Tabulator.prototype.helpers = { - - elVisible: function elVisible(el) { - return !(el.offsetWidth <= 0 && el.offsetHeight <= 0); - }, - - elOffset: function elOffset(el) { - var box = el.getBoundingClientRect(); - - return { - top: box.top + window.pageYOffset - document.documentElement.clientTop, - left: box.left + window.pageXOffset - document.documentElement.clientLeft - }; - }, - - deepClone: function deepClone(obj) { - var clone = Array.isArray(obj) ? [] : {}; - - for (var i in obj) { - if (obj[i] != null && _typeof(obj[i]) === "object") { - if (obj[i] instanceof Date) { - clone[i] = new Date(obj[i]); - } else { - clone[i] = this.deepClone(obj[i]); - } - } else { - clone[i] = obj[i]; - } - } - return clone; - } -}; - -Tabulator.prototype.comms = { - tables: [], - register: function register(table) { - Tabulator.prototype.comms.tables.push(table); - }, - deregister: function deregister(table) { - var index = Tabulator.prototype.comms.tables.indexOf(table); - - if (index > -1) { - Tabulator.prototype.comms.tables.splice(index, 1); - } - }, - lookupTable: function lookupTable(query) { - var results = [], - matches, - match; - - if (typeof query === "string") { - matches = document.querySelectorAll(query); - - if (matches.length) { - for (var i = 0; i < matches.length; i++) { - match = Tabulator.prototype.comms.matchElement(matches[i]); - - if (match) { - results.push(match); - } - } - } - } else if (query instanceof HTMLElement || query instanceof Tabulator) { - match = Tabulator.prototype.comms.matchElement(query); - - if (match) { - results.push(match); - } - } else if (Array.isArray(query)) { - query.forEach(function (item) { - results = results.concat(Tabulator.prototype.comms.lookupTable(item)); - }); - } else { - console.warn("Table Connection Error - Invalid Selector", query); - } - - return results; - }, - matchElement: function matchElement(element) { - return Tabulator.prototype.comms.tables.find(function (table) { - return element instanceof Tabulator ? table === element : table.element === element; - }); - } -}; - -var Layout = function Layout(table) { - - this.table = table; - - this.mode = null; -}; - -//initialize layout system - -Layout.prototype.initialize = function (layout) { - - if (this.modes[layout]) { - - this.mode = layout; - } else { - - console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout); - - this.mode = 'fitData'; - } - - this.table.element.setAttribute("tabulator-layout", this.mode); -}; - -Layout.prototype.getMode = function () { - - return this.mode; -}; - -//trigger table layout - -Layout.prototype.layout = function () { - - this.modes[this.mode].call(this, this.table.columnManager.columnsByIndex); -}; - -//layout render functions - -Layout.prototype.modes = { - - //resize columns to fit data the contain - - "fitData": function fitData(columns) { - - columns.forEach(function (column) { - - column.reinitializeWidth(); - }); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - }, - - //resize columns to fit data the contain - - "fitDataFill": function fitDataFill(columns) { - - columns.forEach(function (column) { - - column.reinitializeWidth(); - }); - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - }, - - //resize columns to fit - - "fitColumns": function fitColumns(columns) { - - var self = this; - - var totalWidth = self.table.element.clientWidth; //table element width - - var fixedWidth = 0; //total width of columns with a defined width - - var flexWidth = 0; //total width available to flexible columns - - var flexGrowUnits = 0; //total number of widthGrow blocks accross all columns - - var flexColWidth = 0; //desired width of flexible columns - - var flexColumns = []; //array of flexible width columns - - var fixedShrinkColumns = []; //array of fixed width columns that can shrink - - var flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns - - var overflowWidth = 0; //horizontal overflow width - - var gapFill = 0; //number of pixels to be added to final column to close and half pixel gaps - - - function calcWidth(width) { - - var colWidth; - - if (typeof width == "string") { - - if (width.indexOf("%") > -1) { - - colWidth = totalWidth / 100 * parseInt(width); - } else { - - colWidth = parseInt(width); - } - } else { - - colWidth = width; - } - - return colWidth; - } - - //ensure columns resize to take up the correct amount of space - - function scaleColumns(columns, freeSpace, colWidth, shrinkCols) { - - var oversizeCols = [], - oversizeSpace = 0, - remainingSpace = 0, - nextColWidth = 0, - gap = 0, - changeUnits = 0, - undersizeCols = []; - - function calcGrow(col) { - - return colWidth * (col.column.definition.widthGrow || 1); - } - - function calcShrink(col) { - - return calcWidth(col.width) - colWidth * (col.column.definition.widthShrink || 0); - } - - columns.forEach(function (col, i) { - - var width = shrinkCols ? calcShrink(col) : calcGrow(col); - - if (col.column.minWidth >= width) { - - oversizeCols.push(col); - } else { - - undersizeCols.push(col); - - changeUnits += shrinkCols ? col.column.definition.widthShrink || 1 : col.column.definition.widthGrow || 1; - } - }); - - if (oversizeCols.length) { - - oversizeCols.forEach(function (col) { - - oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth; - - col.width = col.column.minWidth; - }); - - remainingSpace = freeSpace - oversizeSpace; - - nextColWidth = changeUnits ? Math.floor(remainingSpace / changeUnits) : remainingSpace; - - gap = remainingSpace - nextColWidth * changeUnits; - - gap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols); - } else { - - gap = changeUnits ? freeSpace - Math.floor(freeSpace / changeUnits) * changeUnits : freeSpace; - - undersizeCols.forEach(function (column) { - - column.width = shrinkCols ? calcShrink(column) : calcGrow(column); - }); - } - - return gap; - } - - if (this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)) { - - this.table.modules.responsiveLayout.update(); - } - - //adjust for vertical scrollbar if present - - if (this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight) { - - totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth; - } - - columns.forEach(function (column) { - - var width, minWidth, colWidth; - - if (column.visible) { - - width = column.definition.width; - - minWidth = parseInt(column.minWidth); - - if (width) { - - colWidth = calcWidth(width); - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - - if (column.definition.widthShrink) { - - fixedShrinkColumns.push({ - - column: column, - - width: colWidth > minWidth ? colWidth : minWidth - - }); - - flexShrinkUnits += column.definition.widthShrink; - } - } else { - - flexColumns.push({ - - column: column, - - width: 0 - - }); - - flexGrowUnits += column.definition.widthGrow || 1; - } - } - }); - - //calculate available space - - flexWidth = totalWidth - fixedWidth; - - //calculate correct column size - - flexColWidth = Math.floor(flexWidth / flexGrowUnits); - - //generate column widths - - var gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false); - - //increase width of last column to account for rounding errors - - if (flexColumns.length && gapFill > 0) { - - flexColumns[flexColumns.length - 1].width += +gapFill; - } - - //caculate space for columns to be shrunk into - - flexColumns.forEach(function (col) { - - flexWidth -= col.width; - }); - - overflowWidth = Math.abs(gapFill) + flexWidth; - - //shrink oversize columns if there is no available space - - if (overflowWidth > 0 && flexShrinkUnits) { - - gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true); - } - - //decrease width of last column to account for rounding errors - - if (fixedShrinkColumns.length) { - - fixedShrinkColumns[fixedShrinkColumns.length - 1].width -= gapFill; - } - - flexColumns.forEach(function (col) { - - col.column.setWidth(col.width); - }); - - fixedShrinkColumns.forEach(function (col) { - - col.column.setWidth(col.width); - }); - } - -}; - -Tabulator.prototype.registerModule("layout", Layout); -var Localize = function Localize(table) { - this.table = table; //hold Tabulator object - this.locale = "default"; //current locale - this.lang = false; //current language - this.bindings = {}; //update events to call when locale is changed -}; - -//set header placehoder -Localize.prototype.setHeaderFilterPlaceholder = function (placeholder) { - this.langs.default.headerFilters.default = placeholder; -}; - -//set header filter placeholder by column -Localize.prototype.setHeaderFilterColumnPlaceholder = function (column, placeholder) { - this.langs.default.headerFilters.columns[column] = placeholder; - - if (this.lang && !this.lang.headerFilters.columns[column]) { - this.lang.headerFilters.columns[column] = placeholder; - } -}; - -//setup a lang description object -Localize.prototype.installLang = function (locale, lang) { - if (this.langs[locale]) { - this._setLangProp(this.langs[locale], lang); - } else { - this.langs[locale] = lang; - } -}; - -Localize.prototype._setLangProp = function (lang, values) { - for (var key in values) { - if (lang[key] && _typeof(lang[key]) == "object") { - this._setLangProp(lang[key], values[key]); - } else { - lang[key] = values[key]; - } - } -}; - -//set current locale -Localize.prototype.setLocale = function (desiredLocale) { - var self = this; - - desiredLocale = desiredLocale || "default"; - - //fill in any matching languge values - function traverseLang(trans, path) { - for (var prop in trans) { - - if (_typeof(trans[prop]) == "object") { - if (!path[prop]) { - path[prop] = {}; - } - traverseLang(trans[prop], path[prop]); - } else { - path[prop] = trans[prop]; - } - } - } - - //determing correct locale to load - if (desiredLocale === true && navigator.language) { - //get local from system - desiredLocale = navigator.language.toLowerCase(); - } - - if (desiredLocale) { - - //if locale is not set, check for matching top level locale else use default - if (!self.langs[desiredLocale]) { - var prefix = desiredLocale.split("-")[0]; - - if (self.langs[prefix]) { - console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix); - desiredLocale = prefix; - } else { - console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale); - desiredLocale = "default"; - } - } - } - - self.locale = desiredLocale; - - //load default lang template - self.lang = Tabulator.prototype.helpers.deepClone(self.langs.default || {}); - - if (desiredLocale != "default") { - traverseLang(self.langs[desiredLocale], self.lang); - } - - self.table.options.localized.call(self.table, self.locale, self.lang); - - self._executeBindings(); -}; - -//get current locale -Localize.prototype.getLocale = function (locale) { - return self.locale; -}; - -//get lang object for given local or current if none provided -Localize.prototype.getLang = function (locale) { - return locale ? this.langs[locale] : this.lang; -}; - -//get text for current locale -Localize.prototype.getText = function (path, value) { - var path = value ? path + "|" + value : path, - pathArray = path.split("|"), - text = this._getLangElement(pathArray, this.locale); - - // if(text === false){ - // console.warn("Localization Error - Matching localized text not found for given path: ", path); - // } - - return text || ""; -}; - -//traverse langs object and find localized copy -Localize.prototype._getLangElement = function (path, locale) { - var self = this; - var root = self.lang; - - path.forEach(function (level) { - var rootPath; - - if (root) { - rootPath = root[level]; - - if (typeof rootPath != "undefined") { - root = rootPath; - } else { - root = false; - } - } - }); - - return root; -}; - -//set update binding -Localize.prototype.bind = function (path, callback) { - if (!this.bindings[path]) { - this.bindings[path] = []; - } - - this.bindings[path].push(callback); - - callback(this.getText(path), this.lang); -}; - -//itterate through bindings and trigger updates -Localize.prototype._executeBindings = function () { - var self = this; - - var _loop = function _loop(path) { - self.bindings[path].forEach(function (binding) { - binding(self.getText(path), self.lang); - }); - }; - - for (var path in self.bindings) { - _loop(path); - } -}; - -//Localized text listings -Localize.prototype.langs = { - "default": { //hold default locale text - "groups": { - "item": "item", - "items": "items" - }, - "columns": {}, - "ajax": { - "loading": "Loading", - "error": "Error" - }, - "pagination": { - "first": "First", - "first_title": "First Page", - "last": "Last", - "last_title": "Last Page", - "prev": "Prev", - "prev_title": "Prev Page", - "next": "Next", - "next_title": "Next Page" - }, - "headerFilters": { - "default": "filter column...", - "columns": {} - } - } -}; - -Tabulator.prototype.registerModule("localize", Localize); -var Comms = function Comms(table) { - this.table = table; -}; - -Comms.prototype.getConnections = function (selectors) { - var self = this, - connections = [], - connection; - - connection = Tabulator.prototype.comms.lookupTable(selectors); - - connection.forEach(function (con) { - if (self.table !== con) { - connections.push(con); - } - }); - - return connections; -}; - -Comms.prototype.send = function (selectors, module, action, data) { - var self = this, - connections = this.getConnections(selectors); - - connections.forEach(function (connection) { - connection.tableComms(self.table.element, module, action, data); - }); - - if (!connections.length && selectors) { - console.warn("Table Connection Error - No tables matching selector found", selectors); - } -}; - -Comms.prototype.receive = function (table, module, action, data) { - if (this.table.modExists(module)) { - return this.table.modules[module].commsReceived(table, action, data); - } else { - console.warn("Inter-table Comms Error - no such module:", module); - } -}; - -Tabulator.prototype.registerModule("comms", Comms); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/tabulator_core.min.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/tabulator_core.min.js deleted file mode 100644 index 53ff575991..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/dist/js/tabulator_core.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/* Tabulator v4.1.2 (c) Oliver Folkerd */ -"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};Array.prototype.findIndex||Object.defineProperty(Array.prototype,"findIndex",{value:function(t){if(null==this)throw new TypeError('"this" is null or not defined');var e=Object(this),o=e.length>>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;n>>0;if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var i=arguments[1],n=0;no?(e=t-o,this.element.style.marginLeft=-e+"px"):this.element.style.marginLeft=0,this.scrollLeft=t,this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout()},ColumnManager.prototype.setColumns=function(t,e){for(var o=this;o.headersElement.firstChild;)o.headersElement.removeChild(o.headersElement.firstChild);o.columns=[],o.columnsByIndex=[],o.columnsByField=[],o.table.modExists("frozenColumns")&&o.table.modules.frozenColumns.reset(),t.forEach(function(t,e){o._addColumn(t)}),o._reIndexColumns(),o.table.options.responsiveLayout&&o.table.modExists("responsiveLayout",!0)&&o.table.modules.responsiveLayout.initialize(),o.redraw(!0)},ColumnManager.prototype._addColumn=function(t,e,o){var i=new Column(t,this),n=i.getElement(),l=o?this.findColumnIndex(o):o;if(o&&l>-1){var s=this.columns.indexOf(o.getTopColumn()),a=o.getElement();e?(this.columns.splice(s,0,i),a.parentNode.insertBefore(n,a)):(this.columns.splice(s+1,0,i),a.parentNode.insertBefore(n,a.nextSibling))}else e?(this.columns.unshift(i),this.headersElement.insertBefore(i.getElement(),this.headersElement.firstChild)):(this.columns.push(i),this.headersElement.appendChild(i.getElement()));return i},ColumnManager.prototype.registerColumnField=function(t){t.definition.field&&(this.columnsByField[t.definition.field]=t)},ColumnManager.prototype.registerColumnPosition=function(t){this.columnsByIndex.push(t)},ColumnManager.prototype._reIndexColumns=function(){this.columnsByIndex=[],this.columns.forEach(function(t){t.reRegisterPosition()})},ColumnManager.prototype._verticalAlignHeaders=function(){var t=this,e=0;t.columns.forEach(function(t){var o;t.clearVerticalAlign(),(o=t.getHeight())>e&&(e=o)}),t.columns.forEach(function(o){o.verticalAlign(t.table.options.columnVertAlign,e)}),t.rowManager.adjustTableSize()},ColumnManager.prototype.findColumn=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t)))return this.columnsByField[t]||!1;if(t instanceof Column)return t;if(t instanceof ColumnComponent)return t._getSelf()||!1;if(t instanceof HTMLElement){return e.columns.find(function(e){return e.element===t})||!1}return!1},ColumnManager.prototype.getColumnByField=function(t){return this.columnsByField[t]},ColumnManager.prototype.getColumnByIndex=function(t){return this.columnsByIndex[t]},ColumnManager.prototype.getColumns=function(){return this.columns},ColumnManager.prototype.findColumnIndex=function(t){return this.columnsByIndex.findIndex(function(e){return t===e})},ColumnManager.prototype.getRealColumns=function(){return this.columnsByIndex},ColumnManager.prototype.traverse=function(t){this.columnsByIndex.forEach(function(e,o){t(e,o)})},ColumnManager.prototype.getDefinitions=function(t){var e=this,o=[];return e.columnsByIndex.forEach(function(e){(!t||t&&e.visible)&&o.push(e.getDefinition())}),o},ColumnManager.prototype.getDefinitionTree=function(){var t=this,e=[];return t.columns.forEach(function(t){e.push(t.getDefinition(!0))}),e},ColumnManager.prototype.getComponents=function(t){var e=this,o=[];return(t?e.columns:e.columnsByIndex).forEach(function(t){o.push(t.getComponent())}),o},ColumnManager.prototype.getWidth=function(){var t=0;return this.columnsByIndex.forEach(function(e){e.visible&&(t+=e.getWidth())}),t},ColumnManager.prototype.moveColumn=function(t,e,o){this._moveColumnInArray(this.columns,t,e,o),this._moveColumnInArray(this.columnsByIndex,t,e,o,!0),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.options.columnMoved&&this.table.options.columnMoved.call(this.table,t.getComponent(),this.table.columnManager.getComponents()),this.table.options.persistentLayout&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.save("columns")},ColumnManager.prototype._moveColumnInArray=function(t,e,o,i,n){var l,s=t.indexOf(e);s>-1&&(t.splice(s,1),l=t.indexOf(o),l>-1?i&&(l+=1):l=s,t.splice(l,0,e),n&&this.table.rowManager.rows.forEach(function(t){if(t.cells.length){var e=t.cells.splice(s,1)[0];t.cells.splice(l,0,e)}}))},ColumnManager.prototype.scrollToColumn=function(t,e,o){var i=this,n=0,l=0,s=0,a=t.getElement();return new Promise(function(r,u){if(void 0===e&&(e=i.table.options.scrollToColumnPosition),void 0===o&&(o=i.table.options.scrollToColumnIfVisible),t.visible){switch(e){case"middle":case"center":s=-i.element.clientWidth/2;break;case"right":s=a.clientWidth-i.headersElement.clientWidth}if(!o&&(l=a.offsetLeft)>0&&l+a.offsetWidtht.rowManager.element.clientHeight&&(e-=t.rowManager.element.offsetWidth-t.rowManager.element.clientWidth),this.columnsByIndex.forEach(function(i){var n,l,s;i.visible&&(n=i.definition.width||0,l=void 0===i.minWidth?t.table.options.columnMinWidth:parseInt(i.minWidth),s="string"==typeof n?n.indexOf("%")>-1?e/100*parseInt(n):parseInt(n):n,o+=s>l?s:l)}),o},ColumnManager.prototype.addColumn=function(t,e,o){var i=this._addColumn(t,e,o);this._reIndexColumns(),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),this.redraw(),"fitColumns"!=this.table.modules.layout.getMode()&&i.reinitializeWidth(),this._verticalAlignHeaders(),this.table.rowManager.reinitialize()},ColumnManager.prototype.deregisterColumn=function(t){var e,o=t.getField();o&&delete this.columnsByField[o],e=this.columnsByIndex.indexOf(t),e>-1&&this.columnsByIndex.splice(e,1),e=this.columns.indexOf(t),e>-1&&this.columns.splice(e,1),this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.initialize(),this.redraw()},ColumnManager.prototype.redraw=function(t){t&&(Tabulator.prototype.helpers.elVisible(this.element)&&this._verticalAlignHeaders(),this.table.rowManager.resetScroll(),this.table.rowManager.reinitialize()),"fitColumns"==this.table.modules.layout.getMode()?this.table.modules.layout.layout():t?this.table.modules.layout.layout():this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layout(),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows),t&&(this.table.options.persistentLayout&&this.table.modExists("persistence",!0)&&this.table.modules.persistence.save("columns"),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.redraw()),this.table.footerManager.redraw()};var ColumnComponent=function(t){this._column=t,this.type="ColumnComponent"};ColumnComponent.prototype.getElement=function(){return this._column.getElement()},ColumnComponent.prototype.getDefinition=function(){return this._column.getDefinition()},ColumnComponent.prototype.getField=function(){return this._column.getField()},ColumnComponent.prototype.getCells=function(){var t=[];return this._column.cells.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getVisibility=function(){return this._column.visible},ColumnComponent.prototype.show=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.show()}):this._column.show()},ColumnComponent.prototype.hide=function(){this._column.isGroup?this._column.columns.forEach(function(t){t.hide()}):this._column.hide()},ColumnComponent.prototype.toggle=function(){this._column.visible?this.hide():this.show()},ColumnComponent.prototype.delete=function(){this._column.delete()},ColumnComponent.prototype.getSubColumns=function(){var t=[];return this._column.columns.length&&this._column.columns.forEach(function(e){t.push(e.getComponent())}),t},ColumnComponent.prototype.getParentColumn=function(){return this._column.parent instanceof Column&&this._column.parent.getComponent()},ColumnComponent.prototype._getSelf=function(){return this._column},ColumnComponent.prototype.scrollTo=function(){return this._column.table.columnManager.scrollToColumn(this._column)},ColumnComponent.prototype.getTable=function(){return this._column.table},ColumnComponent.prototype.headerFilterFocus=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterFocus(this._column)},ColumnComponent.prototype.reloadHeaderFilter=function(){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.reloadHeaderFilter(this._column)},ColumnComponent.prototype.setHeaderFilterValue=function(t){this._column.table.modExists("filter",!0)&&this._column.table.modules.filter.setHeaderFilterValue(this._column,t)};var Column=function t(e,o){var i=this;this.table=o.table,this.definition=e,this.parent=o,this.type="column",this.columns=[],this.cells=[],this.element=this.createElement(),this.contentElement=!1,this.groupElement=this.createGroupElement(),this.isGroup=!1,this.tooltip=!1,this.hozAlign="",this.field="",this.fieldStructure="",this.getFieldValue="",this.setFieldValue="",this.setField(this.definition.field),this.modules={},this.cellEvents={cellClick:!1,cellDblClick:!1,cellContext:!1,cellTap:!1,cellDblTap:!1,cellTapHold:!1},this.width=null,this.minWidth=null,this.widthFixed=!1,this.visible=!0,e.columns?(this.isGroup=!0,e.columns.forEach(function(e,o){var n=new t(e,i);i.attachColumn(n)}),i.checkColumnVisibility()):o.registerColumnField(this),e.rowHandle&&!1!==this.table.options.movableRows&&this.table.modExists("moveRow")&&this.table.modules.moveRow.setHandle(!0),this._buildHeader()};Column.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col"),t.setAttribute("role","columnheader"),t.setAttribute("aria-sort","none"),t},Column.prototype.createGroupElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-col-group-cols"),t},Column.prototype.setField=function(t){this.field=t,this.fieldStructure=t?this.table.options.nestedFieldSeparator?t.split(this.table.options.nestedFieldSeparator):[t]:[],this.getFieldValue=this.fieldStructure.length>1?this._getNestedData:this._getFlatData,this.setFieldValue=this.fieldStructure.length>1?this._setNesteData:this._setFlatData},Column.prototype.registerColumnPosition=function(t){this.parent.registerColumnPosition(t)},Column.prototype.registerColumnField=function(t){this.parent.registerColumnField(t)},Column.prototype.reRegisterPosition=function(){this.isGroup?this.columns.forEach(function(t){t.reRegisterPosition()}):this.registerColumnPosition(this)},Column.prototype.setTooltip=function(){var t=this,e=t.definition,o=e.headerTooltip||!1===e.tooltip?e.headerTooltip:t.table.options.tooltipsHeader;o?!0===o?e.field?t.table.modules.localize.bind("columns|"+e.field,function(o){t.element.setAttribute("title",o||e.title)}):t.element.setAttribute("title",e.title):("function"==typeof o&&!1===(o=o(t.getComponent()))&&(o=""),t.element.setAttribute("title",o)):t.element.setAttribute("title","")},Column.prototype._buildHeader=function(){for(var t=this,e=t.definition;t.element.firstChild;)t.element.removeChild(t.element.firstChild);e.headerVertical&&(t.element.classList.add("tabulator-col-vertical"),"flip"===e.headerVertical&&t.element.classList.add("tabulator-col-vertical-flip")),t.contentElement=t._bindEvents(),t.contentElement=t._buildColumnHeaderContent(),t.element.appendChild(t.contentElement),t.isGroup?t._buildGroupHeader():t._buildColumnHeader(),t.setTooltip(),t.table.options.resizableColumns&&t.table.modExists("resizeColumns")&&t.table.modules.resizeColumns.initializeColumn("header",t,t.element),e.headerFilter&&t.table.modExists("filter")&&t.table.modExists("edit")&&(void 0!==e.headerFilterPlaceholder&&e.field&&t.table.modules.localize.setHeaderFilterColumnPlaceholder(e.field,e.headerFilterPlaceholder),t.table.modules.filter.initializeColumn(t)),t.table.modExists("frozenColumns")&&t.table.modules.frozenColumns.initializeColumn(t),t.table.options.movableColumns&&!t.isGroup&&t.table.modExists("moveColumn")&&t.table.modules.moveColumn.initializeColumn(t),(e.topCalc||e.bottomCalc)&&t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.initializeColumn(t),t.element.addEventListener("mouseenter",function(e){t.setTooltip()})},Column.prototype._bindEvents=function(){var t,e,o,i=this,n=i.definition;"function"==typeof n.headerClick&&i.element.addEventListener("click",function(t){n.headerClick(t,i.getComponent())}),"function"==typeof n.headerDblClick&&i.element.addEventListener("dblclick",function(t){n.headerDblClick(t,i.getComponent())}),"function"==typeof n.headerContext&&i.element.addEventListener("contextmenu",function(t){n.headerContext(t,i.getComponent())}),"function"==typeof n.headerTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0}),i.element.addEventListener("touchend",function(t){o&&n.headerTap(t,i.getComponent()),o=!1})),"function"==typeof n.headerDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,n.headerDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),"function"==typeof n.headerTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,n.headerTapHold(t,i.getComponent())},1e3)}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null})),"function"==typeof n.cellClick&&(i.cellEvents.cellClick=n.cellClick),"function"==typeof n.cellDblClick&&(i.cellEvents.cellDblClick=n.cellDblClick),"function"==typeof n.cellContext&&(i.cellEvents.cellContext=n.cellContext),"function"==typeof n.cellTap&&(i.cellEvents.cellTap=n.cellTap),"function"==typeof n.cellDblTap&&(i.cellEvents.cellDblTap=n.cellDblTap),"function"==typeof n.cellTapHold&&(i.cellEvents.cellTapHold=n.cellTapHold),"function"==typeof n.cellEdited&&(i.cellEvents.cellEdited=n.cellEdited),"function"==typeof n.cellEditing&&(i.cellEvents.cellEditing=n.cellEditing),"function"==typeof n.cellEditCancelled&&(i.cellEvents.cellEditCancelled=n.cellEditCancelled)},Column.prototype._buildColumnHeader=function(){var t=this,e=t.definition,o=t.table;o.modExists("sort")&&o.modules.sort.initializeColumn(t,t.contentElement),o.modExists("format")&&o.modules.format.initializeColumn(t),void 0!==e.editor&&o.modExists("edit")&&o.modules.edit.initializeColumn(t),void 0!==e.validator&&o.modExists("validate")&&o.modules.validate.initializeColumn(t),o.modExists("mutator")&&o.modules.mutator.initializeColumn(t),o.modExists("accessor")&&o.modules.accessor.initializeColumn(t),_typeof(o.options.responsiveLayout)&&o.modExists("responsiveLayout")&&o.modules.responsiveLayout.initializeColumn(t),void 0!==e.visible&&(e.visible?t.show(!0):t.hide(!0)),e.cssClass&&t.element.classList.add(e.cssClass),e.field&&this.element.setAttribute("tabulator-field",e.field),t.setMinWidth(void 0===e.minWidth?t.table.options.columnMinWidth:e.minWidth),t.reinitializeWidth(),t.tooltip=t.definition.tooltip||!1===t.definition.tooltip?t.definition.tooltip:t.table.options.tooltips,t.hozAlign=void 0===t.definition.align?"":t.definition.align},Column.prototype._buildColumnHeaderContent=function(){var t=this,e=(t.definition,t.table,document.createElement("div"));return e.classList.add("tabulator-col-content"),e.appendChild(t._buildColumnHeaderTitle()),e},Column.prototype._buildColumnHeaderTitle=function(){var t=this,e=t.definition,o=t.table,i=document.createElement("div");if(i.classList.add("tabulator-col-title"),e.editableTitle){var n=document.createElement("input");n.classList.add("tabulator-title-editor"),n.addEventListener("click",function(t){t.stopPropagation(),n.focus()}),n.addEventListener("change",function(){e.title=n.value,o.options.columnTitleChanged.call(t.table,t.getComponent())}),i.appendChild(n),e.field?o.modules.localize.bind("columns|"+e.field,function(t){n.value=t||e.title||" "}):n.value=e.title||" "}else e.field?o.modules.localize.bind("columns|"+e.field,function(o){t._formatColumnHeaderTitle(i,o||e.title||" ")}):t._formatColumnHeaderTitle(i,e.title||" ");return i},Column.prototype._formatColumnHeaderTitle=function(t,e){var o,i,n,l;if(this.definition.titleFormatter&&this.table.modExists("format"))switch(o=this.table.modules.format.getFormatter(this.definition.titleFormatter),l={getValue:function(){return e},getElement:function(){return t}},n=this.definition.titleFormatterParams||{},n="function"==typeof n?n():n,i=o.call(this.table.modules.format,l,n),void 0===i?"undefined":_typeof(i)){case"object":i instanceof Node?this.element.appendChild(i):(this.element.innerHTML="",console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:",i));break;case"undefined":case"null":this.element.innerHTML="";break;default:this.element.innerHTML=i}else t.innerHTML=e},Column.prototype._buildGroupHeader=function(){this.element.classList.add("tabulator-col-group"),this.element.setAttribute("role","columngroup"),this.element.setAttribute("aria-title",this.definition.title),this.element.appendChild(this.groupElement)},Column.prototype._getFlatData=function(t){return t[this.field]},Column.prototype._getNestedData=function(t){for(var e,o=t,i=this.fieldStructure,n=i.length,l=0;le&&(e=o)}),e&&t.setWidthActual(e+1))},Column.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Column.prototype.getComponent=function(){return new ColumnComponent(this)};var RowManager=function(t){this.table=t,this.element=this.createHolderElement(),this.tableElement=this.createTableElement(),this.columnManager=null,this.height=0,this.firstRender=!1,this.renderMode="classic",this.rows=[],this.activeRows=[],this.activeRowsCount=0,this.displayRows=[],this.displayRowsCount=0,this.scrollTop=0,this.scrollLeft=0,this.vDomRowHeight=20,this.vDomTop=0,this.vDomBottom=0,this.vDomScrollPosTop=0,this.vDomScrollPosBottom=0,this.vDomTopPad=0,this.vDomBottomPad=0,this.vDomMaxRenderChain=90,this.vDomWindowBuffer=0,this.vDomWindowMinTotalRows=20,this.vDomWindowMinMarginRows=5,this.vDomTopNewRows=[],this.vDomBottomNewRows=[]};RowManager.prototype.createHolderElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-tableHolder"),t.setAttribute("tabindex",0),t},RowManager.prototype.createTableElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-table"),t},RowManager.prototype.getElement=function(){return this.element},RowManager.prototype.getTableElement=function(){return this.tableElement},RowManager.prototype.getRowPosition=function(t,e){return e?this.activeRows.indexOf(t):this.rows.indexOf(t)},RowManager.prototype.setColumnManager=function(t){this.columnManager=t},RowManager.prototype.initialize=function(){var t=this;t.setRenderMode(),t.element.appendChild(t.tableElement),t.firstRender=!0,t.element.addEventListener("scroll",function(){var e=t.element.scrollLeft;t.scrollLeft!=e&&(t.columnManager.scrollHorizontal(e),t.table.options.groupBy&&t.table.modules.groupRows.scrollHeaders(e),t.table.modExists("columnCalcs")&&t.table.modules.columnCalcs.scrollHorizontal(e)),t.scrollLeft=e}),"virtual"===this.renderMode&&t.element.addEventListener("scroll",function(){var e=t.element.scrollTop,o=t.scrollTop>e;t.scrollTop!=e?(t.scrollTop=e,t.scrollVertical(o),"scroll"==t.table.options.ajaxProgressiveLoad&&t.table.modules.ajax.nextPage(t.element.scrollHeight-t.element.clientHeight-e)):t.scrollTop=e})},RowManager.prototype.findRow=function(t){var e=this;if("object"!=(void 0===t?"undefined":_typeof(t))){if(void 0===t||null===t)return!1;return e.rows.find(function(o){return o.data[e.table.options.index]==t})||!1}if(t instanceof Row)return t;if(t instanceof RowComponent)return t._getSelf()||!1;if(t instanceof HTMLElement){return e.rows.find(function(e){return e.element===t})||!1}return!1},RowManager.prototype.getRowFromPosition=function(t,e){return e?this.activeRows[t]:this.rows[t]},RowManager.prototype.scrollToRow=function(t,e,o){var i,n=this,l=this.getDisplayRows().indexOf(t),s=t.getElement(),a=0;return new Promise(function(t,r){if(l>-1){if(void 0===e&&(e=n.table.options.scrollToRowPosition),void 0===o&&(o=n.table.options.scrollToRowIfVisible),"nearest"===e)switch(n.renderMode){case"classic":i=Tabulator.prototype.helpers.elOffset(s).top,e=Math.abs(n.element.scrollTop-i)>Math.abs(n.element.scrollTop+n.element.clientHeight-i)?"bottom":"top";break;case"virtual":e=Math.abs(n.vDomTop-l)>Math.abs(n.vDomBottom-l)?"bottom":"top"}if(!o&&Tabulator.prototype.helpers.elVisible(s)&&(a=Tabulator.prototype.helpers.elOffset(s).top-Tabulator.prototype.helpers.elOffset(n.element).top)>0&&a-1&&this.activeRows.splice(o,1),e>-1&&this.rows.splice(e,1),this.setActiveRows(this.activeRows),this.displayRowIterator(function(e){var o=e.indexOf(t);o>-1&&e.splice(o,1)}),this.reRenderInPosition(),this.table.options.rowDeleted.call(this.table,t.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.groupRows.updateGroupRows(!0):this.table.options.pagination&&this.table.modExists("page")?this.refreshActiveData(!1,!1,!0):this.table.options.pagination&&this.table.modExists("page")&&this.refreshActiveData("page")},RowManager.prototype.addRow=function(t,e,o,i){var n=this.addRowActual(t,e,o,i);return this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowAdd",n,{data:t,pos:e,index:o}),n},RowManager.prototype.addRows=function(t,e,o){var i=this,n=this,l=0,s=[];return new Promise(function(a,r){e=i.findAddRowPos(e),Array.isArray(t)||(t=[t]),l=t.length-1,(void 0===o&&e||void 0!==o&&!e)&&t.reverse(),t.forEach(function(t,i){var l=n.addRow(t,e,o,!0);s.push(l)}),i.table.options.groupBy&&i.table.modExists("groupRows")?i.table.modules.groupRows.updateGroupRows(!0):i.table.options.pagination&&i.table.modExists("page")?i.refreshActiveData(!1,!1,!0):i.reRenderInPosition(), -i.table.modExists("columnCalcs")&&i.table.modules.columnCalcs.recalc(i.table.rowManager.activeRows),a(s)})},RowManager.prototype.findAddRowPos=function(t){return void 0===t&&(t=this.table.options.addRowPos),"pos"===t&&(t=!0),"bottom"===t&&(t=!1),t},RowManager.prototype.addRowActual=function(t,e,o,i){var n,l=t instanceof Row?t:new Row(t||{},this),s=this.findAddRowPos(e);if(!o&&this.table.options.pagination&&"page"==this.table.options.paginationAddRow&&(n=this.getDisplayRows(),s?n.length?o=n[0]:this.activeRows.length&&(o=this.activeRows[this.activeRows.length-1],s=!1):n.length&&(o=n[n.length-1],s=!(n.length1&&(!o||o&&-1==a.indexOf(o)?s?a[0]!==l&&(o=a[0],this._moveRowInArray(l.getGroup().rows,l,o,s)):a[a.length-1]!==l&&(o=a[a.length-1],this._moveRowInArray(l.getGroup().rows,l,o,s)):this._moveRowInArray(l.getGroup().rows,l,o,s))}if(o){var r=this.rows.indexOf(o),u=this.activeRows.indexOf(o);this.displayRowIterator(function(t){var e=t.indexOf(o);e>-1&&t.splice(s?e:e+1,0,l)}),u>-1&&this.activeRows.splice(s?u:u+1,0,l),r>-1&&this.rows.splice(s?r:r+1,0,l)}else s?(this.displayRowIterator(function(t){t.unshift(l)}),this.activeRows.unshift(l),this.rows.unshift(l)):(this.displayRowIterator(function(t){t.push(l)}),this.activeRows.push(l),this.rows.push(l));return this.setActiveRows(this.activeRows),this.table.options.rowAdded.call(this.table,l.getComponent()),this.table.options.dataEdited.call(this.table,this.getData()),i||this.reRenderInPosition(),l},RowManager.prototype.moveRow=function(t,e,o){this.table.options.history&&this.table.modExists("history")&&this.table.modules.history.action("rowMove",t,{pos:this.getRowPosition(t),to:e,after:o}),this.moveRowActual(t,e,o),this.table.options.rowMoved.call(this.table,t.getComponent())},RowManager.prototype.moveRowActual=function(t,e,o){var i=this;if(this._moveRowInArray(this.rows,t,e,o),this._moveRowInArray(this.activeRows,t,e,o),this.displayRowIterator(function(n){i._moveRowInArray(n,t,e,o)}),this.table.options.groupBy&&this.table.modExists("groupRows")){var n=e.getGroup(),l=t.getGroup();n===l?this._moveRowInArray(n.rows,t,e,o):(l&&l.removeRow(t),n.insertRow(t,e,o))}},RowManager.prototype._moveRowInArray=function(t,e,o,i){var n,l,s,a;if(e!==o&&(n=t.indexOf(e),n>-1&&(t.splice(n,1),l=t.indexOf(o),l>-1?i?t.splice(l+1,0,e):t.splice(l,0,e):t.splice(n,0,e)),t===this.getDisplayRows())){s=nn?l:n+1;for(var r=s;r<=a;r++)t[r]&&this.styleRow(t[r],r)}},RowManager.prototype.clearData=function(){this.setData([])},RowManager.prototype.getRowIndex=function(t){return this.findRowIndex(t,this.rows)},RowManager.prototype.getDisplayRowIndex=function(t){var e=this.getDisplayRows().indexOf(t);return e>-1&&e},RowManager.prototype.nextDisplayRow=function(t,e){var o=this.getDisplayRowIndex(t),i=!1;return!1!==o&&o-1)&&o},RowManager.prototype.getData=function(t,e){var o=this,i=[];return(t?o.activeRows:o.rows).forEach(function(t){i.push(t.getData(e||"data"))}),i},RowManager.prototype.getHtml=function(t){var e=this.getData(t),o=[],i="",n="";return this.table.columnManager.getColumns().forEach(function(t){var e=t.getDefinition();t.visible&&!e.hideInHtml&&(i+=""+(e.title||"")+"",o.push(t))}),e.forEach(function(t){var e="";o.forEach(function(o){var i=o.getFieldValue(t);void 0!==i&&null!==i||(i=":"),e+=""+i+""}),n+=""+e+""}),"\n\t\t\n\t\t"+i+"\n\t\t\n\t\t"+n+"\n\t\t
"},RowManager.prototype.getComponents=function(t){var e=this,o=[];return(t?e.activeRows:e.rows).forEach(function(t){o.push(t.getComponent())}),o},RowManager.prototype.getDataCount=function(t){return t?this.rows.length:this.activeRows.length},RowManager.prototype._genRemoteRequest=function(){var t=this,e=t.table,o=e.options,i={};if(e.modExists("page")){if(o.ajaxSorting){var n=t.table.modules.sort.getSort();n.forEach(function(t){delete t.column}),i[t.table.modules.page.paginationDataSentNames.sorters]=n}if(o.ajaxFiltering){var l=t.table.modules.filter.getFilters(!0,!0);i[t.table.modules.page.paginationDataSentNames.filters]=l}t.table.modules.ajax.setParams(i,!0)}e.modules.ajax.sendRequest().then(function(e){t.setData(e)}).catch(function(t){})},RowManager.prototype.filterRefresh=function(){var t=this.table,e=t.options,o=this.scrollLeft;e.ajaxFiltering?"remote"==e.pagination&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1)):e.ajaxProgressiveLoad?t.modules.ajax.loadData():this._genRemoteRequest():this.refreshActiveData("filter"),this.scrollHorizontal(o)},RowManager.prototype.sorterRefresh=function(){var t=this.table,e=this.table.options,o=this.scrollLeft;e.ajaxSorting?("remote"==e.pagination||e.progressiveLoad)&&t.modExists("page")?(t.modules.page.reset(!0),t.modules.page.setPage(1)):e.ajaxProgressiveLoad?t.modules.ajax.loadData():this._genRemoteRequest():this.refreshActiveData("sort"),this.scrollHorizontal(o)},RowManager.prototype.scrollHorizontal=function(t){this.scrollLeft=t,this.element.scrollLeft=t,this.table.options.groupBy&&this.table.modules.groupRows.scrollHeaders(t),this.table.modExists("columnCalcs")&&this.table.modules.columnCalcs.scrollHorizontal(t)},RowManager.prototype.refreshActiveData=function(t,e,o){var i,n=this,l=this.table;switch(t||(t="all"),l.options.selectable&&!l.options.selectablePersistence&&l.modExists("selectRow")&&l.modules.selectRow.deselectRows(),t){case"all":case"filter":e?e=!1:l.modExists("filter")?n.setActiveRows(l.modules.filter.filter(n.rows)):n.setActiveRows(n.rows.slice(0));case"sort":e?e=!1:l.modExists("sort")&&l.modules.sort.sort();case"display":this.resetDisplayRows();case"freeze":e?e=!1:this.table.modExists("frozenRows")&&l.modules.frozenRows.isFrozen()&&(l.modules.frozenRows.getDisplayIndex()||l.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.frozenRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.frozenRows.getRows(this.getDisplayRows(i-1)),i))&&l.modules.frozenRows.setDisplayIndex(i));case"group":e?e=!1:l.options.groupBy&&l.modExists("groupRows")&&(l.modules.groupRows.getDisplayIndex()||l.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.groupRows.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.groupRows.getRows(this.getDisplayRows(i-1)),i))&&l.modules.groupRows.setDisplayIndex(i));case"tree":e?e=!1:l.options.dataTree&&l.modExists("dataTree")&&(l.modules.dataTree.getDisplayIndex()||l.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.dataTree.getDisplayIndex(),!0!==(i=n.setDisplayRows(l.modules.dataTree.getRows(this.getDisplayRows(i-1)),i))&&l.modules.dataTree.setDisplayIndex(i)),l.options.pagination&&l.modExists("page")&&!o&&"local"==l.modules.page.getMode()&&l.modules.page.reset();case"page":e?e=!1:l.options.pagination&&l.modExists("page")&&(l.modules.page.getDisplayIndex()||l.modules.page.setDisplayIndex(this.getNextDisplayIndex()),i=l.modules.page.getDisplayIndex(),"local"==l.modules.page.getMode()&&l.modules.page.setMaxRows(this.getDisplayRows(i-1).length),!0!==(i=n.setDisplayRows(l.modules.page.getRows(this.getDisplayRows(i-1)),i))&&l.modules.page.setDisplayIndex(i))}Tabulator.prototype.helpers.elVisible(n.element)&&(o?n.reRenderInPosition():(n.renderTable(),l.options.layoutColumnsOnNewData&&n.table.columnManager.redraw(!0))),l.modExists("columnCalcs")&&l.modules.columnCalcs.recalc(this.activeRows)},RowManager.prototype.setActiveRows=function(t){this.activeRows=t,this.activeRowsCount=this.activeRows.length},RowManager.prototype.resetDisplayRows=function(){this.displayRows=[],this.displayRows.push(this.activeRows.slice(0)),this.displayRowsCount=this.displayRows[0].length,this.table.modExists("frozenRows")&&this.table.modules.frozenRows.setDisplayIndex(0),this.table.options.groupBy&&this.table.modExists("groupRows")&&this.table.modules.groupRows.setDisplayIndex(0),this.table.options.pagination&&this.table.modExists("page")&&this.table.modules.page.setDisplayIndex(0)},RowManager.prototype.getNextDisplayIndex=function(){return this.displayRows.length},RowManager.prototype.setDisplayRows=function(t,e){var o=!0;return e&&void 0!==this.displayRows[e]?(this.displayRows[e]=t,o=!0):(this.displayRows.push(t),o=e=this.displayRows.length-1),e==this.displayRows.length-1&&(this.displayRowsCount=this.displayRows[this.displayRows.length-1].length),o},RowManager.prototype.getDisplayRows=function(t){return void 0===t?this.displayRows.length?this.displayRows[this.displayRows.length-1]:[]:this.displayRows[t]||[]},RowManager.prototype.displayRowIterator=function(t){this.displayRows.forEach(t),this.displayRowsCount=this.displayRows[this.displayRows.length-1].length},RowManager.prototype.getRows=function(){return this.rows},RowManager.prototype.reRenderInPosition=function(t){if("virtual"==this.getRenderMode()){for(var e=this.element.scrollTop,o=!1,i=!1,n=this.scrollLeft,l=this.getDisplayRows(),s=this.vDomTop;s<=this.vDomBottom;s++)if(l[s]){var a=e-l[s].getElement().offsetTop;if(!(!1===i||Math.abs(a)this.element.clientWidth?this.element.offsetHeight-this.element.clientHeight:0)),this.scrollTop=Math.min(this.scrollTop,this.element.scrollHeight-this.height),this.element.scrollWidth>this.element.offsetWidth&&(this.scrollTop+=this.element.offsetHeight-this.element.clientHeight),this.vDomScrollPosTop=this.scrollTop,this.vDomScrollPosBottom=this.scrollTop,l.scrollTop=this.scrollTop,n.style.minWidth=h?i.table.columnManager.getWidth()+"px":"",i.table.options.groupBy&&"fitDataFill"!=i.table.modules.layout.getMode()&&i.displayRowsCount==i.table.modules.groupRows.countGroups()&&(i.tableElement.style.minWidth=i.table.columnManager.getWidth())}else this.renderEmptyScroll()},RowManager.prototype.scrollVertical=function(t){var e=this.scrollTop-this.vDomScrollPosTop,o=this.scrollTop-this.vDomScrollPosBottom,i=2*this.vDomWindowBuffer;if(-e>i||o>i){var n=this.scrollLeft;this._virtualRenderFill(Math.floor(this.element.scrollTop/this.element.scrollHeight*this.displayRowsCount)),this.scrollHorizontal(n)}else t?(e<0&&this._addTopRow(-e),e<0&&this.vDomScrollHeight-this.scrollTop>this.vDomWindowBuffer&&this._removeBottomRow(-o)):(e>=0&&this.scrollTop>this.vDomWindowBuffer&&this._removeTopRow(e),o>=0&&this._addBottomRow(o))},RowManager.prototype._addTopRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomTop){var n=this.vDomTop-1,l=i[n],s=l.getHeight()||this.vDomRowHeight;t>=s&&(this.styleRow(l,n),o.insertBefore(l.getElement(),o.firstChild),l.initialized&&l.heightInitialized||(this.vDomTopNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomTopPad-=s,this.vDomTopPad<0&&(this.vDomTopPad=n*this.vDomRowHeight),n||(this.vDomTopPad=0),o.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop-=s,this.vDomTop--),t=-(this.scrollTop-this.vDomScrollPosTop),e=(i[this.vDomTop-1].getHeight()||this.vDomRowHeight)?this._addTopRow(t,e+1):this._quickNormalizeRowHeight(this.vDomTopNewRows)}},RowManager.prototype._removeTopRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomTop],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode.removeChild(n),this.vDomTopPad+=i,e.style.paddingTop=this.vDomTopPad+"px",this.vDomScrollPosTop+=this.vDomTop?i:i+this.vDomWindowBuffer,this.vDomTop++,t=this.scrollTop-this.vDomScrollPosTop,this._removeTopRow(t)}},RowManager.prototype._addBottomRow=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=this.tableElement,i=this.getDisplayRows();if(this.vDomBottom=s&&(this.styleRow(l,n),o.appendChild(l.getElement()),l.initialized&&l.heightInitialized||(this.vDomBottomNewRows.push(l),l.heightInitialized||l.clearCellHeight()),l.initialize(),this.vDomBottomPad-=s,(this.vDomBottomPad<0||n==this.displayRowsCount-1)&&(this.vDomBottomPad=0),o.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom+=s,this.vDomBottom++),t=this.scrollTop-this.vDomScrollPosBottom,e=(i[this.vDomBottom+1].getHeight()||this.vDomRowHeight)?this._addBottomRow(t,e+1):this._quickNormalizeRowHeight(this.vDomBottomNewRows)}},RowManager.prototype._removeBottomRow=function(t){var e=this.tableElement,o=this.getDisplayRows()[this.vDomBottom],i=o.getHeight()||this.vDomRowHeight;if(t>=i){var n=o.getElement();n.parentNode&&n.parentNode.removeChild(n),this.vDomBottomPad+=i,this.vDomBottomPad<0&&(this.vDomBottomPad=0),e.style.paddingBottom=this.vDomBottomPad+"px",this.vDomScrollPosBottom-=i,this.vDomBottom--,t=-(this.scrollTop-this.vDomScrollPosBottom),this._removeBottomRow(t)}},RowManager.prototype._quickNormalizeRowHeight=function(t){t.forEach(function(t){t.calcHeight()}),t.forEach(function(t){t.setCellHeight()}),t.length=0},RowManager.prototype.normalizeHeight=function(){this.activeRows.forEach(function(t){t.normalizeHeight()})},RowManager.prototype.adjustTableSize=function(){if("virtual"===this.renderMode){this.height=this.element.clientHeight,this.vDomWindowBuffer=this.table.options.virtualDomBuffer||this.height;var t=this.columnManager.getElement().offsetHeight+(this.table.footerManager&&!this.table.footerManager.external?this.table.footerManager.getElement().offsetHeight:0);this.element.style.minHeight="calc(100% - "+t+"px)",this.element.style.height="calc(100% - "+t+"px)",this.element.style.maxHeight="calc(100% - "+t+"px)"}},RowManager.prototype.reinitialize=function(){this.rows.forEach(function(t){t.reinitialize()})},RowManager.prototype.redraw=function(t){var e=this.scrollLeft;this.adjustTableSize(),t?this.renderTable():("classic"==self.renderMode?self.table.options.groupBy?self.refreshActiveData("group",!1,!1):this._simpleRender():(this.reRenderInPosition(),this.scrollHorizontal(e)),this.displayRowsCount||this.table.options.placeholder&&this.getElement().appendChild(this.table.options.placeholder))},RowManager.prototype.resetScroll=function(){if(this.element.scrollLeft=0,this.element.scrollTop=0,"ie"===this.table.browser){var t=document.createEvent("Event");t.initEvent("scroll",!1,!0),this.element.dispatchEvent(t)}else this.element.dispatchEvent(new Event("scroll"))};var RowComponent=function(t){this._row=t};RowComponent.prototype.getData=function(t){return this._row.getData(t)},RowComponent.prototype.getElement=function(){return this._row.getElement()},RowComponent.prototype.getCells=function(){var t=[];return this._row.getCells().forEach(function(e){t.push(e.getComponent())}),t},RowComponent.prototype.getCell=function(t){var e=this._row.getCell(t);return!!e&&e.getComponent()},RowComponent.prototype.getIndex=function(){return this._row.getData("data")[this._row.table.options.index]},RowComponent.prototype.getPosition=function(t){return this._row.table.rowManager.getRowPosition(this._row,t)},RowComponent.prototype.delete=function(){return this._row.delete()},RowComponent.prototype.scrollTo=function(){return this._row.table.rowManager.scrollToRow(this._row)},RowComponent.prototype.update=function(t){return this._row.updateData(t)},RowComponent.prototype.normalizeHeight=function(){this._row.normalizeHeight(!0)},RowComponent.prototype.select=function(){this._row.table.modules.selectRow.selectRows(this._row)},RowComponent.prototype.deselect=function(){this._row.table.modules.selectRow.deselectRows(this._row)},RowComponent.prototype.toggleSelect=function(){this._row.table.modules.selectRow.toggleRow(this._row)},RowComponent.prototype.isSelected=function(){return this._row.table.modules.selectRow.isRowSelected(this._row)},RowComponent.prototype._getSelf=function(){return this._row},RowComponent.prototype.freeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.freezeRow(this._row)},RowComponent.prototype.unfreeze=function(){this._row.table.modExists("frozenRows",!0)&&this._row.table.modules.frozenRows.unfreezeRow(this._row)},RowComponent.prototype.treeCollapse=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.collapseRow(this._row)},RowComponent.prototype.treeExpand=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.expandRow(this._row)},RowComponent.prototype.treeToggle=function(){this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.toggleRow(this._row)},RowComponent.prototype.getTreeParent=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeParent(this._row)},RowComponent.prototype.getTreeChildren=function(){return!!this._row.table.modExists("dataTree",!0)&&this._row.table.modules.dataTree.getTreeChildren(this._row)},RowComponent.prototype.reformat=function(){return this._row.reinitialize()},RowComponent.prototype.getGroup=function(){return this._row.getGroup().getComponent()},RowComponent.prototype.getTable=function(){return this._row.table},RowComponent.prototype.getNextRow=function(){return this._row.nextRow()},RowComponent.prototype.getPrevRow=function(){return this._row.prevRow()};var Row=function(t,e){this.table=e.table,this.parent=e,this.data={},this.type="row",this.element=this.createElement(),this.modules={},this.cells=[],this.height=0,this.outerHeight=0,this.initialized=!1,this.heightInitialized=!1,this.setData(t),this.generateElement()};Row.prototype.createElement=function(){var t=document.createElement("div");return t.classList.add("tabulator-row"),t.setAttribute("role","row"),t},Row.prototype.getElement=function(){return this.element},Row.prototype.generateElement=function(){var t,e,o,i=this;!1!==i.table.options.selectable&&i.table.modExists("selectRow")&&i.table.modules.selectRow.initializeRow(this),!1!==i.table.options.movableRows&&i.table.modExists("moveRow")&&i.table.modules.moveRow.initializeRow(this),!1!==i.table.options.dataTree&&i.table.modExists("dataTree")&&i.table.modules.dataTree.initializeRow(this),i.table.options.rowClick&&i.element.addEventListener("click",function(t){i.table.options.rowClick(t,i.getComponent())}),i.table.options.rowDblClick&&i.element.addEventListener("dblclick",function(t){i.table.options.rowDblClick(t,i.getComponent())}),i.table.options.rowContext&&i.element.addEventListener("contextmenu",function(t){i.table.options.rowContext(t,i.getComponent())}),i.table.options.rowTap&&(o=!1,i.element.addEventListener("touchstart",function(t){o=!0}),i.element.addEventListener("touchend",function(t){o&&i.table.options.rowTap(t,i.getComponent()),o=!1})),i.table.options.rowDblTap&&(t=null,i.element.addEventListener("touchend",function(e){t?(clearTimeout(t),t=null,i.table.options.rowDblTap(e,i.getComponent())):t=setTimeout(function(){clearTimeout(t),t=null},300)})),i.table.options.rowTapHold&&(e=null,i.element.addEventListener("touchstart",function(t){clearTimeout(e),e=setTimeout(function(){clearTimeout(e),e=null,o=!1,i.table.options.rowTapHold(t,i.getComponent())},1e3)}),i.element.addEventListener("touchend",function(t){clearTimeout(e),e=null}))},Row.prototype.generateCells=function(){this.cells=this.table.columnManager.generateCells(this)},Row.prototype.initialize=function(t){var e=this;if(!e.initialized||t){for(e.deleteCells();e.element.firstChild;)e.element.removeChild(e.element.firstChild);this.table.modExists("frozenColumns")&&this.table.modules.frozenColumns.layoutRow(this),this.generateCells(),e.cells.forEach(function(t){e.element.appendChild(t.getElement()),t.cellRendered()}),t&&e.normalizeHeight(),e.table.options.dataTree&&e.table.modExists("dataTree")&&e.table.modules.dataTree.layoutRow(this),"collapse"===e.table.options.responsiveLayout&&e.table.modExists("responsiveLayout")&&e.table.modules.responsiveLayout.layoutRow(this),e.table.options.rowFormatter&&e.table.options.rowFormatter(e.getComponent()),e.table.options.resizableRows&&e.table.modExists("resizeRows")&&e.table.modules.resizeRows.initializeRow(e),e.initialized=!0}},Row.prototype.reinitializeHeight=function(){this.heightInitialized=!1,null!==this.element.offsetParent&&this.normalizeHeight(!0)},Row.prototype.reinitialize=function(){this.initialized=!1,this.heightInitialized=!1,this.height=0,null!==this.element.offsetParent&&this.initialize(!0)},Row.prototype.calcHeight=function(){var t=0,e=this.table.options.resizableRows?this.element.clientHeight:0;this.cells.forEach(function(e){var o=e.getHeight();o>t&&(t=o)}),this.height=Math.max(t,e),this.outerHeight=this.element.offsetHeight},Row.prototype.setCellHeight=function(){var t=this.height;this.cells.forEach(function(e){e.setHeight(t)}),this.heightInitialized=!0},Row.prototype.clearCellHeight=function(){this.cells.forEach(function(t){t.clearHeight()})},Row.prototype.normalizeHeight=function(t){t&&this.clearCellHeight(),this.calcHeight(),this.setCellHeight()},Row.prototype.setHeight=function(t){this.height=t,this.setCellHeight()},Row.prototype.setHeight=function(t,e){(this.height!=t||e)&&(this.height=t,this.setCellHeight(),this.outerHeight=this.element.offsetHeight)},Row.prototype.getHeight=function(){return this.outerHeight},Row.prototype.getWidth=function(){return this.element.offsetWidth},Row.prototype.deleteCell=function(t){var e=this.cells.indexOf(t);e>-1&&this.cells.splice(e,1)},Row.prototype.setData=function(t){var e=this;e.table.modExists("mutator")?e.data=e.table.modules.mutator.transformRow(t,"data"):e.data=t},Row.prototype.updateData=function(t){var e=this,o=this;return new Promise(function(i,n){"string"==typeof t&&(t=JSON.parse(t)),o.table.modExists("mutator")&&(t=o.table.modules.mutator.transformRow(t,"data",!0));for(var l in t)o.data[l]=t[l];for(var l in t){var s=e.getCell(l);s&&s.getValue()!=t[l]&&s.setValueProcessData(t[l])}Tabulator.prototype.helpers.elVisible(e.element)?(o.normalizeHeight(),o.table.options.rowFormatter&&o.table.options.rowFormatter(o.getComponent())):(e.initialized=!1,e.height=0),o.table.options.rowUpdated.call(e.table,o.getComponent()),i()})},Row.prototype.getData=function(t){var e=this;return t?e.table.modExists("accessor")?e.table.modules.accessor.transformRow(e.data,t):void 0:this.data},Row.prototype.getCell=function(t){return t=this.table.columnManager.findColumn(t),this.cells.find(function(e){return e.column===t})},Row.prototype.getCellIndex=function(t){return this.cells.findIndex(function(e){return e===t})},Row.prototype.findNextEditableCell=function(t){var e=!1;if(t0)for(var o=t-1;o>=0;o--){var i=this.cells[o],n=!0;if(i.column.modules.edit&&Tabulator.prototype.helpers.elVisible(i.getElement())&&("function"==typeof i.column.modules.edit.check&&(n=i.column.modules.edit.check(i.getComponent())),n)){e=i;break}}return e},Row.prototype.getCells=function(){return this.cells},Row.prototype.nextRow=function(){var t=this.table.rowManager.nextDisplayRow(this,!0);return!!t&&t.getComponent()},Row.prototype.prevRow=function(){var t=this.table.rowManager.prevDisplayRow(this,!0);return!!t&&t.getComponent()},Row.prototype.delete=function(){var t=this;return new Promise(function(e,o){var i=t.table.rowManager.getRowIndex(t);t.deleteActual(),t.table.options.history&&t.table.modExists("history")&&(i&&(i=t.table.rowManager.rows[i-1]),t.table.modules.history.action("rowDelete",t,{data:t.getData(),pos:!i,index:i})),e()})},Row.prototype.deleteActual=function(){this.table.rowManager.getRowIndex(this);this.table.modExists("selectRow")&&this.table.modules.selectRow._deselectRow(this,!0),this.table.rowManager.deleteRow(this),this.deleteCells(),this.initialized=!1,this.heightInitialized=!1,this.modules.group&&this.modules.group.removeRow(this),this.table.modExists("columnCalcs")&&(this.table.options.groupBy&&this.table.modExists("groupRows")?this.table.modules.columnCalcs.recalcRowGroup(this):this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows))},Row.prototype.deleteCells=function(){for(var t=this.cells.length,e=0;e-1?(this.browser="ie",this.browserSlow=!0):t.indexOf("Edge")>-1?(this.browser="edge",this.browserSlow=!0):t.indexOf("Firefox")>-1?(this.browser="firefox",this.browserSlow=!1):(this.browser="other",this.browserSlow=!1)},Tabulator.prototype.setData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o)},Tabulator.prototype._setData=function(t,e,o,i){var n=this;return"string"!=typeof t?t?n.rowManager.setData(t,i):n.modExists("ajax")&&(n.modules.ajax.getUrl||n.options.ajaxURLGenerator)?"remote"==n.options.pagination&&n.modExists("page",!0)?(n.modules.page.reset(!0),n.modules.page.setPage(1)):n.modules.ajax.loadData(i):n.rowManager.setData([],i):0==t.indexOf("{")||0==t.indexOf("[")?n.rowManager.setData(JSON.parse(t),i):n.modExists("ajax",!0)?(e&&n.modules.ajax.setParams(e),o&&n.modules.ajax.setConfig(o),n.modules.ajax.setUrl(t),"remote"==n.options.pagination&&n.modExists("page",!0)?(n.modules.page.reset(!0),n.modules.page.setPage(1)):n.modules.ajax.loadData(i)):void 0},Tabulator.prototype.clearData=function(){this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this.rowManager.clearData()},Tabulator.prototype.getData=function(t){return this.rowManager.getData(t)},Tabulator.prototype.getDataCount=function(t){return this.rowManager.getDataCount(t)},Tabulator.prototype.searchRows=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("rows",t,e,o)},Tabulator.prototype.searchData=function(t,e,o){if(this.modExists("filter",!0))return this.modules.filter.search("data",t,e,o)},Tabulator.prototype.getHtml=function(t){return this.rowManager.getHtml(t)},Tabulator.prototype.getAjaxUrl=function(){if(this.modExists("ajax",!0))return this.modules.ajax.getUrl()},Tabulator.prototype.replaceData=function(t,e,o){return this.modExists("ajax")&&this.modules.ajax.blockActiveRequest(),this._setData(t,e,o,!0)},Tabulator.prototype.updateData=function(t){var e=this,o=this,i=0;return new Promise(function(n,l){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);e&&(i++,e.updateData(t).then(function(){--i||n()}))}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.addData=function(t,e,o){var i=this;return new Promise(function(n,l){i.modExists("ajax")&&i.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?i.rowManager.addRows(t,e,o).then(function(t){var e=[];t.forEach(function(t){e.push(t.getComponent())}),n(e)}):(console.warn("Update Error - No data provided"),l("Update Error - No data provided"))})},Tabulator.prototype.updateOrAddData=function(t){var e=this,o=this,i=[],n=0;return new Promise(function(l,s){e.modExists("ajax")&&e.modules.ajax.blockActiveRequest(),"string"==typeof t&&(t=JSON.parse(t)),t?t.forEach(function(t){var e=o.rowManager.findRow(t[o.options.index]);n++,e?e.updateData(t).then(function(){n--,i.push(e.getComponent()),n||l(i)}):o.rowManager.addRows(t).then(function(t){n--,i.push(t[0].getComponent()),n||l(i)})}):(console.warn("Update Error - No data provided"),s("Update Error - No data provided"))})},Tabulator.prototype.getRow=function(t){var e=this.rowManager.findRow(t);return e?e.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.getRowFromPosition=function(t,e){var o=this.rowManager.getRowFromPosition(t,e);return o?o.getComponent():(console.warn("Find Error - No matching row found:",t),!1)},Tabulator.prototype.deleteRow=function(t){var e=this;return new Promise(function(o,i){var n=e.rowManager.findRow(t);n?n.delete().then(function(){o()}).catch(function(t){i(t)}):(console.warn("Delete Error - No matching row found:",t),i("Delete Error - No matching row found"))})},Tabulator.prototype.addRow=function(t,e,o){var i=this;return new Promise(function(n,l){"string"==typeof t&&(t=JSON.parse(t)),i.rowManager.addRows(t,e,o).then(function(t){i.modExists("columnCalcs")&&i.modules.columnCalcs.recalc(i.rowManager.activeRows),n(t[0].getComponent())})})},Tabulator.prototype.updateOrAddRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(l.getComponent())}).catch(function(t){n(t)}):l=o.rowManager.addRows(e).then(function(t){o.modExists("columnCalcs")&&o.modules.columnCalcs.recalc(o.rowManager.activeRows),i(t[0].getComponent())}).catch(function(t){n(t)})})},Tabulator.prototype.updateRow=function(t,e){var o=this;return new Promise(function(i,n){var l=o.rowManager.findRow(t);"string"==typeof e&&(e=JSON.parse(e)),l?l.updateData(e).then(function(){i(l.getComponent())}).catch(function(t){n(t)}):(console.warn("Update Error - No matching row found:",t),n("Update Error - No matching row found"))})},Tabulator.prototype.scrollToRow=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.rowManager.findRow(t);s?i.rowManager.scrollToRow(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching row found:",t),l("Scroll Error - No matching row found"))})},Tabulator.prototype.getRows=function(t){return this.rowManager.getComponents(t)},Tabulator.prototype.getRowPosition=function(t,e){var o=this.rowManager.findRow(t);return o?this.rowManager.getRowPosition(o,e):(console.warn("Position Error - No matching row found:",t),!1)},Tabulator.prototype.copyToClipboard=function(t,e,o,i){this.modExists("clipboard",!0)&&this.modules.clipboard.copy(t,e,o,i)},Tabulator.prototype.setColumns=function(t){this.columnManager.setColumns(t)},Tabulator.prototype.getColumns=function(t){return this.columnManager.getComponents(t)},Tabulator.prototype.getColumn=function(t){var e=this.columnManager.findColumn(t);return e?e.getComponent():(console.warn("Find Error - No matching column found:",t),!1)},Tabulator.prototype.getColumnDefinitions=function(){return this.columnManager.getDefinitionTree()},Tabulator.prototype.getColumnLayout=function(){if(this.modExists("persistence",!0))return this.modules.persistence.parseColumns(this.columnManager.getColumns())},Tabulator.prototype.setColumnLayout=function(t){return!!this.modExists("persistence",!0)&&(this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns,t)),!0)},Tabulator.prototype.showColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Show Error - No matching column found:",t),!1;e.show(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.hideColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Hide Error - No matching column found:",t),!1;e.hide(),this.options.responsiveLayout&&this.modExists("responsiveLayout",!0)&&this.modules.responsiveLayout.update()},Tabulator.prototype.toggleColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Visibility Toggle Error - No matching column found:",t),!1;e.visible?e.hide():e.show()},Tabulator.prototype.addColumn=function(t,e,o){var i=this.columnManager.findColumn(o);this.columnManager.addColumn(t,e,i)},Tabulator.prototype.deleteColumn=function(t){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Delete Error - No matching column found:",t),!1;e.delete()},Tabulator.prototype.scrollToColumn=function(t,e,o){var i=this;return new Promise(function(n,l){var s=i.columnManager.findColumn(t);s?i.columnManager.scrollToColumn(s,e,o).then(function(){n()}).catch(function(t){l(t)}):(console.warn("Scroll Error - No matching column found:",t),l("Scroll Error - No matching column found"))})},Tabulator.prototype.setLocale=function(t){this.modules.localize.setLocale(t)},Tabulator.prototype.getLocale=function(){return this.modules.localize.getLocale()},Tabulator.prototype.getLang=function(t){return this.modules.localize.getLang(t)},Tabulator.prototype.redraw=function(t){this.columnManager.redraw(t),this.rowManager.redraw(t)},Tabulator.prototype.setHeight=function(t){this.options.height=isNaN(t)?t:t+"px",this.element.style.height=this.options.height,this.rowManager.redraw()},Tabulator.prototype.setSort=function(t,e){this.modExists("sort",!0)&&(this.modules.sort.setSort(t,e),this.rowManager.sorterRefresh())},Tabulator.prototype.getSorters=function(){if(this.modExists("sort",!0))return this.modules.sort.getSort()},Tabulator.prototype.clearSort=function(){this.modExists("sort",!0)&&(this.modules.sort.clear(),this.rowManager.sorterRefresh())},Tabulator.prototype.setFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.setFilter(t,e,o),this.rowManager.filterRefresh())},Tabulator.prototype.addFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.addFilter(t,e,o),this.rowManager.filterRefresh())},Tabulator.prototype.getFilters=function(t){if(this.modExists("filter",!0))return this.modules.filter.getFilters(t)},Tabulator.prototype.setHeaderFilterFocus=function(t){if(this.modExists("filter",!0)){var e=this.columnManager.findColumn(t);if(!e)return console.warn("Column Filter Focus Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterFocus(e)}},Tabulator.prototype.setHeaderFilterValue=function(t,e){if(this.modExists("filter",!0)){var o=this.columnManager.findColumn(t);if(!o)return console.warn("Column Filter Error - No matching column found:",t),!1;this.modules.filter.setHeaderFilterValue(o,e)}},Tabulator.prototype.getHeaderFilters=function(){if(this.modExists("filter",!0))return this.modules.filter.getHeaderFilters()},Tabulator.prototype.removeFilter=function(t,e,o){this.modExists("filter",!0)&&(this.modules.filter.removeFilter(t,e,o),this.rowManager.filterRefresh())},Tabulator.prototype.clearFilter=function(t){this.modExists("filter",!0)&&(this.modules.filter.clearFilter(t),this.rowManager.filterRefresh())},Tabulator.prototype.clearHeaderFilter=function(){this.modExists("filter",!0)&&(this.modules.filter.clearHeaderFilter(),this.rowManager.filterRefresh())},Tabulator.prototype.selectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.selectRows(t)},Tabulator.prototype.deselectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.deselectRows(t)},Tabulator.prototype.toggleSelectRow=function(t){this.modExists("selectRow",!0)&&this.modules.selectRow.toggleRow(t)},Tabulator.prototype.getSelectedRows=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedRows()},Tabulator.prototype.getSelectedData=function(){if(this.modExists("selectRow",!0))return this.modules.selectRow.getSelectedData()},Tabulator.prototype.setMaxPage=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setMaxPage(t)},Tabulator.prototype.setPage=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPage(t)},Tabulator.prototype.setPageSize=function(t){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.setPageSize(t),this.modules.page.setPage(1)},Tabulator.prototype.getPageSize=function(){if(this.options.pagination&&this.modExists("page",!0))return this.modules.page.getPageSize()},Tabulator.prototype.previousPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.previousPage()},Tabulator.prototype.nextPage=function(){if(!this.options.pagination||!this.modExists("page"))return!1;this.modules.page.nextPage()},Tabulator.prototype.getPage=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPage()},Tabulator.prototype.getPageMax=function(){return!(!this.options.pagination||!this.modExists("page"))&&this.modules.page.getPageMax()},Tabulator.prototype.setGroupBy=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupBy=t,this.modules.groupRows.initialize(),this.rowManager.refreshActiveData("display")},Tabulator.prototype.setGroupStartOpen=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupStartOpen=t,this.modules.groupRows.initialize(),this.options.groupBy?this.rowManager.refreshActiveData("group"):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.setGroupHeader=function(t){if(!this.modExists("groupRows",!0))return!1;this.options.groupHeader=t,this.modules.groupRows.initialize(),this.options.groupBy?this.rowManager.refreshActiveData("group"):console.warn("Grouping Update - cant refresh view, no groups have been set")},Tabulator.prototype.getGroups=function(t){return!!this.modExists("groupRows",!0)&&this.modules.groupRows.getGroups(!0)},Tabulator.prototype.getGroupedData=function(){if(this.modExists("groupRows",!0))return this.options.groupBy?this.modules.groupRows.getGroupedData():this.getData()},Tabulator.prototype.getCalcResults=function(){return!!this.modExists("columnCalcs",!0)&&this.modules.columnCalcs.getResults()},Tabulator.prototype.navigatePrev=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().prev())},Tabulator.prototype.navigateNext=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().next())},Tabulator.prototype.navigateLeft=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().left())},Tabulator.prototype.navigateRight=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().right())},Tabulator.prototype.navigateUp=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().up())},Tabulator.prototype.navigateDown=function(){var t=!1;return!(!this.modExists("edit",!0)||!(t=this.modules.edit.currentCell))&&(e.preventDefault(),t.nav().dpwn())},Tabulator.prototype.undo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.undo()},Tabulator.prototype.redo=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.redo()},Tabulator.prototype.getHistoryUndoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryUndoSize()},Tabulator.prototype.getHistoryRedoSize=function(){return!(!this.options.history||!this.modExists("history",!0))&&this.modules.history.getHistoryRedoSize()},Tabulator.prototype.download=function(t,e,o){this.modExists("download",!0)&&this.modules.download.download(t,e,o)},Tabulator.prototype.tableComms=function(t,e,o,i){this.modules.comms.receive(t,e,o,i)},Tabulator.prototype.moduleBindings={},Tabulator.prototype.extendModule=function(t,e,o){if(Tabulator.prototype.moduleBindings[t]){var i=Tabulator.prototype.moduleBindings[t].prototype[e];if(i)if("object"==(void 0===o?"undefined":_typeof(o)))for(var n in o)i[n]=o[n];else console.warn("Module Error - Invalid value type, it must be an object");else console.warn("Module Error - property does not exist:",e)}else console.warn("Module Error - module does not exist:",t)},Tabulator.prototype.registerModule=function(t,e){Tabulator.prototype.moduleBindings[t]=e},Tabulator.prototype.bindModules=function(){this.modules={};for(var t in Tabulator.prototype.moduleBindings)this.modules[t]=new Tabulator.prototype.moduleBindings[t](this)},Tabulator.prototype.modExists=function(t,e){return!!this.modules[t]||(e&&console.error("Tabulator Module Not Installed: "+t),!1)},Tabulator.prototype.helpers={elVisible:function(t){return!(t.offsetWidth<=0&&t.offsetHeight<=0)},elOffset:function(t){ -var e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset-document.documentElement.clientTop,left:e.left+window.pageXOffset-document.documentElement.clientLeft}},deepClone:function(t){var e=Array.isArray(t)?[]:{};for(var o in t)null!=t[o]&&"object"===_typeof(t[o])?t[o]instanceof Date?e[o]=new Date(t[o]):e[o]=this.deepClone(t[o]):e[o]=t[o];return e}},Tabulator.prototype.comms={tables:[],register:function(t){Tabulator.prototype.comms.tables.push(t)},deregister:function(t){var e=Tabulator.prototype.comms.tables.indexOf(t);e>-1&&Tabulator.prototype.comms.tables.splice(e,1)},lookupTable:function(t){var e,o,i=[];if("string"==typeof t){if(e=document.querySelectorAll(t),e.length)for(var n=0;n-1?n/100*parseInt(t):parseInt(t):t}function o(t,i,n,l){function s(t){return n*(t.column.definition.widthGrow||1)}function a(t){return e(t.width)-n*(t.column.definition.widthShrink||0)}var r=[],u=0,h=0,c=0,p=0,d=0,m=[];return t.forEach(function(t,e){var o=l?a(t):s(t);t.column.minWidth>=o?r.push(t):(m.push(t),d+=l?t.column.definition.widthShrink||1:t.column.definition.widthGrow||1)}),r.length?(r.forEach(function(t){u+=l?t.width-t.column.minWidth:t.column.minWidth,t.width=t.column.minWidth}),h=i-u,c=d?Math.floor(h/d):h,p=h-c*d,p+=o(m,h,c,l)):(p=d?i-Math.floor(i/d)*d:i,m.forEach(function(t){t.width=l?a(t):s(t)})),p}var i=this,n=i.table.element.clientWidth,l=0,s=0,a=0,r=0,u=[],h=[],c=0,p=0,d=0;this.table.options.responsiveLayout&&this.table.modExists("responsiveLayout",!0)&&this.table.modules.responsiveLayout.update(),this.table.rowManager.element.scrollHeight>this.table.rowManager.element.clientHeight&&(n-=this.table.rowManager.element.offsetWidth-this.table.rowManager.element.clientWidth),t.forEach(function(t){var o,i,n;t.visible&&(o=t.definition.width,i=parseInt(t.minWidth),o?(n=e(o),l+=n>i?n:i,t.definition.widthShrink&&(h.push({column:t,width:n>i?n:i}),c+=t.definition.widthShrink)):(u.push({column:t,width:0}),a+=t.definition.widthGrow||1))}),s=n-l,r=Math.floor(s/a);var d=o(u,s,r,!1);u.length&&d>0&&(u[u.length-1].width+=+d),u.forEach(function(t){s-=t.width}),p=Math.abs(d)+s,p>0&&c&&(d=o(h,p,Math.floor(p/c),!0)),h.length&&(h[h.length-1].width-=d),u.forEach(function(t){t.column.setWidth(t.width)}),h.forEach(function(t){t.column.setWidth(t.width)})}},Tabulator.prototype.registerModule("layout",Layout);var Localize=function(t){this.table=t,this.locale="default",this.lang=!1,this.bindings={}};Localize.prototype.setHeaderFilterPlaceholder=function(t){this.langs.default.headerFilters.default=t},Localize.prototype.setHeaderFilterColumnPlaceholder=function(t,e){this.langs.default.headerFilters.columns[t]=e,this.lang&&!this.lang.headerFilters.columns[t]&&(this.lang.headerFilters.columns[t]=e)},Localize.prototype.installLang=function(t,e){this.langs[t]?this._setLangProp(this.langs[t],e):this.langs[t]=e},Localize.prototype._setLangProp=function(t,e){for(var o in e)t[o]&&"object"==_typeof(t[o])?this._setLangProp(t[o],e[o]):t[o]=e[o]},Localize.prototype.setLocale=function(t){function e(t,o){for(var i in t)"object"==_typeof(t[i])?(o[i]||(o[i]={}),e(t[i],o[i])):o[i]=t[i]}var o=this;if(t=t||"default",!0===t&&navigator.language&&(t=navigator.language.toLowerCase()),t&&!o.langs[t]){var i=t.split("-")[0];o.langs[i]?(console.warn("Localization Error - Exact matching locale not found, using closest match: ",t,i),t=i):(console.warn("Localization Error - Matching locale not found, using default: ",t),t="default")}o.locale=t,o.lang=Tabulator.prototype.helpers.deepClone(o.langs.default||{}),"default"!=t&&e(o.langs[t],o.lang),o.table.options.localized.call(o.table,o.locale,o.lang),o._executeBindings()},Localize.prototype.getLocale=function(t){return self.locale},Localize.prototype.getLang=function(t){return t?this.langs[t]:this.lang},Localize.prototype.getText=function(t,e){var t=e?t+"|"+e:t,o=t.split("|");return this._getLangElement(o,this.locale)||""},Localize.prototype._getLangElement=function(t,e){var o=this,i=o.lang;return t.forEach(function(t){var e;i&&(e=i[t],i=void 0!==e&&e)}),i},Localize.prototype.bind=function(t,e){this.bindings[t]||(this.bindings[t]=[]),this.bindings[t].push(e),e(this.getText(t),this.lang)},Localize.prototype._executeBindings=function(){var t=this;for(var e in t.bindings)!function(e){t.bindings[e].forEach(function(o){o(t.getText(e),t.lang)})}(e)},Localize.prototype.langs={default:{groups:{item:"item",items:"items"},columns:{},ajax:{loading:"Loading",error:"Error"},pagination:{first:"First",first_title:"First Page",last:"Last",last_title:"Last Page",prev:"Prev",prev_title:"Prev Page",next:"Next",next_title:"Next Page"},headerFilters:{default:"filter column...",columns:{}}}},Tabulator.prototype.registerModule("localize",Localize);var Comms=function(t){this.table=t};Comms.prototype.getConnections=function(t){var e,o=this,i=[];return e=Tabulator.prototype.comms.lookupTable(t),e.forEach(function(t){o.table!==t&&i.push(t)}),i},Comms.prototype.send=function(t,e,o,i){var n=this,l=this.getConnections(t);l.forEach(function(t){t.tableComms(n.table.element,e,o,i)}),!l.length&&t&&console.warn("Table Connection Error - No tables matching selector found",t)},Comms.prototype.receive=function(t,e,o,i){if(this.table.modExists(e))return this.table.modules[e].commsReceived(t,o,i);console.warn("Inter-table Comms Error - no such module:",e)},Tabulator.prototype.registerModule("comms",Comms); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/gulpfile.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/gulpfile.js deleted file mode 100644 index 0ae7810200..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/gulpfile.js +++ /dev/null @@ -1,200 +0,0 @@ -var gulp = require('gulp'), -sass = require('gulp-sass'), -autoprefixer = require('gulp-autoprefixer'), -cssnano = require('gulp-cssnano'), -jshint = require('gulp-jshint'), -uglify = require('gulp-uglify'), -imagemin = require('gulp-imagemin'), -rename = require('gulp-rename'), -concat = require('gulp-concat'), -notify = require('gulp-notify'), -cache = require('gulp-cache'), -livereload = require('gulp-livereload'), -del = require('del'); -include = require('gulp-include'), -sourcemaps = require('gulp-sourcemaps'), -babel = require('gulp-babel'), -plumber = require('gulp-plumber'), -gutil = require('gulp-util'), -insert = require('gulp-insert'), -fs = require('fs'); - -var version_no = "4.1.2", - -version = "/* Tabulator v" + version_no + " (c) Oliver Folkerd */\n"; - -var gulp_src = gulp.src; -gulp.src = function() { - return gulp_src.apply(gulp, arguments) - .pipe(plumber(function(error) { - // Output an error message - gutil.log(gutil.colors.red('Error (' + error.plugin + '): ' + error.message)); - // emit the end event, to properly end the task - this.emit('end'); - }) - ); -}; - -//build css -gulp.task('styles', function() { - return gulp.src('src/scss/**/tabulator*.scss') - .pipe(sourcemaps.init()) - .pipe(insert.prepend(version + "\n")) - .pipe(sass({outputStyle: 'expanded'}).on('error', sass.logError)) - .pipe(autoprefixer('last 4 version')) - .pipe(gulp.dest('dist/css')) - .pipe(rename({suffix: '.min'})) - .pipe(cssnano()) - .pipe(insert.prepend(version)) - .pipe(sourcemaps.write('.')) - .pipe(gulp.dest('dist/css')) - .on('end', function(){ gutil.log('Styles task complete'); }) - }); - - -//build tabulator -gulp.task('tabulator', function() { - //return gulp.src('src/js/**/*.js') - return gulp.src('src/js/core_modules.js') - .pipe(insert.prepend(version + "\n")) - //.pipe(sourcemaps.init()) - .pipe(include()) - //.pipe(jshint()) - // .pipe(jshint.reporter('default')) - .pipe(babel({ - //presets:['es2015'] - presets: [["env",{ - "targets": { - "browsers": ["last 4 versions"] - }, - loose: true, - modules: false, - }, ], { }] - })) - .pipe(concat('tabulator.js')) - .pipe(gulp.dest('dist/js')) - .pipe(rename({suffix: '.min'})) - .pipe(uglify()) - .pipe(insert.prepend(version)) - // .pipe(sourcemaps.write('.')) - .pipe(gulp.dest('dist/js')) - //.pipe(notify({ message: 'Scripts task complete' })); - .on('end', function(){ gutil.log('Tabulator Complete'); }) - //.on("error", console.log) - }); - - -//simplified core js -gulp.task('core', function() { - return gulp.src('src/js/core.js') - .pipe(insert.prepend(version + "\n")) - .pipe(include()) - .pipe(babel({ - presets: [["env", { - "targets": { - "browsers": ["last 4 versions"] - }, - loose: true, - modules: false, - }] - ] - })) - .pipe(concat('tabulator_core.js')) - .pipe(gulp.dest('dist/js')) - .pipe(rename({suffix: '.min'})) - .pipe(uglify()) - .pipe(insert.prepend(version)) - .pipe(gulp.dest('dist/js')) - .on('end', function(){ gutil.log('Core complete'); }) - }); - - - -//make jquery wrapper -gulp.task('modules', function(){ - - var path = __dirname + "/src/js/modules/"; - - var files = fs.readdirSync(path); - - var core = ["layout.js", "localize.js", "comms.js"]; - - files.forEach(function(file, index){ - - if(!core.includes(file)){ - return gulp.src('src/js/modules/' + file) - .pipe(insert.prepend(version + "\n")) - .pipe(include()) - .pipe(babel({ - presets: [["env", { - "targets": { - "browsers": ["last 4 versions"] - }, - loose: true, - modules: false, - }] - ] - })) - .pipe(concat(file)) - .pipe(gulp.dest('dist/js/modules/')) - .pipe(rename({suffix: '.min'})) - .pipe(uglify()) - .pipe(insert.prepend(version)) - .pipe(gulp.dest('dist/js/modules/')) - } - }); - - }); - -//make jquery wrapper -gulp.task('jquery', function(){ - return gulp.src('src/js/jquery_wrapper.js') - .pipe(insert.prepend(version + "\n")) - .pipe(include()) - .pipe(babel({ - presets: [["env", { - "targets": { - "browsers": ["last 4 versions"] - }, - loose: true, - modules: false, - }] - ] - })) - .pipe(concat('jquery_wrapper.js')) - .pipe(gulp.dest('dist/js')) - .pipe(rename({suffix: '.min'})) - .pipe(uglify()) - .pipe(insert.prepend(version)) - .pipe(gulp.dest('dist/js')) - .on('end', function(){ gutil.log('jQuery wrapper complete'); }) - - }); - - -gulp.task('scripts', function() { - gulp.start('tabulator'); - gulp.start('core'); - gulp.start('modules'); - gulp.start('jquery'); - }); - -gulp.task('clean', function() { - return del(['dist/css', 'dist/js']); - }); - - -gulp.task('default', ['clean'], function() { - gulp.start('styles', 'scripts'); - }); - - -gulp.task('watch', function() { - - // Watch .scss files - gulp.watch('src/scss/**/*.scss', ['styles']); - - // Watch .js files - gulp.watch('src/js/**/*.js', ['scripts']); - - }); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/package.json b/Gems/AssetMemoryAnalyzer/External/tabulator-master/package.json deleted file mode 100644 index 23a56135d1..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "name": "tabulator-tables", - "version": "4.1.2", - "description": "Interactive table generation JavaScript library", - "main": "dist/js/tabulator.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "https://github.com/olifolkerd/tabulator.git" - }, - "keywords": [ - "table", - "grid", - "datagrid", - "tabulator", - "editable", - "cookie", - "sort", - "format", - "resizable", - "list", - "scrollable", - "ajax", - "json", - "widget", - "jquery", - "react", - "angular", - "vue" - ], - "author": "Oli Folkerd", - "license": "MIT", - "bugs": { - "url": "https://github.com/olifolkerd/tabulator/issues" - }, - "homepage": "http://tabulator.info/", - "devDependencies": { - "babel-preset-env": "^1.4.0", - "babel-preset-es2015": "^6.24.1", - "babel-preset-stage-2": "^6.24.1", - "del": "^2.2.2", - "gulp": "^3.9.1", - "gulp-autoprefixer": "^3.1.1", - "gulp-babel": "^6.1.2", - "gulp-cache": "^0.4.6", - "gulp-concat": "^2.6.1", - "gulp-cssnano": "^2.1.2", - "gulp-imagemin": "^3.2.0", - "gulp-include": "^2.3.1", - "gulp-insert": "^0.5.0", - "gulp-jshint": "^2.0.4", - "gulp-livereload": "^3.8.1", - "gulp-notify": "^3.0.0", - "gulp-plumber": "^1.1.0", - "gulp-rename": "^1.2.2", - "gulp-sass": "^3.1.0", - "gulp-sourcemaps": "^2.6.0", - "gulp-uglify": "^2.1.2", - "gulp-util": "^3.0.8", - "jshint": "^2.9.4" - } -} diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/cell.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/cell.js deleted file mode 100644 index 7b54f0cb84..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/cell.js +++ /dev/null @@ -1,593 +0,0 @@ - -//public row object -var CellComponent = function (cell){ - this._cell = cell; -}; - -CellComponent.prototype.getValue = function(){ - return this._cell.getValue(); -}; - -CellComponent.prototype.getOldValue = function(){ - return this._cell.getOldValue(); -}; - -CellComponent.prototype.getElement = function(){ - return this._cell.getElement(); -}; - -CellComponent.prototype.getRow = function(){ - return this._cell.row.getComponent(); -}; - -CellComponent.prototype.getData = function(){ - return this._cell.row.getData(); -}; - -CellComponent.prototype.getField = function(){ - return this._cell.column.getField(); -}; - -CellComponent.prototype.getColumn = function(){ - return this._cell.column.getComponent(); -}; - -CellComponent.prototype.setValue = function(value, mutate){ - if(typeof mutate == "undefined"){ - mutate = true; - } - - this._cell.setValue(value, mutate); -}; - -CellComponent.prototype.restoreOldValue = function(){ - this._cell.setValueActual(this._cell.getOldValue()); -}; - -CellComponent.prototype.edit = function(force){ - return this._cell.edit(force); -}; - -CellComponent.prototype.cancelEdit = function(){ - this._cell.cancelEdit(); -}; - - -CellComponent.prototype.nav = function(){ - return this._cell.nav(); -}; - -CellComponent.prototype.checkHeight = function(){ - this._cell.checkHeight(); -}; - -CellComponent.prototype.getTable = function(){ - return this._cell.table; -}; - -CellComponent.prototype._getSelf = function(){ - return this._cell; -}; - - - -var Cell = function(column, row){ - - this.table = column.table; - this.column = column; - this.row = row; - this.element = null; - this.value = null; - this.oldValue = null; - - this.height = null; - this.width = null; - this.minWidth = null; - - this.build(); -}; - -//////////////// Setup Functions ///////////////// - -//generate element -Cell.prototype.build = function(){ - this.generateElement(); - - this.setWidth(this.column.width); - - this._configureCell(); - - this.setValueActual(this.column.getFieldValue(this.row.data)); -}; - -Cell.prototype.generateElement = function(){ - this.element = document.createElement('div'); - this.element.className = "tabulator-cell"; - this.element.setAttribute("role", "gridcell"); - this.element = this.element; -}; - - -Cell.prototype._configureCell = function(){ - var self = this, - cellEvents = self.column.cellEvents, - element = self.element, - field = this.column.getField(), - dblTap, tapHold, tap; - - //set text alignment - element.style.textAlign = self.column.hozAlign; - - if(field){ - element.setAttribute("tabulator-field", field); - } - - if(self.column.definition.cssClass){ - element.classList.add(self.column.definition.cssClass); - } - - //set event bindings - if (cellEvents.cellClick || self.table.options.cellClick){ - self.element.addEventListener("click", function(e){ - var component = self.getComponent(); - - if(cellEvents.cellClick){ - cellEvents.cellClick.call(self.table, e, component); - } - - if(self.table.options.cellClick){ - self.table.options.cellClick.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellDblClick || this.table.options.cellDblClick){ - element.addEventListener("dblclick", function(e){ - var component = self.getComponent(); - - if(cellEvents.cellDblClick){ - cellEvents.cellDblClick.call(self.table, e, component); - } - - if(self.table.options.cellDblClick){ - self.table.options.cellDblClick.call(self.table, e, component); - } - }); - } - - if (cellEvents.cellContext || this.table.options.cellContext){ - element.addEventListener("contextmenu", function(e){ - var component = self.getComponent(); - - if(cellEvents.cellContext){ - cellEvents.cellContext.call(self.table, e, component); - } - - if(self.table.options.cellContext){ - self.table.options.cellContext.call(self.table, e, component); - } - }); - } - - if (this.table.options.tooltipGenerationMode === "hover"){ - //update tooltip on mouse enter - element.addEventListener("mouseenter", function(e){ - self._generateTooltip(); - }); - } - - if (cellEvents.cellTap || this.table.options.cellTap){ - tap = false; - - element.addEventListener("touchstart", function(e){ - tap = true; - }); - - element.addEventListener("touchend", function(e){ - if(tap){ - var component = self.getComponent(); - - if(cellEvents.cellTap){ - cellEvents.cellTap.call(self.table, e, component); - } - - if(self.table.options.cellTap){ - self.table.options.cellTap.call(self.table, e, component); - } - } - - tap = false; - }); - } - - if (cellEvents.cellDblTap || this.table.options.cellDblTap){ - dblTap = null; - - element.addEventListener("touchend", function(e){ - - if(dblTap){ - clearTimeout(dblTap); - dblTap = null; - - var component = self.getComponent(); - - if(cellEvents.cellDblTap){ - cellEvents.cellDblTap.call(self.table, e, component); - } - - if(self.table.options.cellDblTap){ - self.table.options.cellDblTap.call(self.table, e, component); - } - }else{ - - dblTap = setTimeout(function(){ - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - - }); - } - - if (cellEvents.cellTapHold || this.table.options.cellTapHold){ - tapHold = null; - - element.addEventListener("touchstart", function(e){ - clearTimeout(tapHold); - - tapHold = setTimeout(function(){ - clearTimeout(tapHold); - tapHold = null; - tap = false; - var component = self.getComponent(); - - if(cellEvents.cellTapHold){ - cellEvents.cellTapHold.call(self.table, e, component); - } - - if(self.table.options.cellTapHold){ - self.table.options.cellTapHold.call(self.table, e, component); - } - }, 1000); - - }); - - element.addEventListener("touchend", function(e){ - clearTimeout(tapHold); - tapHold = null; - }); - } - - if(self.column.modules.edit){ - self.table.modules.edit.bindEditor(self); - } - - if(self.column.definition.rowHandle && self.table.options.movableRows !== false && self.table.modExists("moveRow")){ - self.table.modules.moveRow.initializeCell(self); - } - - //hide cell if not visible - if(!self.column.visible){ - self.hide(); - } -}; - -//generate cell contents -Cell.prototype._generateContents = function(){ - var val; - - if(this.table.modExists("format")){ - val = this.table.modules.format.formatValue(this); - }else{ - val = this.element.innerHTML = this.value; - } - - switch(typeof val){ - case "object": - if(val instanceof Node){ - this.element.appendChild(val); - }else{ - this.element.innerHTML = ""; - console.warn("Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", val); - } - break; - case "undefined": - case "null": - this.element.innerHTML = ""; - break; - default: - this.element.innerHTML = val; - } -}; - -Cell.prototype.cellRendered = function(){ - if(this.table.modExists("format") && this.table.modules.format.cellRendered){ - this.table.modules.format.cellRendered(this); - } -}; - -//generate tooltip text -Cell.prototype._generateTooltip = function(){ - var tooltip = this.column.tooltip; - - if(tooltip){ - if(tooltip === true){ - tooltip = this.value; - }else if(typeof(tooltip) == "function"){ - tooltip = tooltip(this.getComponent()); - - if(tooltip === false){ - tooltip = ""; - } - } - - if(typeof tooltip === "undefined"){ - tooltip = ""; - } - - this.element.setAttribute("title", tooltip); - }else{ - this.element.setAttribute("title", ""); - } -}; - - -//////////////////// Getters //////////////////// -Cell.prototype.getElement = function(){ - return this.element; -}; - -Cell.prototype.getValue = function(){ - return this.value; -}; - -Cell.prototype.getOldValue = function(){ - return this.oldValue; -}; - -//////////////////// Actions //////////////////// - -Cell.prototype.setValue = function(value, mutate){ - - var changed = this.setValueProcessData(value, mutate), - component; - - if(changed){ - if(this.table.options.history && this.table.modExists("history")){ - this.table.modules.history.action("cellEdit", this, {oldValue:this.oldValue, newValue:this.value}); - } - - component = this.getComponent(); - - if(this.column.cellEvents.cellEdited){ - this.column.cellEvents.cellEdited.call(this.table, component); - } - - this.table.options.cellEdited.call(this.table, component); - - this.table.options.dataEdited.call(this.table, this.table.rowManager.getData()); - } - - if(this.table.modExists("columnCalcs")){ - if(this.column.definition.topCalc || this.column.definition.bottomCalc){ - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - this.table.modules.columnCalcs.recalcRowGroup(this.row); - }else{ - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - } - } - -}; - -Cell.prototype.setValueProcessData = function(value, mutate){ - var changed = false; - - if(this.value != value){ - - changed = true; - - if(mutate){ - if(this.column.modules.mutate){ - value = this.table.modules.mutator.transformCell(this, value); - } - } - } - - this.setValueActual(value); - - return changed; -}; - -Cell.prototype.setValueActual = function(value){ - this.oldValue = this.value; - - this.value = value; - - this.column.setFieldValue(this.row.data, value); - - this._generateContents(); - this._generateTooltip(); - - //set resizable handles - if(this.table.options.resizableColumns && this.table.modExists("resizeColumns")){ - this.table.modules.resizeColumns.initializeColumn("cell", this.column, this.element); - } - - //handle frozen cells - if(this.table.modExists("frozenColumns")){ - this.table.modules.frozenColumns.layoutElement(this.element, this.column); - } -}; - -Cell.prototype.setWidth = function(width){ - this.width = width; - // this.element.css("width", width || ""); - this.element.style.width = (width ? width + "px" : ""); -}; - -Cell.prototype.getWidth = function(){ - return this.width || this.element.offsetWidth; -}; - -Cell.prototype.setMinWidth = function(minWidth){ - this.minWidth = minWidth; - this.element.style.minWidth = (minWidth ? minWidth + "px" : ""); -}; - -Cell.prototype.checkHeight = function(){ - // var height = this.element.css("height"); - - this.row.reinitializeHeight(); -}; - -Cell.prototype.clearHeight = function(){ - this.element.style.height = ""; - this.height = null; -}; - - -Cell.prototype.setHeight = function(height){ - this.height = height; - this.element.style.height = (height ? height + "px" : ""); -}; - -Cell.prototype.getHeight = function(){ - return this.height || this.element.offsetHeight; -}; - -Cell.prototype.show = function(){ - this.element.style.display = ""; -}; - -Cell.prototype.hide = function(){ - this.element.style.display = "none"; -}; - -Cell.prototype.edit = function(force){ - if(this.table.modExists("edit", true)){ - return this.table.modules.edit.editCell(this, force); - } -}; - -Cell.prototype.cancelEdit = function(){ - if(this.table.modExists("edit", true)){ - var editing = this.table.modules.edit.getCurrentCell(); - - if(editing && editing._getSelf() === this){ - this.table.modules.edit.cancelEdit(); - }else{ - console.warn("Cancel Editor Error - This cell is not currently being edited "); - } - } -}; - - - - -Cell.prototype.delete = function(){ - this.element.parentNode.removeChild(this.element); - this.column.deleteCell(this); - this.row.deleteCell(this); -}; - -//////////////// Navigation ///////////////// - -Cell.prototype.nav = function(){ - - var self = this, - nextCell = false, - index = this.row.getCellIndex(this); - - return { - next:function(){ - var nextCell = this.right(), - nextRow; - - if(!nextCell){ - nextRow = self.table.rowManager.nextDisplayRow(self.row, true); - - if(nextRow){ - nextCell = nextRow.findNextEditableCell(-1); - - if(nextCell){ - nextCell.edit(); - return true; - } - } - }else{ - return true; - } - - return false; - }, - prev:function(){ - var nextCell = this.left(), - prevRow; - - if(!nextCell){ - prevRow = self.table.rowManager.prevDisplayRow(self.row, true); - - if(prevRow){ - nextCell = prevRow.findPrevEditableCell(prevRow.cells.length); - - if(nextCell){ - nextCell.edit(); - return true; - } - } - - }else{ - return true; - } - - return false; - }, - left:function(){ - - nextCell = self.row.findPrevEditableCell(index); - - if(nextCell){ - nextCell.edit(); - return true; - }else{ - return false; - } - }, - right:function(){ - nextCell = self.row.findNextEditableCell(index); - - if(nextCell){ - nextCell.edit(); - return true; - }else{ - return false; - } - }, - up:function(){ - var nextRow = self.table.rowManager.prevDisplayRow(self.row, true); - - if(nextRow){ - nextRow.cells[index].edit(); - } - }, - down:function(){ - var nextRow = self.table.rowManager.nextDisplayRow(self.row, true); - - if(nextRow){ - nextRow.cells[index].edit(); - } - }, - - }; - -}; - -Cell.prototype.getIndex = function(){ - this.row.getCellIndex(this); -}; - -//////////////// Object Generation ///////////////// -Cell.prototype.getComponent = function(){ - return new CellComponent(this); -}; \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/column.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/column.js deleted file mode 100644 index 026cd59889..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/column.js +++ /dev/null @@ -1,1074 +0,0 @@ - -//public column object -var ColumnComponent = function (column){ - this._column = column; - this.type = "ColumnComponent"; -}; - -ColumnComponent.prototype.getElement = function(){ - return this._column.getElement(); -}; - -ColumnComponent.prototype.getDefinition = function(){ - return this._column.getDefinition(); -}; - -ColumnComponent.prototype.getField = function(){ - return this._column.getField(); -}; - -ColumnComponent.prototype.getCells = function(){ - var cells = []; - - this._column.cells.forEach(function(cell){ - cells.push(cell.getComponent()); - }); - - return cells; -}; - -ColumnComponent.prototype.getVisibility = function(){ - return this._column.visible; -}; - -ColumnComponent.prototype.show = function(){ - if(this._column.isGroup){ - this._column.columns.forEach(function(column){ - column.show(); - }); - }else{ - this._column.show(); - } -}; - -ColumnComponent.prototype.hide = function(){ - if(this._column.isGroup){ - this._column.columns.forEach(function(column){ - column.hide(); - }); - }else{ - this._column.hide(); - } -}; - -ColumnComponent.prototype.toggle = function(){ - if(this._column.visible){ - this.hide(); - }else{ - this.show(); - } -}; - -ColumnComponent.prototype.delete = function(){ - this._column.delete(); -}; - -ColumnComponent.prototype.getSubColumns = function(){ - var output = []; - - if(this._column.columns.length){ - this._column.columns.forEach(function(column){ - output.push(column.getComponent()); - }); - } - - return output; -}; - -ColumnComponent.prototype.getParentColumn = function(){ - return this._column.parent instanceof Column ? this._column.parent.getComponent() : false; -}; - - -ColumnComponent.prototype._getSelf = function(){ - return this._column; -}; - -ColumnComponent.prototype.scrollTo = function(){ - return this._column.table.columnManager.scrollToColumn(this._column); -}; - -ColumnComponent.prototype.getTable = function(){ - return this._column.table; -}; - -ColumnComponent.prototype.headerFilterFocus = function(){ - if(this._column.table.modExists("filter", true)){ - this._column.table.modules.filter.setHeaderFilterFocus(this._column); - } -}; - -ColumnComponent.prototype.reloadHeaderFilter = function(){ - if(this._column.table.modExists("filter", true)){ - this._column.table.modules.filter.reloadHeaderFilter(this._column); - } -}; - -ColumnComponent.prototype.setHeaderFilterValue = function(value){ - if(this._column.table.modExists("filter", true)){ - this._column.table.modules.filter.setHeaderFilterValue(this._column, value); - } -}; - - - -var Column = function(def, parent){ - var self = this; - - this.table = parent.table; - this.definition = def; //column definition - this.parent = parent; //hold parent object - this.type = "column"; //type of element - this.columns = []; //child columns - this.cells = []; //cells bound to this column - this.element = this.createElement(); //column header element - this.contentElement = false; - this.groupElement = this.createGroupElement(); //column group holder element - this.isGroup = false; - this.tooltip = false; //hold column tooltip - this.hozAlign = ""; //horizontal text alignment - - //multi dimentional filed handling - this.field =""; - this.fieldStructure = ""; - this.getFieldValue = ""; - this.setFieldValue = ""; - - this.setField(this.definition.field); - - - this.modules = {}; //hold module variables; - - this.cellEvents = { - cellClick:false, - cellDblClick:false, - cellContext:false, - cellTap:false, - cellDblTap:false, - cellTapHold:false - }; - - this.width = null; //column width - this.minWidth = null; //column minimum width - this.widthFixed = false; //user has specified a width for this column - - this.visible = true; //default visible state - - //initialize column - if(def.columns){ - - this.isGroup = true; - - def.columns.forEach(function(def, i){ - var newCol = new Column(def, self); - self.attachColumn(newCol); - }); - - self.checkColumnVisibility(); - }else{ - parent.registerColumnField(this); - } - - if(def.rowHandle && this.table.options.movableRows !== false && this.table.modExists("moveRow")){ - this.table.modules.moveRow.setHandle(true); - } - - this._buildHeader(); -}; - -Column.prototype.createElement = function (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.setAttribute("role", "columnheader"); - el.setAttribute("aria-sort", "none"); - - return el; -}; - -Column.prototype.createGroupElement = function (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-col-group-cols"); - - return el; -}; - -Column.prototype.setField = function(field){ - this.field = field; - this.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : []; - this.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData; - this.setFieldValue = this.fieldStructure.length > 1 ? this._setNesteData : this._setFlatData; -}; - -//register column position with column manager -Column.prototype.registerColumnPosition = function(column){ - this.parent.registerColumnPosition(column); -}; - -//register column position with column manager -Column.prototype.registerColumnField = function(column){ - this.parent.registerColumnField(column); -}; - -//trigger position registration -Column.prototype.reRegisterPosition = function(){ - if(this.isGroup){ - this.columns.forEach(function(column){ - column.reRegisterPosition(); - }); - }else{ - this.registerColumnPosition(this); - } -}; - -Column.prototype.setTooltip = function(){ - var self = this, - def = self.definition; - - //set header tooltips - var tooltip = def.headerTooltip || def.tooltip === false ? def.headerTooltip : self.table.options.tooltipsHeader; - - if(tooltip){ - if(tooltip === true){ - if(def.field){ - self.table.modules.localize.bind("columns|" + def.field, function(value){ - self.element.setAttribute("title", value || def.title); - }); - }else{ - self.element.setAttribute("title", def.title); - } - - }else{ - if(typeof(tooltip) == "function"){ - tooltip = tooltip(self.getComponent()); - - if(tooltip === false){ - tooltip = ""; - } - } - - self.element.setAttribute("title", tooltip); - } - - }else{ - self.element.setAttribute("title", ""); - } -}; - -//build header element -Column.prototype._buildHeader = function(){ - var self = this, - def = self.definition; - - while(self.element.firstChild) self.element.removeChild(self.element.firstChild); - - if(def.headerVertical){ - self.element.classList.add("tabulator-col-vertical"); - - if(def.headerVertical === "flip"){ - self.element.classList.add("tabulator-col-vertical-flip"); - } - } - - self.contentElement = self._bindEvents(); - - self.contentElement = self._buildColumnHeaderContent(); - - self.element.appendChild(self.contentElement); - - if(self.isGroup){ - self._buildGroupHeader(); - }else{ - self._buildColumnHeader(); - } - - self.setTooltip(); - - //set resizable handles - if(self.table.options.resizableColumns && self.table.modExists("resizeColumns")){ - self.table.modules.resizeColumns.initializeColumn("header", self, self.element); - } - - //set resizable handles - if(def.headerFilter && self.table.modExists("filter") && self.table.modExists("edit")){ - if(typeof def.headerFilterPlaceholder !== "undefined" && def.field){ - self.table.modules.localize.setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder); - } - - self.table.modules.filter.initializeColumn(self); - } - - - //set resizable handles - if(self.table.modExists("frozenColumns")){ - self.table.modules.frozenColumns.initializeColumn(self); - } - - //set movable column - if(self.table.options.movableColumns && !self.isGroup && self.table.modExists("moveColumn")){ - self.table.modules.moveColumn.initializeColumn(self); - } - - //set calcs column - if((def.topCalc || def.bottomCalc) && self.table.modExists("columnCalcs")){ - self.table.modules.columnCalcs.initializeColumn(self); - } - - - //update header tooltip on mouse enter - self.element.addEventListener("mouseenter", function(e){ - self.setTooltip(); - }); -}; - -Column.prototype._bindEvents = function(){ - - var self = this, - def = self.definition, - dblTap, tapHold, tap; - - //setup header click event bindings - if(typeof(def.headerClick) == "function"){ - self.element.addEventListener("click", function(e){def.headerClick(e, self.getComponent());}); - } - - if(typeof(def.headerDblClick) == "function"){ - self.element.addEventListener("dblclick", function(e){def.headerDblClick(e, self.getComponent());}); - } - - if(typeof(def.headerContext) == "function"){ - self.element.addEventListener("contextmenu", function(e){def.headerContext(e, self.getComponent());}); - } - - //setup header tap event bindings - if(typeof(def.headerTap) == "function"){ - tap = false; - - self.element.addEventListener("touchstart", function(e){ - tap = true; - }); - - self.element.addEventListener("touchend", function(e){ - if(tap){ - def.headerTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if(typeof(def.headerDblTap) == "function"){ - dblTap = null; - - self.element.addEventListener("touchend", function(e){ - - if(dblTap){ - clearTimeout(dblTap); - dblTap = null; - - def.headerDblTap(e, self.getComponent()); - }else{ - - dblTap = setTimeout(function(){ - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - - }); - } - - if(typeof(def.headerTapHold) == "function"){ - tapHold = null; - - self.element.addEventListener("touchstart", function(e){ - clearTimeout(tapHold); - - tapHold = setTimeout(function(){ - clearTimeout(tapHold); - tapHold = null; - tap = false; - def.headerTapHold(e, self.getComponent()); - }, 1000); - - }); - - self.element.addEventListener("touchend", function(e){ - clearTimeout(tapHold); - tapHold = null; - }); - } - - //store column cell click event bindings - if(typeof(def.cellClick) == "function"){ - self.cellEvents.cellClick = def.cellClick; - } - - if(typeof(def.cellDblClick) == "function"){ - self.cellEvents.cellDblClick = def.cellDblClick; - } - - if(typeof(def.cellContext) == "function"){ - self.cellEvents.cellContext = def.cellContext; - } - - //setup column cell tap event bindings - if(typeof(def.cellTap) == "function"){ - self.cellEvents.cellTap = def.cellTap; - } - - if(typeof(def.cellDblTap) == "function"){ - self.cellEvents.cellDblTap = def.cellDblTap; - } - - if(typeof(def.cellTapHold) == "function"){ - self.cellEvents.cellTapHold = def.cellTapHold; - } - - //setup column cell edit callbacks - if(typeof(def.cellEdited) == "function"){ - self.cellEvents.cellEdited = def.cellEdited; - } - - if(typeof(def.cellEditing) == "function"){ - self.cellEvents.cellEditing = def.cellEditing; - } - - if(typeof(def.cellEditCancelled) == "function"){ - self.cellEvents.cellEditCancelled = def.cellEditCancelled; - } -}; - -//build header element for header -Column.prototype._buildColumnHeader = function(){ - var self = this, - def = self.definition, - table = self.table, - sortable; - - //set column sorter - if(table.modExists("sort")){ - table.modules.sort.initializeColumn(self, self.contentElement); - } - - //set column formatter - if(table.modExists("format")){ - table.modules.format.initializeColumn(self); - } - - //set column editor - if(typeof def.editor != "undefined" && table.modExists("edit")){ - table.modules.edit.initializeColumn(self); - } - - //set colum validator - if(typeof def.validator != "undefined" && table.modExists("validate")){ - table.modules.validate.initializeColumn(self); - } - - - //set column mutator - if(table.modExists("mutator")){ - table.modules.mutator.initializeColumn(self); - } - - //set column accessor - if(table.modExists("accessor")){ - table.modules.accessor.initializeColumn(self); - } - - //set respoviveLayout - if(typeof table.options.responsiveLayout && table.modExists("responsiveLayout")){ - table.modules.responsiveLayout.initializeColumn(self); - } - - //set column visibility - if(typeof def.visible != "undefined"){ - if(def.visible){ - self.show(true); - }else{ - self.hide(true); - } - } - - //asign additional css classes to column header - if(def.cssClass){ - self.element.classList.add(def.cssClass); - } - - if(def.field){ - this.element.setAttribute("tabulator-field", def.field); - } - - //set min width if present - self.setMinWidth(typeof def.minWidth == "undefined" ? self.table.options.columnMinWidth : def.minWidth); - - self.reinitializeWidth(); - - //set tooltip if present - self.tooltip = self.definition.tooltip || self.definition.tooltip === false ? self.definition.tooltip : self.table.options.tooltips; - - //set orizontal text alignment - self.hozAlign = typeof(self.definition.align) == "undefined" ? "" : self.definition.align; -}; - -Column.prototype._buildColumnHeaderContent = function(){ - var self = this, - def = self.definition, - table = self.table; - - var contentElement = document.createElement("div"); - contentElement.classList.add("tabulator-col-content"); - - contentElement.appendChild(self._buildColumnHeaderTitle()); - - return contentElement; -}; - -//build title element of column -Column.prototype._buildColumnHeaderTitle = function(){ - var self = this, - def = self.definition, - table = self.table, - title; - - var titleHolderElement = document.createElement("div"); - titleHolderElement.classList.add("tabulator-col-title"); - - if(def.editableTitle){ - var titleElement = document.createElement("input"); - titleElement.classList.add("tabulator-title-editor"); - - titleElement.addEventListener("click", function(e){ - e.stopPropagation(); - titleElement.focus(); - }); - - titleElement.addEventListener("change", function(){ - def.title = titleElement.value; - table.options.columnTitleChanged.call(self.table, self.getComponent()); - }); - - titleHolderElement.appendChild(titleElement); - - if(def.field){ - table.modules.localize.bind("columns|" + def.field, function(text){ - titleElement.value = text || (def.title || " "); - }); - }else{ - titleElement.value = def.title || " "; - } - - }else{ - if(def.field){ - table.modules.localize.bind("columns|" + def.field, function(text){ - self._formatColumnHeaderTitle(titleHolderElement, text || (def.title || " ")); - }); - }else{ - self._formatColumnHeaderTitle(titleHolderElement, def.title || " "); - } - } - - return titleHolderElement; -}; - -Column.prototype._formatColumnHeaderTitle = function(el, title){ - var formatter, contents, params, mockCell; - - if(this.definition.titleFormatter && this.table.modExists("format")){ - - formatter = this.table.modules.format.getFormatter(this.definition.titleFormatter); - - mockCell = { - getValue:function(){ - return title; - }, - getElement:function(){ - return el; - } - }; - - params = this.definition.titleFormatterParams || {}; - - params = typeof params === "function" ? params() : params; - - contents = formatter.call(this.table.modules.format, mockCell, params); - - switch(typeof contents){ - case "object": - if(contents instanceof Node){ - this.element.appendChild(contents); - }else{ - this.element.innerHTML = ""; - console.warn("Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:", contents); - } - break; - case "undefined": - case "null": - this.element.innerHTML = ""; - break; - default: - this.element.innerHTML = contents; - } - }else{ - el.innerHTML = title; - } -}; - - -//build header element for column group -Column.prototype._buildGroupHeader = function(){ - this.element.classList.add("tabulator-col-group"); - this.element.setAttribute("role", "columngroup"); - this.element.setAttribute("aria-title", this.definition.title); - - this.element.appendChild(this.groupElement); -}; - -//flat field lookup -Column.prototype._getFlatData = function(data){ - return data[this.field]; -}; - -//nested field lookup -Column.prototype._getNestedData = function(data){ - var dataObj = data, - structure = this.fieldStructure, - length = structure.length, - output; - - for(let i = 0; i < length; i++){ - - dataObj = dataObj[structure[i]]; - - output = dataObj; - - if(!dataObj){ - break; - } - } - - return output; -}; - -//flat field set -Column.prototype._setFlatData = function(data, value){ - data[this.field] = value; -}; - -//nested field set -Column.prototype._setNesteData = function(data, value){ - var dataObj = data, - structure = this.fieldStructure, - length = structure.length; - - for(let i = 0; i < length; i++){ - - if(i == length -1){ - dataObj[structure[i]] = value; - }else{ - if(!dataObj[structure[i]]){ - dataObj[structure[i]] = {}; - } - - dataObj = dataObj[structure[i]]; - } - } -}; - - -//attach column to this group -Column.prototype.attachColumn = function(column){ - var self = this; - - if(self.groupElement){ - self.columns.push(column); - self.groupElement.appendChild(column.getElement()); - }else{ - console.warn("Column Warning - Column being attached to another column instead of column group"); - } -}; - -//vertically align header in column -Column.prototype.verticalAlign = function(alignment, height){ - - //calculate height of column header and group holder element - var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight); - // var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight; - - this.element.style.height = parentHeight + "px"; - - if(this.isGroup){ - this.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + "px"; - } - - //vertically align cell contents - if(!this.isGroup && alignment !== "top"){ - if(alignment === "bottom"){ - this.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + "px"; - }else{ - this.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + "px"; - } - } - - this.columns.forEach(function(column){ - column.verticalAlign(alignment); - }); -}; - -//clear vertical alignmenet -Column.prototype.clearVerticalAlign = function(){ - this.element.style.paddingTop = ""; - this.element.style.height = ""; - this.element.style.minHeight = ""; - - this.columns.forEach(function(column){ - column.clearVerticalAlign(); - }); -}; - -//// Retreive Column Information //// - -//return column header element -Column.prototype.getElement = function(){ - return this.element; -}; - -//return colunm group element -Column.prototype.getGroupElement = function(){ - return this.groupElement; -}; - -//return field name -Column.prototype.getField = function(){ - return this.field; -}; - -//return the first column in a group -Column.prototype.getFirstColumn = function(){ - if(!this.isGroup){ - return this; - }else{ - if(this.columns.length){ - return this.columns[0].getFirstColumn(); - }else{ - return false; - } - } -}; - -//return the last column in a group -Column.prototype.getLastColumn = function(){ - if(!this.isGroup){ - return this; - }else{ - if(this.columns.length){ - return this.columns[this.columns.length -1].getLastColumn(); - }else{ - return false; - } - } -}; - -//return all columns in a group -Column.prototype.getColumns = function(){ - return this.columns; -}; - -//return all columns in a group -Column.prototype.getCells = function(){ - return this.cells; -}; - -//retreive the top column in a group of columns -Column.prototype.getTopColumn = function(){ - if(this.parent.isGroup){ - return this.parent.getTopColumn(); - }else{ - return this; - } -}; - -//return column definition object -Column.prototype.getDefinition = function(updateBranches){ - var colDefs = []; - - if(this.isGroup && updateBranches){ - this.columns.forEach(function(column){ - colDefs.push(column.getDefinition(true)); - }); - - this.definition.columns = colDefs; - } - - return this.definition; -}; - -//////////////////// Actions //////////////////// - -Column.prototype.checkColumnVisibility = function(){ - var visible = false; - - this.columns.forEach(function(column){ - if(column.visible){ - visible = true; - } - }); - - if(visible){ - this.show(); - this.parent.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false); - }else{ - this.hide(); - } - -}; - -//show column -Column.prototype.show = function(silent, responsiveToggle){ - if(!this.visible){ - this.visible = true; - - this.element.style.display = ""; - - this.table.columnManager._verticalAlignHeaders(); - - if(this.parent.isGroup){ - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function(cell){ - cell.show(); - }); - - if(this.table.options.persistentLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.persistence.save("columns"); - } - - if(!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible); - } - - if(!silent){ - this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), true); - } - } -}; - -//hide column -Column.prototype.hide = function(silent, responsiveToggle){ - if(this.visible){ - this.visible = false; - - this.element.style.display = "none"; - - this.table.columnManager._verticalAlignHeaders(); - - if(this.parent.isGroup){ - this.parent.checkColumnVisibility(); - } - - this.cells.forEach(function(cell){ - cell.hide(); - }); - - if(this.table.options.persistentLayout && this.table.modExists("persistence", true)){ - this.table.modules.persistence.save("columns"); - } - - if(!responsiveToggle && this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.updateColumnVisibility(this, this.visible); - } - - if(!silent){ - this.table.options.columnVisibilityChanged.call(this.table, this.getComponent(), false); - } - } -}; - -Column.prototype.matchChildWidths = function(){ - var childWidth = 0; - - if(this.contentElement && this.columns.length){ - this.columns.forEach(function(column){ - childWidth += column.getWidth(); - }); - - this.contentElement.style.maxWidth = (childWidth - 1) + "px"; - } -}; - -Column.prototype.setWidth = function(width){ - this.widthFixed = true; - this.setWidthActual(width); -}; - -Column.prototype.setWidthActual = function(width){ - - if(isNaN(width)){ - width = Math.floor((this.table.element.clientWidth/100) * parseInt(width)); - } - - width = Math.max(this.minWidth, width); - - this.width = width; - - this.element.style.width = width ? width + "px" : ""; - - if(!this.isGroup){ - this.cells.forEach(function(cell){ - cell.setWidth(width); - }); - } - - if(this.parent.isGroup){ - this.parent.matchChildWidths(); - } - - //set resizable handles - if(this.table.modExists("frozenColumns")){ - this.table.modules.frozenColumns.layout(); - } -}; - - -Column.prototype.checkCellHeights = function(){ - var rows = []; - - this.cells.forEach(function(cell){ - if(cell.row.heightInitialized){ - if(cell.row.getElement().offsetParent !== null){ - rows.push(cell.row); - cell.row.clearCellHeight(); - }else{ - cell.row.heightInitialized = false; - } - } - }); - - rows.forEach(function(row){ - row.calcHeight(); - }); - - rows.forEach(function(row){ - row.setCellHeight(); - }); -}; - -Column.prototype.getWidth = function(){ - // return this.element.offsetWidth; - return this.width; -}; - -Column.prototype.getHeight = function(){ - return this.element.offsetHeight; -}; - -Column.prototype.setMinWidth = function(minWidth){ - this.minWidth = minWidth; - - this.element.style.minWidth = minWidth ? minWidth + "px" : ""; - - this.cells.forEach(function(cell){ - cell.setMinWidth(minWidth); - }); -}; - -Column.prototype.delete = function(){ - if(this.isGroup){ - this.columns.forEach(function(column){ - column.delete(); - }); - } - - var cellCount = this.cells.length; - - for(let i = 0; i < cellCount; i++){ - this.cells[0].delete(); - } - - this.element.parentNode.removeChild(this.element); - - this.table.columnManager.deregisterColumn(this); -}; - -//////////////// Cell Management ///////////////// - -//generate cell for this column -Column.prototype.generateCell = function(row){ - var self = this; - - var cell = new Cell(self, row); - - this.cells.push(cell); - - return cell; -}; - -Column.prototype.reinitializeWidth = function(force){ - - this.widthFixed = false; - - //set width if present - if(typeof this.definition.width !== "undefined" && !force){ - this.setWidth(this.definition.width); - } - - //hide header filters to prevent them altering column width - if(this.table.modExists("filter")){ - this.table.modules.filter.hideHeaderFilterElements(); - } - - this.fitToData(); - - //show header filters again after layout is complete - if(this.table.modExists("filter")){ - this.table.modules.filter.showHeaderFilterElements(); - } -}; - -//set column width to maximum cell width -Column.prototype.fitToData = function(){ - var self = this; - - if(!this.widthFixed){ - this.element.width = ""; - - self.cells.forEach(function(cell){ - cell.setWidth(""); - }); - } - - var maxWidth = this.element.offsetWidth; - - if(!self.width || !this.widthFixed){ - self.cells.forEach(function(cell){ - var width = cell.getWidth(); - - if(width > maxWidth){ - maxWidth = width; - } - }); - - if(maxWidth){ - self.setWidthActual(maxWidth + 1); - } - - } -}; - -Column.prototype.deleteCell = function(cell){ - var index = this.cells.indexOf(cell); - - if(index > -1){ - this.cells.splice(index, 1); - } -}; - -//////////////// Event Bindings ///////////////// - -//////////////// Object Generation ///////////////// -Column.prototype.getComponent = function(){ - return new ColumnComponent(this); -}; \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/column_manager.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/column_manager.js deleted file mode 100644 index 9dc1056977..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/column_manager.js +++ /dev/null @@ -1,553 +0,0 @@ -var ColumnManager = function(table){ - this.table = table; //hold parent table - this.headersElement = this.createHeadersElement(); - this.element = this.createHeaderElement(); //containing element - this.rowManager = null; //hold row manager object - this.columns = []; // column definition object - this.columnsByIndex = []; //columns by index - this.columnsByField = []; //columns by field - this.scrollLeft = 0; - - this.element.insertBefore(this.headersElement, this.element.firstChild); -}; - -////////////// Setup Functions ///////////////// - -ColumnManager.prototype.createHeadersElement = function (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-headers"); - - return el; -}; - -ColumnManager.prototype.createHeaderElement = function (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-header"); - - return el; -}; - -//link to row manager -ColumnManager.prototype.setRowManager = function(manager){ - this.rowManager = manager; -}; - -//return containing element -ColumnManager.prototype.getElement = function(){ - return this.element; -}; - -//return header containing element -ColumnManager.prototype.getHeadersElement = function(){ - return this.headersElement; -}; - -//scroll horizontally to match table body -ColumnManager.prototype.scrollHorizontal = function(left){ - var hozAdjust = 0, - scrollWidth = this.element.scrollWidth - this.table.element.clientWidth; - - this.element.scrollLeft = left; - - //adjust for vertical scrollbar moving table when present - if(left > scrollWidth){ - hozAdjust = left - scrollWidth; - this.element.style.marginLeft = (-(hozAdjust)) + "px"; - }else{ - this.element.style.marginLeft = 0; - } - - //keep frozen columns fixed in position - //this._calcFrozenColumnsPos(hozAdjust + 3); - - this.scrollLeft = left; - - if(this.table.modExists("frozenColumns")){ - this.table.modules.frozenColumns.layout(); - } -}; - - -///////////// Column Setup Functions ///////////// - -ColumnManager.prototype.setColumns = function(cols, row){ - var self = this; - - while(self.headersElement.firstChild) self.headersElement.removeChild(self.headersElement.firstChild); - - self.columns = []; - self.columnsByIndex = []; - self.columnsByField = []; - - - //reset frozen columns - if(self.table.modExists("frozenColumns")){ - self.table.modules.frozenColumns.reset(); - } - - cols.forEach(function(def, i){ - self._addColumn(def); - }); - - self._reIndexColumns(); - - if(self.table.options.responsiveLayout && self.table.modExists("responsiveLayout", true)){ - self.table.modules.responsiveLayout.initialize(); - } - - self.redraw(true); -}; - -ColumnManager.prototype._addColumn = function(definition, before, nextToColumn){ - var column = new Column(definition, this), - colEl = column.getElement(), - index = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn; - - if(nextToColumn && index > -1){ - - var parentIndex = this.columns.indexOf(nextToColumn.getTopColumn()); - var nextEl = nextToColumn.getElement(); - - if(before){ - this.columns.splice(parentIndex, 0, column); - nextEl.parentNode.insertBefore(colEl, nextEl); - }else{ - this.columns.splice(parentIndex + 1, 0, column); - nextEl.parentNode.insertBefore(colEl, nextEl.nextSibling); - } - - }else{ - if(before){ - this.columns.unshift(column); - this.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild); - }else{ - this.columns.push(column); - this.headersElement.appendChild(column.getElement()); - } - } - - return column; -}; - -ColumnManager.prototype.registerColumnField = function(col){ - if(col.definition.field){ - this.columnsByField[col.definition.field] = col; - } -}; - -ColumnManager.prototype.registerColumnPosition = function(col){ - this.columnsByIndex.push(col); -}; - -ColumnManager.prototype._reIndexColumns = function(){ - this.columnsByIndex = []; - - this.columns.forEach(function(column){ - column.reRegisterPosition(); - }); -}; - -//ensure column headers take up the correct amount of space in column groups -ColumnManager.prototype._verticalAlignHeaders = function(){ - var self = this, minHeight = 0; - - self.columns.forEach(function(column){ - var height; - - column.clearVerticalAlign(); - - height = column.getHeight(); - - if(height > minHeight){ - minHeight = height; - } - }); - - self.columns.forEach(function(column){ - column.verticalAlign(self.table.options.columnVertAlign, minHeight); - }); - - self.rowManager.adjustTableSize(); -}; - -//////////////// Column Details ///////////////// - -ColumnManager.prototype.findColumn = function(subject){ - var self = this; - - if(typeof subject == "object"){ - - if(subject instanceof Column){ - //subject is column element - return subject; - }else if(subject instanceof ColumnComponent){ - //subject is public column component - return subject._getSelf() || false; - }else if(subject instanceof HTMLElement){ - //subject is a HTML element of the column header - let match = self.columns.find(function(column){ - return column.element === subject; - }); - - return match || false; - } - - }else{ - //subject should be treated as the field name of the column - return this.columnsByField[subject] || false; - } - - //catch all for any other type of input - - return false; -}; - -ColumnManager.prototype.getColumnByField = function(field){ - return this.columnsByField[field]; -}; - -ColumnManager.prototype.getColumnByIndex = function(index){ - return this.columnsByIndex[index]; -}; - -ColumnManager.prototype.getColumns = function(){ - return this.columns; -}; - -ColumnManager.prototype.findColumnIndex = function(column){ - return this.columnsByIndex.findIndex(function(col){ - return column === col; - }); -}; - -//return all columns that are not groups -ColumnManager.prototype.getRealColumns = function(){ - return this.columnsByIndex; -}; - -//travers across columns and call action -ColumnManager.prototype.traverse = function(callback){ - var self = this; - - self.columnsByIndex.forEach(function(column,i){ - callback(column, i); - }); -}; - -//get defintions of actual columns -ColumnManager.prototype.getDefinitions = function(active){ - var self = this, - output = []; - - self.columnsByIndex.forEach(function(column){ - if(!active || (active && column.visible)){ - output.push(column.getDefinition()); - } - }); - - return output; -}; - -//get full nested definition tree -ColumnManager.prototype.getDefinitionTree = function(){ - var self = this, - output = []; - - self.columns.forEach(function(column){ - output.push(column.getDefinition(true)); - }); - - return output; -}; - -ColumnManager.prototype.getComponents = function(structured){ - var self = this, - output = [], - columns = structured ? self.columns : self.columnsByIndex; - - columns.forEach(function(column){ - output.push(column.getComponent()); - }); - - return output; -}; - -ColumnManager.prototype.getWidth = function(){ - var width = 0; - - this.columnsByIndex.forEach(function(column){ - if(column.visible){ - width += column.getWidth(); - } - }); - - return width; -}; - -ColumnManager.prototype.moveColumn = function(from, to, after){ - - this._moveColumnInArray(this.columns, from, to, after); - this._moveColumnInArray(this.columnsByIndex, from, to, after, true); - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.initialize(); - } - - if(this.table.options.columnMoved){ - this.table.options.columnMoved.call(this.table, from.getComponent(), this.table.columnManager.getComponents()); - } - - if(this.table.options.persistentLayout && this.table.modExists("persistence", true)){ - this.table.modules.persistence.save("columns"); - } -}; - -ColumnManager.prototype._moveColumnInArray = function(columns, from, to, after, updateRows){ - var fromIndex = columns.indexOf(from), - toIndex; - - if (fromIndex > -1) { - - columns.splice(fromIndex, 1); - - toIndex = columns.indexOf(to); - - if (toIndex > -1) { - - if(after){ - toIndex = toIndex+1; - } - - }else{ - toIndex = fromIndex; - } - - columns.splice(toIndex, 0, from); - - if(updateRows){ - - this.table.rowManager.rows.forEach(function(row){ - if(row.cells.length){ - var cell = row.cells.splice(fromIndex, 1)[0]; - row.cells.splice(toIndex, 0, cell); - } - }); - } - } -}; - -ColumnManager.prototype.scrollToColumn = function(column, position, ifVisible){ - var left = 0, - offset = 0, - adjust = 0, - colEl = column.getElement(); - - return new Promise((resolve, reject) => { - - if(typeof position === "undefined"){ - position = this.table.options.scrollToColumnPosition; - } - - if(typeof ifVisible === "undefined"){ - ifVisible = this.table.options.scrollToColumnIfVisible; - } - - if(column.visible){ - - //align to correct position - switch(position){ - case "middle": - case "center": - adjust = -this.element.clientWidth / 2; - break; - - case "right": - adjust = colEl.clientWidth - this.headersElement.clientWidth; - break; - } - - //check column visibility - if(!ifVisible){ - - offset = colEl.offsetLeft; - - if(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){ - return false; - } - } - - //calculate scroll position - left = colEl.offsetLeft + this.element.scrollLeft + adjust; - - left = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0); - - this.table.rowManager.scrollHorizontal(left); - this.scrollHorizontal(left); - - resolve(); - }else{ - console.warn("Scroll Error - Column not visible"); - reject("Scroll Error - Column not visible"); - } - - }); -}; - -//////////////// Cell Management ///////////////// - -ColumnManager.prototype.generateCells = function(row){ - var self = this; - - var cells = []; - - self.columnsByIndex.forEach(function(column){ - cells.push(column.generateCell(row)); - }); - - return cells; -}; - -//////////////// Column Management ///////////////// - - -ColumnManager.prototype.getFlexBaseWidth = function(){ - var self = this, - totalWidth = self.table.element.clientWidth, //table element width - fixedWidth = 0; - - //adjust for vertical scrollbar if present - if(self.rowManager.element.scrollHeight > self.rowManager.element.clientHeight){ - totalWidth -= self.rowManager.element.offsetWidth - self.rowManager.element.clientWidth; - } - - this.columnsByIndex.forEach(function(column){ - var width, minWidth, colWidth; - - if(column.visible){ - - width = column.definition.width || 0; - - minWidth = typeof column.minWidth == "undefined" ? self.table.options.columnMinWidth : parseInt(column.minWidth); - - if(typeof(width) == "string"){ - if(width.indexOf("%") > -1){ - colWidth = (totalWidth / 100) * parseInt(width) ; - }else{ - colWidth = parseInt(width); - } - }else{ - colWidth = width; - } - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - - } - }); - - return fixedWidth; -}; - -ColumnManager.prototype.addColumn = function(definition, before, nextToColumn){ - var column = this._addColumn(definition, before, nextToColumn); - - this._reIndexColumns(); - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.initialize(); - } - - if(this.table.modExists("columnCalcs")){ - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - this.redraw(); - - if(this.table.modules.layout.getMode() != "fitColumns"){ - column.reinitializeWidth(); - } - - this._verticalAlignHeaders(); - - this.table.rowManager.reinitialize(); -}; - -//remove column from system -ColumnManager.prototype.deregisterColumn = function(column){ - var field = column.getField(), - index; - - //remove from field list - if(field){ - delete this.columnsByField[field]; - } - - //remove from index list - index = this.columnsByIndex.indexOf(column); - - if(index > -1){ - this.columnsByIndex.splice(index, 1); - } - - //remove from column list - index = this.columns.indexOf(column); - - if(index > -1){ - this.columns.splice(index, 1); - } - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.initialize(); - } - - this.redraw(); -}; - -//redraw columns -ColumnManager.prototype.redraw = function(force){ - if(force){ - - if(Tabulator.prototype.helpers.elVisible(this.element)){ - this._verticalAlignHeaders(); - } - - this.table.rowManager.resetScroll(); - this.table.rowManager.reinitialize(); - } - - if(this.table.modules.layout.getMode() == "fitColumns"){ - this.table.modules.layout.layout(); - }else{ - if(force){ - this.table.modules.layout.layout(); - }else{ - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } - } - } - - if(this.table.modExists("frozenColumns")){ - this.table.modules.frozenColumns.layout(); - } - - if(this.table.modExists("columnCalcs")){ - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - if(force){ - if(this.table.options.persistentLayout && this.table.modExists("persistence", true)){ - this.table.modules.persistence.save("columns"); - } - - if(this.table.modExists("columnCalcs")){ - this.table.modules.columnCalcs.redraw(); - } - } - - this.table.footerManager.redraw(); - - - -}; diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/core.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/core.js deleted file mode 100644 index 3a3d69f910..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/core.js +++ /dev/null @@ -1,1691 +0,0 @@ -'use strict'; - -/*=include polyfills.js */ - -/*=include column_manager.js */ -/*=include column.js */ -/*=include row_manager.js */ -/*=include row.js */ -/*=include cell.js */ -/*=include footer_manager.js */ - -var Tabulator = function(element, options){ - - this.options = {}; - - this.columnManager = null; // hold Column Manager - this.rowManager = null; //hold Row Manager - this.footerManager = null; //holder Footer Manager - this.browser = ""; //hold current browser type - this.browserSlow = false; //handle reduced functionality for slower browsers - - this.modules = {}; //hold all modules bound to this table - - this.initializeElement(element); - this.initializeOptions(options || {}); - this._create(); - - Tabulator.prototype.comms.register(this); //register table for inderdevice communication -}; - -//default setup options -Tabulator.prototype.defaultOptions = { - - height:false, //height of tabulator - - layout:"fitData", ///layout type "fitColumns" | "fitData" - layoutColumnsOnNewData:false, //update column widths on setData - - columnMinWidth:40, //minimum global width for a column - columnVertAlign:"top", //vertical alignment of column headers - - resizableColumns:true, //resizable columns - resizableRows:false, //resizable rows - autoResize:true, //auto resize table - - columns:[],//store for colum header info - - data:[], //default starting data - - nestedFieldSeparator:".", //seperatpr for nested data - - tooltips: false, //Tool tip value - tooltipsHeader: false, //Tool tip for headers - tooltipGenerationMode:"load", //when to generate tooltips - - initialSort:false, //initial sorting criteria - initialFilter:false, //initial filtering criteria - - columnHeaderSortMulti: true, //multiple or single column sorting - - sortOrderReverse:false, //reverse internal sort ordering - - footerElement:false, //hold footer element - - index:"id", //filed for row index - - keybindings:[], //array for keybindings - - clipboard:false, //enable clipboard - clipboardCopyStyled:true, //formatted table data - clipboardCopySelector:"active", //method of chosing which data is coppied to the clipboard - clipboardCopyFormatter:"table", //convert data to a clipboard string - clipboardPasteParser:"table", //convert pasted clipboard data to rows - clipboardPasteAction:"insert", //how to insert pasted data into the table - clipboardCopyConfig:false, //clipboard config - - clipboardCopied:function(){}, //data has been copied to the clipboard - clipboardPasted:function(){}, //data has been pasted into the table - clipboardPasteError:function(){}, //data has not successfully been pasted into the table - - downloadDataFormatter:false, //function to manipulate table data before it is downloaded - downloadReady:function(data, blob){return blob;}, //function to manipulate download data - downloadComplete:false, //function to manipulate download data - downloadConfig:false, //download config - - dataTree:false, //enable data tree - dataTreeBranchElement: true, //show data tree branch element - dataTreeChildIndent:9, //data tree child indent in px - dataTreeChildField:"_children", //data tre column field to look for child rows - dataTreeCollapseElement:false, //data tree row collapse element - dataTreeExpandElement:false, //data tree row expand element - dataTreeStartExpanded:false, - dataTreeRowExpanded:function(){}, //row has been expanded - dataTreeRowCollapsed:function(){}, //row has been collapsed - - - addRowPos:"bottom", //position to insert blank rows, top|bottom - - selectable:"highlight", //highlight rows on hover - selectableRangeMode: "drag", //highlight rows on hover - selectableRollingSelection:true, //roll selection once maximum number of selectable rows is reached - selectablePersistence:true, // maintain selection when table view is updated - selectableCheck:function(data, row){return true;}, //check wheather row is selectable - - headerFilterPlaceholder: false, //placeholder text to display in header filters - - history:false, //enable edit history - - locale:false, //current system language - langs:{}, - - virtualDom:true, //enable DOM virtualization - - persistentLayout:false, //store column layout in memory - persistentSort:false, //store sorting in memory - persistentFilter:false, //store filters in memory - persistenceID:"", //key for persistent storage - persistenceMode:true, //mode for storing persistence information - - responsiveLayout:false, //responsive layout flags - responsiveLayoutCollapseStartOpen:true, //start showing collapsed data - responsiveLayoutCollapseUseFormatters:true, //responsive layout collapse formatter - responsiveLayoutCollapseFormatter:false, //responsive layout collapse formatter - - pagination:false, //set pagination type - paginationSize:false, //set number of rows to a page - paginationButtonCount: 5, // set count of page button - paginationElement:false, //element to hold pagination numbers - paginationDataSent:{}, //pagination data sent to the server - paginationDataReceived:{}, //pagination data received from the server - paginationAddRow: "page", //add rows on table or page - - ajaxURL:false, //url for ajax loading - ajaxURLGenerator:false, - ajaxParams:{}, //params for ajax loading - ajaxConfig:"get", //ajax request type - ajaxContentType:"form", //ajax request type - ajaxRequestFunc:false, //promise function - ajaxLoader:true, //show loader - ajaxLoaderLoading:false, //loader element - ajaxLoaderError:false, //loader element - ajaxFiltering:false, - ajaxSorting:false, - ajaxProgressiveLoad:false, //progressive loading - ajaxProgressiveLoadDelay:0, //delay between requests - ajaxProgressiveLoadScrollMargin:0, //margin before scroll begins - - groupBy:false, //enable table grouping and set field to group by - groupStartOpen:true, //starting state of group - groupValues:false, - - groupHeader:false, //header generation function - - movableColumns:false, //enable movable columns - - movableRows:false, //enable movable rows - movableRowsConnectedTables:false, //tables for movable rows to be connected to - movableRowsSender:false, - movableRowsReceiver:"insert", - movableRowsSendingStart:function(){}, - movableRowsSent:function(){}, - movableRowsSentFailed:function(){}, - movableRowsSendingStop:function(){}, - movableRowsReceivingStart:function(){}, - movableRowsReceived:function(){}, - movableRowsReceivedFailed:function(){}, - movableRowsReceivingStop:function(){}, - - scrollToRowPosition:"top", - scrollToRowIfVisible:true, - - scrollToColumnPosition:"left", - scrollToColumnIfVisible:true, - - rowFormatter:false, - - placeholder:false, - - //table building callbacks - tableBuilding:function(){}, - tableBuilt:function(){}, - - //render callbacks - renderStarted:function(){}, - renderComplete:function(){}, - - //row callbacks - rowClick:false, - rowDblClick:false, - rowContext:false, - rowTap:false, - rowDblTap:false, - rowTapHold:false, - rowAdded:function(){}, - rowDeleted:function(){}, - rowMoved:function(){}, - rowUpdated:function(){}, - rowSelectionChanged:function(){}, - rowSelected:function(){}, - rowDeselected:function(){}, - rowResized:function(){}, - - //cell callbacks - //row callbacks - cellClick:false, - cellDblClick:false, - cellContext:false, - cellTap:false, - cellDblTap:false, - cellTapHold:false, - cellEditing:function(){}, - cellEdited:function(){}, - cellEditCancelled:function(){}, - - //column callbacks - columnMoved:false, - columnResized:function(){}, - columnTitleChanged:function(){}, - columnVisibilityChanged:function(){}, - - //HTML iport callbacks - htmlImporting:function(){}, - htmlImported:function(){}, - - //data callbacks - dataLoading:function(){}, - dataLoaded:function(){}, - dataEdited:function(){}, - - //ajax callbacks - ajaxRequesting:function(){}, - ajaxResponse:false, - ajaxError:function(){}, - - //filtering callbacks - dataFiltering:false, - dataFiltered:false, - - //sorting callbacks - dataSorting:function(){}, - dataSorted:function(){}, - - //grouping callbacks - groupToggleElement:"arrow", - groupClosedShowCalcs:false, - dataGrouping:function(){}, - dataGrouped:false, - groupVisibilityChanged:function(){}, - groupClick:false, - groupDblClick:false, - groupContext:false, - groupTap:false, - groupDblTap:false, - groupTapHold:false, - - columnCalcs:true, - - //pagination callbacks - pageLoaded:function(){}, - - //localization callbacks - localized:function(){}, - - //validation has failed - validationFailed:function(){}, - - //history callbacks - historyUndo:function(){}, - historyRedo:function(){}, - -}; - -Tabulator.prototype.initializeOptions = function(options){ - for (var key in this.defaultOptions){ - if(key in options){ - this.options[key] = options[key]; - }else{ - if(Array.isArray(this.defaultOptions[key])){ - this.options[key] = []; - }else if(typeof this.defaultOptions[key] === "object"){ - this.options[key] = {}; - }else{ - this.options[key] = this.defaultOptions[key]; - } - } - } -}; - -Tabulator.prototype.initializeElement = function(element){ - - if(element instanceof HTMLElement){ - this.element = element; - return true; - }else if(typeof element === "string"){ - this.element = document.querySelector(element); - - if(this.element){ - return true; - }else{ - console.error("Tabulator Creation Error - no element found matching selector: ", element); - return false; - } - }else{ - console.error("Tabulator Creation Error - Invalid element provided:", element); - return false; - } - -}; - - -//convert depricated functionality to new functions -Tabulator.prototype._mapDepricatedFunctionality = function(){ - -}; - -//concreate table -Tabulator.prototype._create = function(){ - this._clearObjectPointers(); - - this._mapDepricatedFunctionality(); - - this.bindModules(); - - if(this.element.tagName === "TABLE"){ - if(this.modExists("htmlTableImport", true)){ - this.modules.htmlTableImport.parseTable(); - } - } - - this.columnManager = new ColumnManager(this); - this.rowManager = new RowManager(this); - this.footerManager = new FooterManager(this); - - this.columnManager.setRowManager(this.rowManager); - this.rowManager.setColumnManager(this.columnManager); - - this._buildElement(); - - this._loadInitialData(); -}; - -//clear pointers to objects in default config object -Tabulator.prototype._clearObjectPointers = function(){ - this.options.columns = this.options.columns.slice(0); - this.options.data = this.options.data.slice(0); -}; - - -//build tabulator element -Tabulator.prototype._buildElement = function(){ - var element = this.element, - mod = this.modules, - options = this.options; - - options.tableBuilding.call(this); - - element.classList.add("tabulator"); - element.setAttribute("role", "grid"); - - //empty element - while(element.firstChild) element.removeChild(element.firstChild); - - //set table height - if(options.height){ - options.height = isNaN(options.height) ? options.height : options.height + "px"; - element.style.height = options.height; - } - - this.rowManager.initialize(); - - this._detectBrowser(); - - if(this.modExists("layout", true)){ - mod.layout.initialize(options.layout); - } - - //set localization - if(options.headerFilterPlaceholder !== false){ - mod.localize.setHeaderFilterPlaceholder(options.headerFilterPlaceholder); - } - - for(let locale in options.langs){ - mod.localize.installLang(locale, options.langs[locale]); - } - - mod.localize.setLocale(options.locale); - - //configure placeholder element - if(typeof options.placeholder == "string"){ - - var el = document.createElement("div"); - el.classList.add("tabulator-placeholder"); - - var span = document.createElement("span"); - span.innerHTML = options.placeholder; - - el.appendChild(span); - - options.placeholder = el; - } - - //build table elements - element.appendChild(this.columnManager.getElement()); - element.appendChild(this.rowManager.getElement()); - - - if(options.footerElement){ - this.footerManager.activate(); - } - - if(options.dataTree && this.modExists("dataTree", true)){ - mod.dataTree.initialize(); - } - - if( (options.persistentLayout || options.persistentSort || options.persistentFilter) && this.modExists("persistence", true)){ - mod.persistence.initialize(options.persistenceMode, options.persistenceID); - } - - if(options.persistentLayout && this.modExists("persistence", true)){ - options.columns = mod.persistence.load("columns", options.columns) ; - } - - if(options.movableRows && this.modExists("moveRow")){ - mod.moveRow.initialize(); - } - - if(this.modExists("columnCalcs")){ - mod.columnCalcs.initialize(); - } - - this.columnManager.setColumns(options.columns); - - if(this.modExists("frozenRows")){ - this.modules.frozenRows.initialize(); - } - - if((options.persistentSort || options.initialSort) && this.modExists("sort", true)){ - var sorters = []; - - if(options.persistentSort && this.modExists("persistence", true)){ - sorters = mod.persistence.load("sort"); - - if(sorters === false && options.initialSort){ - sorters = options.initialSort; - } - }else if(options.initialSort){ - sorters = options.initialSort; - } - - mod.sort.setSort(sorters); - } - - if((options.persistentFilter || options.initialFilter) && this.modExists("filter", true)){ - var filters = []; - - - if(options.persistentFilter && this.modExists("persistence", true)){ - filters = mod.persistence.load("filter"); - - if(filters === false && options.initialFilter){ - filters = options.initialFilter; - } - }else if(options.initialFilter){ - filters = options.initialFilter; - } - - mod.filter.setFilter(filters); - // this.setFilter(filters); - } - - if(this.modExists("ajax")){ - mod.ajax.initialize(); - } - - if(options.pagination && this.modExists("page", true)){ - mod.page.initialize(); - } - - if(options.groupBy && this.modExists("groupRows", true)){ - mod.groupRows.initialize(); - } - - if(this.modExists("keybindings")){ - mod.keybindings.initialize(); - } - - if(this.modExists("selectRow")){ - mod.selectRow.clearSelectionData(true); - } - - if(options.autoResize && this.modExists("resizeTable")){ - mod.resizeTable.initialize(); - } - - if(this.modExists("clipboard")){ - mod.clipboard.initialize(); - } - - options.tableBuilt.call(this); -}; - -Tabulator.prototype._loadInitialData = function(){ - var self = this; - - if(self.options.pagination && self.modExists("page")){ - self.modules.page.reset(true); - - if(self.options.pagination == "local"){ - if(self.options.data.length){ - self.rowManager.setData(self.options.data); - }else{ - if((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")){ - self.modules.ajax.loadData(); - }else{ - self.rowManager.setData(self.options.data); - } - } - }else{ - self.modules.page.setPage(1); - } - }else{ - if(self.options.data.length){ - self.rowManager.setData(self.options.data); - }else{ - if((self.options.ajaxURL || self.options.ajaxURLGenerator) && self.modExists("ajax")){ - self.modules.ajax.loadData(); - }else{ - self.rowManager.setData(self.options.data); - } - } - } -}; - -//deconstructor -Tabulator.prototype.destroy = function(){ - var element = this.element; - - Tabulator.prototype.comms.deregister(this); //deregister table from inderdevice communication - - //clear row data - this.rowManager.rows.forEach(function(row){ - row.wipe(); - }); - - this.rowManager.rows = []; - this.rowManager.activeRows = []; - this.rowManager.displayRows = []; - - //clear event bindings - if(this.options.autoResize && this.modExists("resizeTable")){ - this.modules.resizeTable.clearBindings(); - } - - if(this.modExists("keybindings")){ - this.modules.keybindings.clearBindings(); - } - - //clear DOM - while(element.firstChild) element.removeChild(element.firstChild); - element.classList.remove("tabulator"); -}; - -Tabulator.prototype._detectBrowser = function(){ - var ua = navigator.userAgent; - - if(ua.indexOf("Trident") > -1){ - this.browser = "ie"; - this.browserSlow = true; - }else if(ua.indexOf("Edge") > -1){ - this.browser = "edge"; - this.browserSlow = true; - }else if(ua.indexOf("Firefox") > -1){ - this.browser = "firefox"; - this.browserSlow = false; - }else{ - this.browser = "other"; - this.browserSlow = false; - } -}; - -////////////////// Data Handling ////////////////// - - -//load data -Tabulator.prototype.setData = function(data, params, config){ - if(this.modExists("ajax")){ - this.modules.ajax.blockActiveRequest(); - } - - return this._setData(data, params, config); -}; - -Tabulator.prototype._setData = function(data, params, config, inPosition){ - var self = this; - - if(typeof(data) === "string"){ - if (data.indexOf("{") == 0 || data.indexOf("[") == 0){ - //data is a json encoded string - return self.rowManager.setData(JSON.parse(data), inPosition); - }else{ - - if(self.modExists("ajax", true)){ - if(params){ - self.modules.ajax.setParams(params); - } - - if(config){ - self.modules.ajax.setConfig(config); - } - - self.modules.ajax.setUrl(data); - - if(self.options.pagination == "remote" && self.modExists("page", true)){ - self.modules.page.reset(true); - return self.modules.page.setPage(1); - }else{ - //assume data is url, make ajax call to url to get data - return self.modules.ajax.loadData(inPosition); - } - } - } - }else{ - if(data){ - //asume data is already an object - return self.rowManager.setData(data, inPosition); - }else{ - - //no data provided, check if ajaxURL is present; - if(self.modExists("ajax") && (self.modules.ajax.getUrl || self.options.ajaxURLGenerator)){ - - if(self.options.pagination == "remote" && self.modExists("page", true)){ - self.modules.page.reset(true); - return self.modules.page.setPage(1); - }else{ - return self.modules.ajax.loadData(inPosition); - } - - }else{ - //empty data - return self.rowManager.setData([], inPosition); - } - } - } - }; - -//clear data -Tabulator.prototype.clearData = function(){ - if(this.modExists("ajax")){ - this.modules.ajax.blockActiveRequest(); - } - - this.rowManager.clearData(); -}; - -//get table data array -Tabulator.prototype.getData = function(active){ - return this.rowManager.getData(active); -}; - -//get table data array count -Tabulator.prototype.getDataCount = function(active){ - return this.rowManager.getDataCount(active); -}; - -//search for specific row components -Tabulator.prototype.searchRows = function(field, type, value){ - if(this.modExists("filter", true)){ - return this.modules.filter.search("rows", field, type, value); - } -}; - -//search for specific data -Tabulator.prototype.searchData = function(field, type, value){ - if(this.modExists("filter", true)){ - return this.modules.filter.search("data", field, type, value); - } -}; - -//get table html -Tabulator.prototype.getHtml = function(active){ - return this.rowManager.getHtml(active); -}; - -//retrieve Ajax URL -Tabulator.prototype.getAjaxUrl = function(){ - if(this.modExists("ajax", true)){ - return this.modules.ajax.getUrl(); - } -}; - -//replace data, keeping table in position with same sort -Tabulator.prototype.replaceData = function(data, params, config){ - if(this.modExists("ajax")){ - this.modules.ajax.blockActiveRequest(); - } - - return this._setData(data, params, config, true); -}; - - -//update table data -Tabulator.prototype.updateData = function(data){ - var self = this; - var responses = 0; - - return new Promise((resolve, reject) => { - if(this.modExists("ajax")){ - this.modules.ajax.blockActiveRequest(); - } - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(data){ - data.forEach(function(item){ - var row = self.rowManager.findRow(item[self.options.index]); - - if(row){ - responses++; - - row.updateData(item) - .then(()=>{ - responses--; - - if(!responses){ - resolve(); - } - }); - } - }); - }else{ - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); - -}; - -Tabulator.prototype.addData = function(data, pos, index){ - return new Promise((resolve, reject) => { - if(this.modExists("ajax")){ - this.modules.ajax.blockActiveRequest(); - } - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(data){ - this.rowManager.addRows(data, pos, index) - .then((rows) => { - var output = []; - - rows.forEach(function(row){ - output.push(row.getComponent()); - }); - - resolve(output); - }); - }else{ - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); -}; - -//update table data -Tabulator.prototype.updateOrAddData = function(data){ - var self = this, - rows = [], - responses = 0; - - return new Promise((resolve, reject) => { - if(this.modExists("ajax")){ - this.modules.ajax.blockActiveRequest(); - } - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(data){ - data.forEach(function(item){ - var row = self.rowManager.findRow(item[self.options.index]); - - responses++; - - if(row){ - row.updateData(item) - .then(()=>{ - responses--; - rows.push(row.getComponent()); - - if(!responses){ - resolve(rows); - } - }); - }else{ - self.rowManager.addRows(item) - .then((newRows)=>{ - responses--; - rows.push(newRows[0].getComponent()); - - if(!responses){ - resolve(rows); - } - }); - } - }); - }else{ - console.warn("Update Error - No data provided"); - reject("Update Error - No data provided"); - } - }); -}; - -//get row object -Tabulator.prototype.getRow = function(index){ - var row = this.rowManager.findRow(index); - - if(row){ - return row.getComponent(); - }else{ - console.warn("Find Error - No matching row found:", index); - return false; - } -}; - -//get row object -Tabulator.prototype.getRowFromPosition = function(position, active){ - var row = this.rowManager.getRowFromPosition(position, active); - - if(row){ - return row.getComponent(); - }else{ - console.warn("Find Error - No matching row found:", position); - return false; - } -}; - -//delete row from table -Tabulator.prototype.deleteRow = function(index){ - return new Promise((resolve, reject) => { - var row = this.rowManager.findRow(index); - - if(row){ - row.delete() - .then(() => { - resolve(); - }) - .catch((err) => { - reject(err); - }); - - }else{ - console.warn("Delete Error - No matching row found:", index); - reject("Delete Error - No matching row found") - } - }); -}; - -//add row to table -Tabulator.prototype.addRow = function(data, pos, index){ - return new Promise((resolve, reject) => { - if(typeof data === "string"){ - data = JSON.parse(data); - } - - this.rowManager.addRows(data, pos, index) - .then((rows)=>{ - //recalc column calculations if present - if(this.modExists("columnCalcs")){ - this.modules.columnCalcs.recalc(this.rowManager.activeRows); - } - - resolve(rows[0].getComponent()); - }); - }); -}; - -//update a row if it exitsts otherwise create it -Tabulator.prototype.updateOrAddRow = function(index, data){ - return new Promise((resolve, reject) => { - var row = this.rowManager.findRow(index); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(row){ - row.updateData(data) - .then(()=>{ - //recalc column calculations if present - if(this.modExists("columnCalcs")){ - this.modules.columnCalcs.recalc(this.rowManager.activeRows); - } - - resolve(row.getComponent()); - }) - .catch((err)=>{ - reject(err); - }); - }else{ - row = this.rowManager.addRows(data) - .then((rows)=>{ - //recalc column calculations if present - if(this.modExists("columnCalcs")){ - this.modules.columnCalcs.recalc(this.rowManager.activeRows); - } - - resolve(rows[0].getComponent()); - }) - .catch((err)=>{ - reject(err); - }); - } - }); -}; - -//update row data -Tabulator.prototype.updateRow = function(index, data){ - return new Promise((resolve, reject) => { - var row = this.rowManager.findRow(index); - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - if(row){ - row.updateData(data).then(()=>{ - resolve(row.getComponent()); - }) - .catch((err)=>{ - reject(err); - }); - }else{ - console.warn("Update Error - No matching row found:", index); - reject("Update Error - No matching row found"); - } - }); -}; - -//scroll to row in DOM -Tabulator.prototype.scrollToRow = function(index, position, ifVisible){ - return new Promise((resolve, reject) => { - var row = this.rowManager.findRow(index); - - if(row){ - this.rowManager.scrollToRow(row, position, ifVisible) - .then(()=>{ - resolve(); - }) - .catch((err)=>{ - reject(err); - }); - }else{ - console.warn("Scroll Error - No matching row found:", index); - reject("Scroll Error - No matching row found"); - } - }); -}; - -Tabulator.prototype.getRows = function(active){ - return this.rowManager.getComponents(active); -}; - -//get position of row in table -Tabulator.prototype.getRowPosition = function(index, active){ - var row = this.rowManager.findRow(index); - - if(row){ - return this.rowManager.getRowPosition(row, active); - }else{ - console.warn("Position Error - No matching row found:", index); - return false; - } -}; - -//copy table data to clipboard -Tabulator.prototype.copyToClipboard = function(selector, selectorParams, formatter, formatterParams){ - if(this.modExists("clipboard", true)){ - this.modules.clipboard.copy(selector, selectorParams, formatter, formatterParams); - } -}; - -/////////////// Column Functions /////////////// - -Tabulator.prototype.setColumns = function(definition){ - this.columnManager.setColumns(definition); -}; - -Tabulator.prototype.getColumns = function(structured){ - return this.columnManager.getComponents(structured); -}; - -Tabulator.prototype.getColumn = function(field){ - var col = this.columnManager.findColumn(field); - - if(col){ - return col.getComponent(); - }else{ - console.warn("Find Error - No matching column found:", field); - return false; - } -}; - -Tabulator.prototype.getColumnDefinitions = function(){ - return this.columnManager.getDefinitionTree(); -}; - -Tabulator.prototype.getColumnLayout = function(){ - if(this.modExists("persistence", true)){ - return this.modules.persistence.parseColumns(this.columnManager.getColumns()); - } -}; - -Tabulator.prototype.setColumnLayout = function(layout){ - if(this.modExists("persistence", true)){ - this.columnManager.setColumns(this.modules.persistence.mergeDefinition(this.options.columns, layout)) - return true; - } - return false; -}; - -Tabulator.prototype.showColumn = function(field){ - var column = this.columnManager.findColumn(field); - - if(column){ - column.show(); - - if(this.options.responsiveLayout && this.modExists("responsiveLayout", true)){ - this.modules.responsiveLayout.update(); - } - }else{ - console.warn("Column Show Error - No matching column found:", field); - return false; - } -}; - -Tabulator.prototype.hideColumn = function(field){ - var column = this.columnManager.findColumn(field); - - if(column){ - column.hide(); - - if(this.options.responsiveLayout && this.modExists("responsiveLayout", true)){ - this.modules.responsiveLayout.update(); - } - }else{ - console.warn("Column Hide Error - No matching column found:", field); - return false; - } -}; - - -Tabulator.prototype.toggleColumn = function(field){ - var column = this.columnManager.findColumn(field); - - if(column){ - if(column.visible){ - column.hide(); - }else{ - column.show(); - } - }else{ - console.warn("Column Visibility Toggle Error - No matching column found:", field); - return false; - } -}; - -Tabulator.prototype.addColumn = function(definition, before, field){ - var column = this.columnManager.findColumn(field); - - this.columnManager.addColumn(definition, before, column) -}; - -Tabulator.prototype.deleteColumn = function(field){ - var column = this.columnManager.findColumn(field); - - if(column){ - column.delete(); - }else{ - console.warn("Column Delete Error - No matching column found:", field); - return false; - } -}; - -//scroll to column in DOM -Tabulator.prototype.scrollToColumn = function(field, position, ifVisible){ - - return new Promise((resolve, reject) => { - var column = this.columnManager.findColumn(field); - - if(column){ - this.columnManager.scrollToColumn(column, position, ifVisible) - .then(()=>{ - resolve(); - }) - .catch((err)=>{ - reject(err); - }); - }else{ - console.warn("Scroll Error - No matching column found:", field); - reject("Scroll Error - No matching column found"); - } - }); - -}; - - -//////////// Localization Functions //////////// -Tabulator.prototype.setLocale = function(locale){ - this.modules.localize.setLocale(locale); -}; - -Tabulator.prototype.getLocale = function(){ - return this.modules.localize.getLocale(); -}; - -Tabulator.prototype.getLang = function(locale){ - return this.modules.localize.getLang(locale); -}; - -//////////// General Public Functions //////////// - -//redraw list without updating data -Tabulator.prototype.redraw = function(force){ - this.columnManager.redraw(force); - this.rowManager.redraw(force); -}; - -Tabulator.prototype.setHeight = function(height){ - this.options.height = isNaN(height) ? height : height + "px"; - this.element.style.height = this.options.height; - this.rowManager.redraw(); -}; - -///////////////////// Sorting //////////////////// - -//trigger sort -Tabulator.prototype.setSort = function(sortList, dir){ - if(this.modExists("sort", true)){ - this.modules.sort.setSort(sortList, dir); - this.rowManager.sorterRefresh(); - } -}; - -Tabulator.prototype.getSorters = function(){ - if(this.modExists("sort", true)){ - return this.modules.sort.getSort(); - } -}; - -Tabulator.prototype.clearSort = function(){ - if(this.modExists("sort", true)){ - this.modules.sort.clear(); - this.rowManager.sorterRefresh(); - } -}; - - -///////////////////// Filtering //////////////////// - -//set standard filters -Tabulator.prototype.setFilter = function(field, type, value){ - if(this.modExists("filter", true)){ - this.modules.filter.setFilter(field, type, value); - this.rowManager.filterRefresh(); - } -}; - -//add filter to array -Tabulator.prototype.addFilter = function(field, type, value){ - if(this.modExists("filter", true)){ - this.modules.filter.addFilter(field, type, value); - this.rowManager.filterRefresh(); - } -}; - -//get all filters -Tabulator.prototype.getFilters = function(all){ - if(this.modExists("filter", true)){ - return this.modules.filter.getFilters(all); - } -}; - -Tabulator.prototype.setHeaderFilterFocus = function(field){ - if(this.modExists("filter", true)){ - var column = this.columnManager.findColumn(field); - - if(column){ - this.modules.filter.setHeaderFilterFocus(column); - }else{ - console.warn("Column Filter Focus Error - No matching column found:", field); - return false; - } - } -}; - - -Tabulator.prototype.setHeaderFilterValue = function(field, value){ - if(this.modExists("filter", true)){ - var column = this.columnManager.findColumn(field); - - if(column){ - this.modules.filter.setHeaderFilterValue(column, value); - }else{ - console.warn("Column Filter Error - No matching column found:", field); - return false; - } - } -}; - -Tabulator.prototype.getHeaderFilters = function(){ - if(this.modExists("filter", true)){ - return this.modules.filter.getHeaderFilters(); - } -}; - - -//remove filter from array -Tabulator.prototype.removeFilter = function(field, type, value){ - if(this.modExists("filter", true)){ - this.modules.filter.removeFilter(field, type, value); - this.rowManager.filterRefresh(); - } -}; - -//clear filters -Tabulator.prototype.clearFilter = function(all){ - if(this.modExists("filter", true)){ - this.modules.filter.clearFilter(all); - this.rowManager.filterRefresh(); - } -}; - -//clear header filters -Tabulator.prototype.clearHeaderFilter = function(){ - if(this.modExists("filter", true)){ - this.modules.filter.clearHeaderFilter(); - this.rowManager.filterRefresh(); - } -}; - -///////////////////// Filtering //////////////////// -Tabulator.prototype.selectRow = function(rows){ - if(this.modExists("selectRow", true)){ - this.modules.selectRow.selectRows(rows); - } -}; - -Tabulator.prototype.deselectRow = function(rows){ - if(this.modExists("selectRow", true)){ - this.modules.selectRow.deselectRows(rows); - } -}; - -Tabulator.prototype.toggleSelectRow = function(row){ - if(this.modExists("selectRow", true)){ - this.modules.selectRow.toggleRow(row); - } -}; - -Tabulator.prototype.getSelectedRows = function(){ - if(this.modExists("selectRow", true)){ - return this.modules.selectRow.getSelectedRows(); - } -}; - -Tabulator.prototype.getSelectedData = function(){ - if(this.modExists("selectRow", true)){ - return this.modules.selectRow.getSelectedData(); - } -}; - -//////////// Pagination Functions //////////// - -Tabulator.prototype.setMaxPage = function(max){ - if(this.options.pagination && this.modExists("page")){ - this.modules.page.setMaxPage(max); - }else{ - return false; - } -}; - -Tabulator.prototype.setPage = function(page){ - if(this.options.pagination && this.modExists("page")){ - this.modules.page.setPage(page); - }else{ - return false; - } -}; - -Tabulator.prototype.setPageSize = function(size){ - if(this.options.pagination && this.modExists("page")){ - this.modules.page.setPageSize(size); - this.modules.page.setPage(1); - }else{ - return false; - } -}; - -Tabulator.prototype.getPageSize = function(){ - if(this.options.pagination && this.modExists("page", true)){ - return this.modules.page.getPageSize(); - } -}; - -Tabulator.prototype.previousPage = function(){ - if(this.options.pagination && this.modExists("page")){ - this.modules.page.previousPage(); - }else{ - return false; - } -}; - -Tabulator.prototype.nextPage = function(){ - if(this.options.pagination && this.modExists("page")){ - this.modules.page.nextPage(); - }else{ - return false; - } -}; - -Tabulator.prototype.getPage = function(){ - if(this.options.pagination && this.modExists("page")){ - return this.modules.page.getPage(); - }else{ - return false; - } -}; - -Tabulator.prototype.getPageMax = function(){ - if(this.options.pagination && this.modExists("page")){ - return this.modules.page.getPageMax(); - }else{ - return false; - } -}; - -///////////////// Grouping Functions /////////////// - -Tabulator.prototype.setGroupBy = function(groups){ - if(this.modExists("groupRows", true)){ - this.options.groupBy = groups; - this.modules.groupRows.initialize(); - this.rowManager.refreshActiveData("display"); - }else{ - return false; - } -}; - -Tabulator.prototype.setGroupStartOpen = function(values){ - if(this.modExists("groupRows", true)){ - this.options.groupStartOpen = values; - this.modules.groupRows.initialize(); - if(this.options.groupBy){ - this.rowManager.refreshActiveData("group"); - }else{ - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - }else{ - return false; - } -}; - -Tabulator.prototype.setGroupHeader = function(values){ - if(this.modExists("groupRows", true)){ - this.options.groupHeader = values; - this.modules.groupRows.initialize(); - if(this.options.groupBy){ - this.rowManager.refreshActiveData("group"); - }else{ - console.warn("Grouping Update - cant refresh view, no groups have been set"); - } - }else{ - return false; - } -}; - -Tabulator.prototype.getGroups = function(values){ - if(this.modExists("groupRows", true)){ - return this.modules.groupRows.getGroups(true); - }else{ - return false; - } -}; - -// get grouped table data in the same format as getData() -Tabulator.prototype.getGroupedData = function(){ - if (this.modExists("groupRows", true)){ - return this.options.groupBy ? - this.modules.groupRows.getGroupedData() : this.getData() - } -} - -///////////////// Column Calculation Functions /////////////// -Tabulator.prototype.getCalcResults = function(){ - if(this.modExists("columnCalcs", true)){ - return this.modules.columnCalcs.getResults(); - }else{ - return false; - } -}; - -/////////////// Navigation Management ////////////// - -Tabulator.prototype.navigatePrev = function(){ - var cell = false; - - if(this.modExists("edit", true)){ - cell = this.modules.edit.currentCell; - - if(cell){ - e.preventDefault(); - return cell.nav().prev(); - } - } - - return false; -}; - -Tabulator.prototype.navigateNext = function(){ - var cell = false; - - if(this.modExists("edit", true)){ - cell = this.modules.edit.currentCell; - - if(cell){ - e.preventDefault(); - return cell.nav().next(); - } - } - - return false; -}; - -Tabulator.prototype.navigateLeft = function(){ - var cell = false; - - if(this.modExists("edit", true)){ - cell = this.modules.edit.currentCell; - - if(cell){ - e.preventDefault(); - return cell.nav().left(); - } - } - - return false; -}; - -Tabulator.prototype.navigateRight = function(){ - var cell = false; - - if(this.modExists("edit", true)){ - cell = this.modules.edit.currentCell; - - if(cell){ - e.preventDefault(); - return cell.nav().right(); - } - } - - return false; -}; - -Tabulator.prototype.navigateUp = function(){ - var cell = false; - - if(this.modExists("edit", true)){ - cell = this.modules.edit.currentCell; - - if(cell){ - e.preventDefault(); - return cell.nav().up(); - } - } - - return false; -}; - -Tabulator.prototype.navigateDown = function(){ - var cell = false; - - if(this.modExists("edit", true)){ - cell = this.modules.edit.currentCell; - - if(cell){ - e.preventDefault(); - return cell.nav().dpwn(); - } - } - - return false; -}; - - -/////////////// History Management ////////////// -Tabulator.prototype.undo = function(){ - if(this.options.history && this.modExists("history", true)){ - return this.modules.history.undo(); - }else{ - return false; - } -}; - -Tabulator.prototype.redo = function(){ - if(this.options.history && this.modExists("history", true)){ - return this.modules.history.redo(); - }else{ - return false; - } -}; - -Tabulator.prototype.getHistoryUndoSize = function(){ - if(this.options.history && this.modExists("history", true)){ - return this.modules.history.getHistoryUndoSize(); - }else{ - return false; - } -}; - -Tabulator.prototype.getHistoryRedoSize = function(){ - if(this.options.history && this.modExists("history", true)){ - return this.modules.history.getHistoryRedoSize(); - }else{ - return false; - } -}; - -/////////////// Download Management ////////////// - -Tabulator.prototype.download = function(type, filename, options){ - if(this.modExists("download", true)){ - this.modules.download.download(type, filename, options); - } -}; - -/////////// Inter Table Communications /////////// - -Tabulator.prototype.tableComms = function(table, module, action, data){ - this.modules.comms.receive(table, module, action, data); -}; - -////////////// Extension Management ////////////// - -//object to hold module -Tabulator.prototype.moduleBindings = {}; - -//extend module -Tabulator.prototype.extendModule = function(name, property, values){ - - if(Tabulator.prototype.moduleBindings[name]){ - var source = Tabulator.prototype.moduleBindings[name].prototype[property]; - - if(source){ - if(typeof values == "object"){ - for(let key in values){ - source[key] = values[key]; - } - }else{ - console.warn("Module Error - Invalid value type, it must be an object"); - } - }else{ - console.warn("Module Error - property does not exist:", property); - } - }else{ - console.warn("Module Error - module does not exist:", name); - } - -}; - -//add module to tabulator -Tabulator.prototype.registerModule = function(name, module){ - var self = this; - Tabulator.prototype.moduleBindings[name] = module; -}; - -//ensure that module are bound to instantiated function -Tabulator.prototype.bindModules = function(){ - this.modules = {}; - - for(var name in Tabulator.prototype.moduleBindings){ - this.modules[name] = new Tabulator.prototype.moduleBindings[name](this); - } -}; - -//Check for module -Tabulator.prototype.modExists = function(plugin, required){ - if(this.modules[plugin]){ - return true; - }else{ - if(required){ - console.error("Tabulator Module Not Installed: " + plugin); - } - return false; - } -}; - - -Tabulator.prototype.helpers = { - - elVisible: function(el){ - return !(el.offsetWidth <= 0 && el.offsetHeight <= 0); - }, - - elOffset: function(el){ - var box = el.getBoundingClientRect(); - - return { - top: box.top + window.pageYOffset - document.documentElement.clientTop, - left: box.left + window.pageXOffset - document.documentElement.clientLeft - }; - }, - - deepClone: function(obj){ - var clone = Array.isArray(obj) ? [] : {}; - - for(var i in obj) { - if(obj[i] != null && typeof(obj[i]) === "object"){ - if (obj[i] instanceof Date) { - clone[i] = new Date(obj[i]); - } else { - clone[i] = this.deepClone(obj[i]); - } - } - else{ - clone[i] = obj[i]; - } - } - return clone; - } -}; - -Tabulator.prototype.comms = { - tables:[], - register:function(table){ - Tabulator.prototype.comms.tables.push(table); - }, - deregister:function(table){ - var index = Tabulator.prototype.comms.tables.indexOf(table); - - if(index > -1){ - Tabulator.prototype.comms.tables.splice(index, 1); - } - }, - lookupTable:function(query){ - var results = [], - matches, match; - - if(typeof query === "string"){ - matches = document.querySelectorAll(query); - - if(matches.length){ - for(var i = 0; i < matches.length; i++){ - match = Tabulator.prototype.comms.matchElement(matches[i]); - - if(match){ - results.push(match); - } - } - } - - }else if(query instanceof HTMLElement || query instanceof Tabulator){ - match = Tabulator.prototype.comms.matchElement(query); - - if(match){ - results.push(match); - } - }else if(Array.isArray(query)){ - query.forEach(function(item){ - results = results.concat(Tabulator.prototype.comms.lookupTable(item)); - }); - }else{ - console.warn("Table Connection Error - Invalid Selector", query); - } - - return results; - }, - matchElement:function(element){ - return Tabulator.prototype.comms.tables.find(function(table){ - return element instanceof Tabulator ? table === element : table.element === element; - }); - } -}; - -/*=include modules/layout.js */ -/*=include modules/localize.js */ -/*=include modules/comms.js */ diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/core_modules.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/core_modules.js deleted file mode 100644 index 4d2e328d15..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/core_modules.js +++ /dev/null @@ -1,16 +0,0 @@ -;(function (global, factory) { - if(typeof exports === 'object' && typeof module !== 'undefined'){ - module.exports = factory(); - }else if(typeof define === 'function' && define.amd){ - define(factory); - }else{ - global.Tabulator = factory(); - } -}(this, (function () { - - /*=include core.js */ - /*=include modules_enabled.js */ - - return Tabulator; - -}))); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/footer_manager.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/footer_manager.js deleted file mode 100644 index d2bd50f108..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/footer_manager.js +++ /dev/null @@ -1,93 +0,0 @@ -var FooterManager = function(table){ - this.table = table; - this.active = false; - this.element = this.createElement(); //containing element - this.external = false; - this.links = []; - - this._initialize(); -}; - -FooterManager.prototype.createElement = function (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-footer"); - - return el; -}; - -FooterManager.prototype._initialize = function(element){ - if(this.table.options.footerElement){ - - switch(typeof this.table.options.footerElement){ - case "string": - - if(this.table.options.footerElement[0] === "<"){ - this.element.innerHTML = this.table.options.footerElement; - }else{ - this.external = true; - this.element = document.querySelector(this.table.options.footerElement); - } - break; - default: - this.element = this.table.options.footerElement; - break; - } - - } -}; - -FooterManager.prototype.getElement = function(){ - return this.element; -}; - - -FooterManager.prototype.append = function(element, parent){ - this.activate(parent); - - this.element.appendChild(element); - this.table.rowManager.adjustTableSize(); -}; - -FooterManager.prototype.prepend = function(element, parent){ - this.activate(parent); - - this.element.insertBefore(element, this.element.firstChild); - this.table.rowManager.adjustTableSize(); -}; - -FooterManager.prototype.remove = function(element){ - element.parentNode.removeChild(element); - this.deactivate(); -}; - -FooterManager.prototype.deactivate = function(force){ - if(!this.element.firstChild || force){ - if(!this.external){ - this.element.parentNode.removeChild(this.element); - } - this.active = false; - } - - // this.table.rowManager.adjustTableSize(); -}; - -FooterManager.prototype.activate = function(parent){ - if(!this.active){ - this.active = true; - if(!this.external){ - this.table.element.appendChild(this.getElement()); - this.table.element.style.display = ''; - } - } - - if(parent){ - this.links.push(parent); - } -}; - -FooterManager.prototype.redraw = function(){ - this.links.forEach(function(link){ - link.footerRedraw(); - }); -}; \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/jquery_wrapper.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/jquery_wrapper.js deleted file mode 100644 index 1f72fca8a5..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/jquery_wrapper.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of the Tabulator package. - * - * (c) Oliver Folkerd - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - * Full Documentation & Demos can be found at: http://olifolkerd.github.io/tabulator/ - * - */ - - (function (factory) { - "use strict"; - if (typeof define === 'function' && define.amd) { - define(['jquery'], factory); - } - else if(typeof module !== 'undefined' && module.exports) { - module.exports = factory(require('jquery')); - } - else { - factory(jQuery); - } - }(function ($, undefined) { - $.widget("ui.tabulator", { - _create:function(){ - this.table = new Tabulator(this.element[0], this.options); - - //map tabulator functions to jquery wrapper - for(var key in Tabulator.prototype){ - if(typeof Tabulator.prototype[key] === "function" && key.charAt(0) !== "_"){ - this[key] = this.table[key].bind(this.table); - } - } - }, - - _setOption: function(option, value){ - console.error("Tabulator jQuery wrapper does not support setting options after the table has been instantiated"); - }, - - _destroy: function(option, value){ - this.table.destroy(); - }, - }); - })); - - diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/accessor.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/accessor.js deleted file mode 100644 index b0cb780256..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/accessor.js +++ /dev/null @@ -1,93 +0,0 @@ -var Accessor = function(table){ - this.table = table; //hold Tabulator object - this.allowedTypes = ["", "data", "download", "clipboard"] //list of accessor types -}; - - -//initialize column accessor -Accessor.prototype.initializeColumn = function(column){ - var self = this, - match = false, - config = {}; - - this.allowedTypes.forEach(function(type){ - var key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)), - accessor; - - if(column.definition[key]){ - accessor = self.lookupAccessor(column.definition[key]); - - if(accessor){ - match = true; - - config[key] = { - accessor:accessor, - params: column.definition[key + "Params"] || {}, - } - } - } - }); - - if(match){ - column.modules.accessor = config; - } -}, - -Accessor.prototype.lookupAccessor = function(value){ - var accessor = false; - - //set column accessor - switch(typeof value){ - case "string": - if(this.accessors[value]){ - accessor = this.accessors[value] - }else{ - console.warn("Accessor Error - No such accessor found, ignoring: ", value); - } - break; - - case "function": - accessor = value; - break; - } - - return accessor; -} - - -//apply accessor to row -Accessor.prototype.transformRow = function(dataIn, type){ - var self = this, - key = "accessor" + (type.charAt(0).toUpperCase() + type.slice(1)); - - //clone data object with deep copy to isolate internal data from returned result - var data = Tabulator.prototype.helpers.deepClone(dataIn || {}); - - self.table.columnManager.traverse(function(column){ - var value, accessor, params, component; - - if(column.modules.accessor){ - - accessor = column.modules.accessor[key] || column.modules.accessor.accessor || false; - - if(accessor){ - value = column.getFieldValue(data); - - if(value != "undefined"){ - component = column.getComponent(); - params = typeof accessor.params === "function" ? accessor.params(value, data, type, component) : accessor.params; - column.setFieldValue(data, accessor.accessor(value, data, type, params, component)); - } - } - } - }); - - return data; -}, - -//default accessors -Accessor.prototype.accessors = {}; - - - -Tabulator.prototype.registerModule("accessor", Accessor); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/ajax.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/ajax.js deleted file mode 100644 index 4bc737f338..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/ajax.js +++ /dev/null @@ -1,428 +0,0 @@ -var Ajax = function(table){ - - this.table = table; //hold Tabulator object - this.config = false; //hold config object for ajax request - this.url = ""; //request URL - this.urlGenerator = false; - this.params = false; //request parameters - - this.loaderElement = this.createLoaderElement(); //loader message div - this.msgElement = this.createMsgElement(); //message element - this.loadingElement = false; - this.errorElement = false; - this.loaderPromise = false; - - this.progressiveLoad = false; - this.loading = false; - - this.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request -}; - -//initialize setup options -Ajax.prototype.initialize = function(){ - this.loaderElement.appendChild(this.msgElement); - - if(this.table.options.ajaxLoaderLoading){ - this.loadingElement = this.table.options.ajaxLoaderLoading; - } - - this.loaderPromise = this.table.options.ajaxRequestFunc || this.defaultLoaderPromise; - - this.urlGenerator = this.table.options.ajaxURLGenerator || this.defaultURLGenerator; - - if(this.table.options.ajaxLoaderError){ - this.errorElement = this.table.options.ajaxLoaderError; - } - - if(this.table.options.ajaxParams){ - this.setParams(this.table.options.ajaxParams); - } - - if(this.table.options.ajaxConfig){ - this.setConfig(this.table.options.ajaxConfig); - } - - if(this.table.options.ajaxURL){ - this.setUrl(this.table.options.ajaxURL); - } - - if(this.table.options.ajaxProgressiveLoad){ - if(this.table.options.pagination){ - this.progressiveLoad = false; - console.error("Progressive Load Error - Pagination and progressive load cannot be used at the same time"); - }else{ - if(this.table.modExists("page")){ - this.progressiveLoad = this.table.options.ajaxProgressiveLoad; - this.table.modules.page.initializeProgressive(this.progressiveLoad); - }else{ - console.error("Pagination plugin is required for progressive ajax loading"); - } - } - } -}; - -Ajax.prototype.createLoaderElement = function (){ - var el = document.createElement("div"); - el.classList.add("tabulator-loader"); - return el; -}; - -Ajax.prototype.createMsgElement = function (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-loader-msg"); - el.setAttribute("role", "alert"); - - return el; -}; - -//set ajax params -Ajax.prototype.setParams = function(params, update){ - if(update){ - this.params = this.params || {}; - - for(let key in params){ - this.params[key] = params[key]; - } - }else{ - this.params = params; - } -}; - -Ajax.prototype.getParams = function(){ - return this.params || {}; -}; - -//load config object -Ajax.prototype.setConfig = function(config){ - this._loadDefaultConfig(); - - if(typeof config == "string"){ - this.config.method = config; - }else{ - for(let key in config){ - this.config[key] = config[key]; - } - } -}; - -//create config object from default -Ajax.prototype._loadDefaultConfig = function(force){ - var self = this; - if(!self.config || force){ - - self.config = {}; - - //load base config from defaults - for(let key in self.defaultConfig){ - self.config[key] = self.defaultConfig[key]; - } - } -}; - -//set request url -Ajax.prototype.setUrl = function(url){ - this.url = url; -}; - -//get request url -Ajax.prototype.getUrl = function(){ - return this.url; -}; - -//lstandard loading function -Ajax.prototype.loadData = function(inPosition){ - var self = this; - - if(this.progressiveLoad){ - return this._loadDataProgressive(); - }else{ - return this._loadDataStandard(inPosition); - } -}; - -Ajax.prototype.nextPage = function(diff){ - var margin; - - if(!this.loading){ - - margin = this.table.options.ajaxProgressiveLoadScrollMargin || (this.table.rowManager.getElement().clientHeight * 2); - - if(diff < margin){ - this.table.modules.page.nextPage() - .then(()=>{}).catch(()=>{}); - } - } -}; - -Ajax.prototype.blockActiveRequest = function(){ - this.requestOrder ++; -}; - -Ajax.prototype._loadDataProgressive = function(){ - this.table.rowManager.setData([]); - return this.table.modules.page.setPage(1); -}; - -Ajax.prototype._loadDataStandard = function(inPosition){ - return new Promise((resolve, reject)=>{ - this.sendRequest(inPosition) - .then((data)=>{ - this.table.rowManager.setData(data, inPosition); - resolve(); - }) - .catch((e)=>{reject()}); - }); -}; - -Ajax.prototype.generateParamsList = function(data, prefix){ - var self = this, - output = []; - - prefix = prefix || ""; - - if ( Array.isArray(data) ) { - data.forEach(function(item, i){ - output = output.concat(self.generateParamsList(item, prefix ? prefix + "[" + i + "]" : i)); - }); - }else if (typeof data === "object"){ - for (var key in data){ - output = output.concat(self.generateParamsList(data[key], prefix ? prefix + "[" + key + "]" : key)); - } - }else{ - output.push({key:prefix, value:data}); - } - - return output; -}; - - -Ajax.prototype.serializeParams = function(params){ - var output = this.generateParamsList(params), - encoded = []; - - output.forEach(function(item){ - encoded.push(encodeURIComponent(item.key) + "=" + encodeURIComponent(item.value)); - }); - - return encoded.join("&"); -}; - - -//send ajax request -Ajax.prototype.sendRequest = function(silent){ - var self = this, - url = self.url, - requestNo, esc, query; - - self.requestOrder ++; - requestNo = self.requestOrder; - - self._loadDefaultConfig(); - - return new Promise((resolve, reject)=>{ - if(self.table.options.ajaxRequesting.call(this.table, self.url, self.params) !== false){ - - self.loading = true; - - if(!silent){ - self.showLoader(); - } - - this.loaderPromise(url, self.config, self.params).then((data)=>{ - if(requestNo === self.requestOrder){ - if(self.table.options.ajaxResponse){ - data = self.table.options.ajaxResponse.call(self.table, self.url, self.params, data); - } - resolve(data); - }else{ - console.warn("Ajax Response Blocked - An active ajax request was blocked by an attempt to change table data while the request was being made"); - } - - self.hideLoader(); - - self.loading = false; - }) - .catch((error)=>{ - console.error("Ajax Load Error: ", error); - self.table.options.ajaxError.call(self.table, error); - - self.showError(); - - setTimeout(function(){ - self.hideLoader(); - }, 3000); - - self.loading = false; - - reject(); - }); - }else{ - reject(); - } - }); - - -}; - -Ajax.prototype.showLoader = function(){ - var shouldLoad = typeof this.table.options.ajaxLoader === "function" ? this.table.options.ajaxLoader() : this.table.options.ajaxLoader; - - if(shouldLoad){ - - this.hideLoader(); - - while(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild); - this.msgElement.classList.remove("tabulator-error"); - this.msgElement.classList.add("tabulator-loading"); - - if(this.loadingElement){ - this.msgElement.appendChild(this.loadingElement); - }else{ - this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|loading"); - } - - this.table.element.appendChild(this.loaderElement); - } -}; - -Ajax.prototype.showError = function(){ - this.hideLoader(); - - while(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild); - this.msgElement.classList.remove("tabulator-loading"); - this.msgElement.classList.add("tabulator-error"); - - if(this.errorElement){ - this.msgElement.appendChild(this.errorElement); - }else{ - this.msgElement.innerHTML = this.table.modules.localize.getText("ajax|error"); - } - - this.table.element.appendChild(this.loaderElement); -}; - -Ajax.prototype.hideLoader = function(){ - if(this.loaderElement.parentNode){ - this.loaderElement.parentNode.removeChild(this.loaderElement); - } -}; - -//default ajax config object -Ajax.prototype.defaultConfig = { - method: "GET", -}; - -Ajax.prototype.defaultURLGenerator = function(url, config, params){ - if(params && Object.keys(params).length){ - if(!config.method || config.method.toLowerCase() == "get"){ - config.method = "get"; - url += "?" + this.serializeParams(params); - } - } - - return url; -}; - -Ajax.prototype.defaultLoaderPromise = function(url, config, params){ - var self = this, contentType; - - return new Promise(function(resolve, reject){ - - //set url - url = self.urlGenerator(url, config, params); - - //set body content if not GET request - if(config.method != "get"){ - contentType = typeof self.table.options.ajaxContentType === "object" ? self.table.options.ajaxContentType : self.contentTypeFormatters[self.table.options.ajaxContentType]; - if(contentType){ - - for(var key in contentType.headers){ - if(!config.headers){ - config.headers = {}; - } - - if(typeof config.headers[key] === "undefined"){ - config.headers[key] = contentType.headers[key]; - } - } - - config.body = contentType.body.call(self, url, config, params); - - }else{ - console.warn("Ajax Error - Invalid ajaxContentType value:", self.table.options.ajaxContentType); - } - } - - if(url){ - - //configure headers - if(typeof config.credentials === "undefined"){ - config.credentials = 'include'; - } - - if(typeof config.headers === "undefined"){ - config.headers = {}; - } - - if(typeof config.headers.Accept === "undefined"){ - config.headers.Accept = "application/json"; - } - - if(typeof config.headers["X-Requested-With"] === "undefined"){ - config.headers["X-Requested-With"] = "XMLHttpRequest"; - } - - //send request - fetch(url, config) - .then((response)=>{ - if(response.ok) { - response.json() - .then((data)=>{ - resolve(data); - }).catch((error)=>{ - reject(error); - console.warn("Ajax Load Error - Invalid JSON returned", error); - }); - }else{ - console.error("Ajax Load Error - Connection Error: " + response.status, response.statusText); - reject(response); - } - }) - .catch((error)=>{ - console.error("Ajax Load Error - Connection Error: ", error); - reject(error); - }); - }else{ - reject("No URL Set"); - } - - }); -}; - -Ajax.prototype.contentTypeFormatters = { - "json":{ - headers:{ - 'Content-Type': 'application/json', - }, - body:function(url, config, params){ - return JSON.stringify(params); - }, - }, - "form":{ - headers:{ - }, - body:function(url, config, params){ - var output = this.generateParamsList(params), - form = new FormData(); - - output.forEach(function(item){ - form.append(item.key, item.value); - }); - - return form; - }, - }, -} - -Tabulator.prototype.registerModule("ajax", Ajax); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/calculation_colums.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/calculation_colums.js deleted file mode 100644 index 87adbe38e1..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/calculation_colums.js +++ /dev/null @@ -1,457 +0,0 @@ -var ColumnCalcs = function(table){ - this.table = table; //hold Tabulator object - this.topCalcs = []; - this.botCalcs = []; - this.genColumn = false; - this.topElement = this.createElement(); - this.botElement = this.createElement(); - this.topRow = false; - this.botRow = false; - this.topInitialized = false; - this.botInitialized = false; - - this.initialize(); -}; - -ColumnCalcs.prototype.createElement = function (){ - var el = document.createElement("div"); - el.classList.add("tabulator-calcs-holder"); - return el; -}; - -ColumnCalcs.prototype.initialize = function(){ - this.genColumn = new Column({field:"value"}, this); -}; - -//dummy functions to handle being mock column manager -ColumnCalcs.prototype.registerColumnField = function(){}; - -//initialize column calcs -ColumnCalcs.prototype.initializeColumn = function(column){ - var def = column.definition - - var config = { - topCalcParams:def.topCalcParams || {}, - botCalcParams:def.bottomCalcParams || {}, - }; - - if(def.topCalc){ - - switch(typeof def.topCalc){ - case "string": - if(this.calculations[def.topCalc]){ - config.topCalc = this.calculations[def.topCalc] - }else{ - console.warn("Column Calc Error - No such calculation found, ignoring: ", def.topCalc); - } - break; - - case "function": - config.topCalc = def.topCalc; - break - - } - - if(config.topCalc){ - column.modules.columnCalcs = config; - this.topCalcs.push(column); - - if(this.table.options.columnCalcs != "group"){ - this.initializeTopRow(); - } - } - - } - - if(def.bottomCalc){ - switch(typeof def.bottomCalc){ - case "string": - if(this.calculations[def.bottomCalc]){ - config.botCalc = this.calculations[def.bottomCalc] - }else{ - console.warn("Column Calc Error - No such calculation found, ignoring: ", def.bottomCalc); - } - break; - - case "function": - config.botCalc = def.bottomCalc; - break - - } - - if(config.botCalc){ - column.modules.columnCalcs = config; - this.botCalcs.push(column); - - if(this.table.options.columnCalcs != "group"){ - this.initializeBottomRow(); - } - } - } - -}; - -ColumnCalcs.prototype.removeCalcs = function(){ - var changed = false; - - if(this.topInitialized){ - this.topInitialized = false; - this.topElement.parentNode.removeChild(this.topElement); - changed = true; - } - - if(this.botInitialized){ - this.botInitialized = false; - this.table.footerManager.remove(this.botElement); - changed = true; - } - - if(changed){ - this.table.rowManager.adjustTableSize(); - } -}; - -ColumnCalcs.prototype.initializeTopRow = function(){ - if(!this.topInitialized){ - // this.table.columnManager.headersElement.after(this.topElement); - this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling); - this.topInitialized = true; - } -}; - -ColumnCalcs.prototype.initializeBottomRow = function(){ - if(!this.botInitialized){ - this.table.footerManager.prepend(this.botElement); - this.botInitialized = true; - } -}; - - -ColumnCalcs.prototype.scrollHorizontal = function(left){ - var hozAdjust = 0, - scrollWidth = this.table.columnManager.getElement().scrollWidth - this.table.element.clientWidth; - - if(this.botInitialized){ - this.botRow.getElement().style.marginLeft = (-left) + "px"; - } -}; - - -ColumnCalcs.prototype.recalc = function(rows){ - var data, row; - - if(this.topInitialized || this.botInitialized){ - data = this.rowsToData(rows); - - if(this.topInitialized){ - row = this.generateRow("top", this.rowsToData(rows)) - this.topRow = row; - while(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild); - this.topElement.appendChild(row.getElement()); - row.initialize(true); - } - - if(this.botInitialized){ - row = this.generateRow("bottom", this.rowsToData(rows)) - this.botRow = row; - while(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild); - this.botElement.appendChild(row.getElement()); - row.initialize(true); - } - - this.table.rowManager.adjustTableSize(); - - //set resizable handles - if(this.table.modExists("frozenColumns")){ - this.table.modules.frozenColumns.layout(); - } - } -}; - -ColumnCalcs.prototype.recalcRowGroup = function(row){ - this.recalcGroup(this.table.modules.groupRows.getRowGroup(row)); -}; - -ColumnCalcs.prototype.recalcGroup = function(group){ - var data, rowData; - - if(group){ - if(group.calcs){ - if(group.calcs.bottom){ - data = this.rowsToData(group.rows); - rowData = this.generateRowData("bottom", data); - - group.calcs.bottom.updateData(rowData); - group.calcs.bottom.reinitialize(); - } - - if(group.calcs.top){ - data = this.rowsToData(group.rows); - rowData = this.generateRowData("top", data); - - group.calcs.top.updateData(rowData); - group.calcs.top.reinitialize(); - } - } - } -}; - - - -//generate top stats row -ColumnCalcs.prototype.generateTopRow = function(rows){ - return this.generateRow("top", this.rowsToData(rows)); -}; -//generate bottom stats row -ColumnCalcs.prototype.generateBottomRow = function(rows){ - return this.generateRow("bottom", this.rowsToData(rows)); -}; - -ColumnCalcs.prototype.rowsToData = function(rows){ - var data = []; - - rows.forEach(function(row){ - data.push(row.getData()); - }); - - return data; -}; - -//generate stats row -ColumnCalcs.prototype.generateRow = function(pos, data){ - var self = this, - rowData = this.generateRowData(pos, data), - row; - - if(self.table.modExists("mutator")){ - self.table.modules.mutator.disable(); - } - - row = new Row(rowData, this); - - if(self.table.modExists("mutator")){ - self.table.modules.mutator.enable(); - } - - row.getElement().classList.add("tabulator-calcs", "tabulator-calcs-" + pos); - row.type = "calc"; - - row.generateCells = function(){ - - var cells = []; - - self.table.columnManager.columnsByIndex.forEach(function(column){ - - if(column.visible){ - //set field name of mock column - self.genColumn.setField(column.getField()); - self.genColumn.hozAlign = column.hozAlign; - - if(column.definition[pos + "CalcFormatter"] && self.table.modExists("format")){ - - self.genColumn.modules.format = { - formatter: self.table.modules.format.getFormatter(column.definition[pos + "CalcFormatter"]), - params: column.definition[pos + "CalcFormatterParams"] - }; - }else{ - self.genColumn.modules.format = { - formatter: self.table.modules.format.getFormatter("plaintext"), - params:{} - }; - } - - //generate cell and assign to correct column - var cell = new Cell(self.genColumn, row); - cell.column = column; - cell.setWidth(column.width); - - column.cells.push(cell); - cells.push(cell); - } - }); - - this.cells = cells; - } - - return row; -}; - -//generate stats row -ColumnCalcs.prototype.generateRowData = function(pos, data){ - var rowData = {}, - calcs = pos == "top" ? this.topCalcs : this.botCalcs, - type = pos == "top" ? "topCalc" : "botCalc", - params, paramKey; - - calcs.forEach(function(column){ - var values = []; - - if(column.modules.columnCalcs && column.modules.columnCalcs[type]){ - data.forEach(function(item){ - values.push(column.getFieldValue(item)); - }); - - paramKey = type + "Params"; - params = typeof column.modules.columnCalcs[paramKey] === "function" ? column.modules.columnCalcs[paramKey](value, data) : column.modules.columnCalcs[paramKey]; - - column.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params)); - } - }); - - return rowData; -}; - -ColumnCalcs.prototype.hasTopCalcs = function(){ - return !!(this.topCalcs.length); -}, - -ColumnCalcs.prototype.hasBottomCalcs = function(){ - return !!(this.botCalcs.length); -}, - -//handle table redraw -ColumnCalcs.prototype.redraw = function(){ - if(this.topRow){ - this.topRow.normalizeHeight(true); - } - if(this.botRow){ - this.botRow.normalizeHeight(true); - } -}; - -//return the calculated -ColumnCalcs.prototype.getResults = function(){ - var self = this, - results = {}, - groups; - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - groups = this.table.modules.groupRows.getGroups(true); - - groups.forEach(function(group){ - results[group.getKey()] = self.getGroupResults(group); - }); - }else{ - results = { - top: this.topRow ? this.topRow.getData() : {}, - bottom: this.botRow ? this.botRow.getData() : {}, - } - } - - return results; -} - -//get results from a group -ColumnCalcs.prototype.getGroupResults = function(group){ - var self = this, - groupObj = group._getSelf(), - subGroups = group.getSubGroups(), - subGroupResults = {}, - results = {}; - - subGroups.forEach(function(subgroup){ - subGroupResults[subgroup.getKey()] = self.getGroupResults(subgroup); - }); - - results = { - top: groupObj.calcs.top ? groupObj.calcs.top.getData() : {}, - bottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {}, - groups: subGroupResults, - } - - return results; -} - - -//default calculations -ColumnCalcs.prototype.calculations = { - "avg":function(values, data, calcParams){ - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : 2 - - if(values.length){ - output = values.reduce(function(sum, value){ - value = Number(value); - return sum + value; - }); - - output = output / values.length; - - output = precision !== false ? output.toFixed(precision) : output; - } - - return parseFloat(output).toString(); - }, - "max":function(values, data, calcParams){ - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function(value){ - - value = Number(value); - - if(value > output || output === null){ - output = value; - } - }); - - return output !== null ? (precision !== false ? output.toFixed(precision) : output) : ""; - }, - "min":function(values, data, calcParams){ - var output = null, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - values.forEach(function(value){ - - value = Number(value); - - if(value < output || output === null){ - output = value; - } - }); - - return output !== null ? (precision !== false ? output.toFixed(precision) : output) : ""; - }, - "sum":function(values, data, calcParams){ - var output = 0, - precision = typeof calcParams.precision !== "undefined" ? calcParams.precision : false; - - if(values.length){ - values.forEach(function(value){ - value = Number(value); - - output += !isNaN(value) ? Number(value) : 0; - }); - } - - return precision !== false ? output.toFixed(precision) : output; - }, - "concat":function(values, data, calcParams){ - var output = 0; - - if(values.length){ - output = values.reduce(function(sum, value){ - return String(sum) + String(value); - }); - } - - return output; - }, - "count":function(values, data, calcParams){ - var output = 0; - - if(values.length){ - values.forEach(function(value){ - if(value){ - output ++; - } - }); - } - - return output; - }, -}; - - - -Tabulator.prototype.registerModule("columnCalcs", ColumnCalcs); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/clipboard.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/clipboard.js deleted file mode 100644 index 0f2993d580..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/clipboard.js +++ /dev/null @@ -1,916 +0,0 @@ -var Clipboard = function(table){ - this.table = table; - this.mode = true; - this.copySelector = false; - this.copySelectorParams = {}; - this.copyFormatter = false; - this.copyFormatterParams = {}; - this.pasteParser = function(){}; - this.pasteAction = function(){}; - this.htmlElement = false; - this.config = {}; - - this.blocked = true; //block copy actions not originating from this command -}; - -Clipboard.prototype.initialize = function(){ - var self = this; - - this.mode = this.table.options.clipboard; - - if(this.mode === true || this.mode === "copy"){ - this.table.element.addEventListener("copy", function(e){ - var data; - - self.processConfig(); - - if(!self.blocked){ - e.preventDefault(); - - data = self.generateContent(); - - if (window.clipboardData && window.clipboardData.setData) { - window.clipboardData.setData('Text', data); - } else if (e.clipboardData && e.clipboardData.setData) { - e.clipboardData.setData('text/plain', data); - if(self.htmlElement){ - e.clipboardData.setData('text/html', self.htmlElement.outerHTML); - } - } else if (e.originalEvent && e.originalEvent.clipboardData.setData) { - e.originalEvent.clipboardData.setData('text/plain', data); - if(self.htmlElement){ - e.originalEvent.clipboardData.setData('text/html', self.htmlElement.outerHTML); - } - } - - self.table.options.clipboardCopied.call(this.table, data); - - self.reset(); - } - }); - } - - if(this.mode === true || this.mode === "paste"){ - this.table.element.addEventListener("paste", function(e){ - self.paste(e); - }); - } - - this.setPasteParser(this.table.options.clipboardPasteParser); - this.setPasteAction(this.table.options.clipboardPasteAction); -}; - -Clipboard.prototype.processConfig = function(){ - var config = { - columnHeaders:"groups", - rowGroups:true, - }; - - if(typeof this.table.options.clipboardCopyHeader !== "undefined"){ - config.columnHeaders = this.table.options.clipboardCopyHeader; - console.warn("DEPRECATION WANRING - clipboardCopyHeader option has been depricated, please use the columnHeaders property on the clipboardCopyConfig option"); - } - - if(this.table.options.clipboardCopyConfig){ - for(var key in this.table.options.clipboardCopyConfig){ - config[key] = this.table.options.clipboardCopyConfig[key]; - } - } - - if (config.rowGroups && this.table.options.groupBy && this.table.modExists("groupRows")){ - this.config.rowGroups = true; - } - - if(config.columnHeaders){ - if((config.columnHeaders === "groups" || config === true) && this.table.columnManager.columns.length != this.table.columnManager.columnsByIndex.length){ - this.config.columnHeaders = "groups"; - }else{ - this.config.columnHeaders = "columns"; - } - }else{ - this.config.columnHeaders = false; - } -}; - - -Clipboard.prototype.reset = function(){ - this.blocked = false; - this.originalSelectionText = ""; -}; - - -Clipboard.prototype.setPasteAction = function(action){ - - switch(typeof action){ - case "string": - this.pasteAction = this.pasteActions[action]; - - if(!this.pasteAction){ - console.warn("Clipboard Error - No such paste action found:", action); - } - break; - - case "function": - this.pasteAction = action; - break; - } -}; - -Clipboard.prototype.setPasteParser = function(parser){ - switch(typeof parser){ - case "string": - this.pasteParser = this.pasteParsers[parser]; - - if(!this.pasteParser){ - console.warn("Clipboard Error - No such paste parser found:", parser); - } - break; - - case "function": - this.pasteParser = parser; - break; - } -}; - - -Clipboard.prototype.paste = function(e){ - var data, rowData, rows; - - if(this.checkPaseOrigin(e)){ - - data = this.getPasteData(e); - - rowData = this.pasteParser.call(this, data); - - if(rowData){ - e.preventDefault(); - - if(this.table.modExists("mutator")){ - rowData = this.mutateData(rowData); - } - - rows = this.pasteAction.call(this, rowData); - this.table.options.clipboardPasted.call(this.table, data, rowData, rows); - }else{ - this.table.options.clipboardPasteError.call(this.table, data); - } - } -}; - -Clipboard.prototype.mutateData = function(data){ - var self = this, - output = []; - - if(Array.isArray(data)){ - data.forEach(function(row){ - output.push(self.table.modules.mutator.transformRow(row, "clipboard")); - }); - }else{ - output = data; - } - - return output; -}; - - -Clipboard.prototype.checkPaseOrigin = function(e){ - var valid = true; - - if(e.target.tagName != "DIV" || this.table.modules.edit.currentCell){ - valid = false; - } - - return valid; -}; - -Clipboard.prototype.getPasteData = function(e){ - var data; - - if (window.clipboardData && window.clipboardData.getData) { - data = window.clipboardData.getData('Text'); - } else if (e.clipboardData && e.clipboardData.getData) { - data = e.clipboardData.getData('text/plain'); - } else if (e.originalEvent && e.originalEvent.clipboardData.getData) { - data = e.originalEvent.clipboardData.getData('text/plain'); - } - - return data; -}; - - -Clipboard.prototype.copy = function(selector, selectorParams, formatter, formatterParams, internal){ - var range, sel; - this.blocked = false; - - if(this.mode === true || this.mode === "copy"){ - - if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") { - range = document.createRange(); - range.selectNodeContents(this.table.element); - sel = window.getSelection(); - - if(sel.toString() && internal){ - selector = "userSelection"; - formatter = "raw"; - selectorParams = sel.toString(); - } - - sel.removeAllRanges(); - sel.addRange(range); - } else if (typeof document.selection != "undefined" && typeof document.body.createTextRange != "undefined") { - textRange = document.body.createTextRange(); - textRange.moveToElementText(this.table.element); - textRange.select(); - } - - this.setSelector(selector); - this.copySelectorParams = typeof selectorParams != "undefined" && selectorParams != null ? selectorParams : this.config.columnHeaders; - this.setFormatter(formatter); - this.copyFormatterParams = typeof formatterParams != "undefined" && formatterParams != null ? formatterParams : {}; - - document.execCommand('copy'); - - if(sel){ - sel.removeAllRanges(); - } - } -}; - -Clipboard.prototype.setSelector = function(selector){ - selector = selector || this.table.options.clipboardCopySelector; - - switch(typeof selector){ - case "string": - if(this.copySelectors[selector]){ - this.copySelector = this.copySelectors[selector]; - }else{ - console.warn("Clipboard Error - No such selector found:", selector); - } - break; - - case "function": - this.copySelector = selector; - break; - } -}; - -Clipboard.prototype.setFormatter = function(formatter){ - - formatter = formatter || this.table.options.clipboardCopyFormatter; - - switch(typeof formatter){ - case "string": - if(this.copyFormatters[formatter]){ - this.copyFormatter = this.copyFormatters[formatter]; - }else{ - console.warn("Clipboard Error - No such formatter found:", formatter); - } - break; - - case "function": - this.copyFormatter = formatter; - break; - } -}; - - -Clipboard.prototype.generateContent = function(){ - var data; - - this.htmlElement = false; - data = this.copySelector.call(this, this.config, this.copySelectorParams); - - return this.copyFormatter.call(this, data, this.config, this.copyFormatterParams); -}; - -Clipboard.prototype.generateSimpleHeaders = function(columns){ - var headers = []; - - columns.forEach(function(column){ - headers.push(column.definition.title); - }); - - return headers; -}; - -Clipboard.prototype.generateColumnGroupHeaders = function(columns){ - var output = []; - - this.table.columnManager.columns.forEach((column) => { - var colData = this.processColumnGroup(column); - - if(colData){ - output.push(colData); - } - }); - - return output; -}; - -Clipboard.prototype.processColumnGroup = function(column){ - var subGroups = column.columns; - - var groupData = { - type:"group", - title:column.definition.title, - column:column, - }; - - if(subGroups.length){ - groupData.subGroups = []; - groupData.width = 0; - - subGroups.forEach((subGroup) => { - var subGroupData = this.processColumnGroup(subGroup); - - if(subGroupData){ - groupData.width += subGroupData.width; - groupData.subGroups.push(subGroupData); - } - }); - - if(!groupData.width){ - return false; - } - }else{ - if(column.field && column.visible){ - groupData.width = 1; - }else{ - return false; - } - } - - return groupData; -}; - -Clipboard.prototype.groupHeadersToRows = function(columns){ - - var headers = []; - - function parseColumnGroup(column, level){ - - if(typeof headers[level] === "undefined"){ - headers[level] = []; - } - - headers[level].push(column.title); - - if(column.subGroups){ - column.subGroups.forEach(function(subGroup){ - parseColumnGroup(subGroup, level+1); - }); - }else{ - padColumnheaders(); - } - } - - function padColumnheaders(){ - var max = 0; - - headers.forEach(function(title){ - var len = title.length; - if(len > max){ - max = len; - } - }); - - headers.forEach(function(title){ - var len = title.length; - if(len < max){ - for(var i = len; i < max; i++){ - title.push(""); - } - } - }); - } - - columns.forEach(function(column){ - parseColumnGroup(column,0); - }); - - return headers; -}; - -Clipboard.prototype.rowsToData = function(rows, config, params){ - var columns = this.table.columnManager.columnsByIndex, - data = []; - - rows.forEach(function(row){ - var rowArray = [], - rowData = row.getData("clipboard"); - - columns.forEach(function(column){ - var value = column.getFieldValue(rowData); - - switch(typeof value){ - case "object": - value = JSON.stringify(value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = value; - } - - rowArray.push(value); - }); - - data.push(rowArray); - }); - - return data; -}; - -Clipboard.prototype.buildComplexRows = function(config){ - var output = [], - groups = this.table.modules.groupRows.getGroups(); - - groups.forEach((group) => { - output.push(this.processGroupData(group)); - }); - - return output; -}; - - - -Clipboard.prototype.processGroupData = function(group){ - var subGroups = group.getSubGroups(); - - var groupData = { - type:"group", - key:group.key - }; - - if(subGroups.length){ - groupData.subGroups = []; - - subGroups.forEach((subGroup) => { - groupData.subGroups.push(this.processGroupData(subGroup)); - }); - }else{ - groupData.rows = group.getRows(true); - } - - return groupData; -}; - - -Clipboard.prototype.buildOutput = function(rows, config, params){ - var output = [], - columns = this.table.columnManager.columnsByIndex; - - if(config.columnHeaders){ - - if(config.columnHeaders == "groups"){ - columns = this.generateColumnGroupHeaders(this.table.columnManager.columns); - - output = output.concat(this.groupHeadersToRows(columns)); - }else{ - output.push(this.generateSimpleHeaders(columns)); - } - - } - - //generate styled content - if(this.table.options.clipboardCopyStyled){ - this.generateHTML(rows, columns, config, params); - } - - //generate unstyled content - if(config.rowGroups){ - rows.forEach((row) => { - output = output.concat(this.parseRowGroupData(row, config, params)); - }); - }else{ - output = output.concat(this.rowsToData(rows, config, params)); - } - - return output; -}; - - -Clipboard.prototype.parseRowGroupData = function (group, config, params){ - var groupData = []; - - groupData.push([group.key]); - - if(group.subGroups){ - group.subGroups.forEach((subGroup) => { - groupData = groupData.concat(this.parseRowGroupData(subGroup, config, params)); - }); - }else{ - - groupData = groupData.concat(this.rowsToData(group.rows, config, params)); - } - - return groupData; -}; - - -Clipboard.prototype.generateHTML = function (rows, columns, config, params){ - var self = this, - data = [], - headers = [], body, oddRow, evenRow, firstRow, firstCell, firstGroup, lastCell, styleCells; - - //create table element - this.htmlElement = document.createElement("table"); - self.mapElementStyles(this.table.element, this.htmlElement, ["border-top", "border-left", "border-right", "border-bottom"]); - - function generateSimpleHeaders(){ - var headerEl = document.createElement("tr"); - - columns.forEach(function(column){ - var columnEl = document.createElement("th"); - columnEl.innerHTML = column.definition.title; - - self.mapElementStyles(column.getElement(), columnEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - headerEl.appendChild(columnEl); - }); - - self.mapElementStyles(self.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - self.htmlElement.appendChild(document.createElement("thead").appendChild(headerEl)); - } - - - function generateHeaders(headers){ - - var headerHolderEl = document.createElement("thead"); - - headers.forEach(function(columns){ - var headerEl = document.createElement("tr"); - - columns.forEach(function(column){ - var columnEl = document.createElement("th"); - - if(column.width > 1){ - columnEl.colSpan = column.width; - } - - if(column.height > 1){ - columnEl.rowSpan = column.height; - } - - columnEl.innerHTML = column.title; - - self.mapElementStyles(column.element, columnEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - headerEl.appendChild(columnEl); - }); - - self.mapElementStyles(self.table.columnManager.getHeadersElement(), headerEl, ["border-top", "border-left", "border-right", "border-bottom", "background-color", "color", "font-weight", "font-family", "font-size"]); - - headerHolderEl.appendChild(headerEl); - }); - - self.htmlElement.appendChild(headerHolderEl); - - } - - function parseColumnGroup(column, level){ - - if(typeof headers[level] === "undefined"){ - headers[level] = []; - } - - headers[level].push({ - title:column.title, - width:column.width, - height:1, - children:!!column.subGroups, - element:column.column.getElement(), - }); - - if(column.subGroups){ - column.subGroups.forEach(function(subGroup){ - parseColumnGroup(subGroup, level+1); - }); - } - } - - function padVerticalColumnheaders(){ - headers.forEach(function(row, index){ - row.forEach(function(header){ - if(!header.children){ - header.height = headers.length - index; - } - }); - }); - } - - //create headers if needed - if(config.columnHeaders){ - if(config.columnHeaders == "groups"){ - columns.forEach(function(column){ - parseColumnGroup(column,0); - }); - - padVerticalColumnheaders(); - generateHeaders(headers); - }else{ - generateSimpleHeaders(); - } - } - - columns = this.table.columnManager.columnsByIndex; - - //create table body - body = document.createElement("tbody"); - - //lookup row styles - if(window.getComputedStyle){ - oddRow = this.table.element.querySelector(".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)"); - evenRow = this.table.element.querySelector(".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)"); - firstRow = this.table.element.querySelector(".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)"); - firstGroup = this.table.element.getElementsByClassName("tabulator-group")[0]; - - if(firstRow){ - styleCells = firstRow.getElementsByClassName("tabulator-cell"); - firstCell = styleCells[0]; - lastCell = styleCells[styleCells.length - 1]; - } - } - - function processRows(rowArray){ - //add rows to table - rowArray.forEach(function(row, i){ - var rowEl = document.createElement("tr"), - rowData = row.getData("clipboard"), - styleRow = firstRow; - - columns.forEach(function(column, j){ - var cellEl = document.createElement("td"), - value = column.getFieldValue(rowData); - - switch(typeof value){ - case "object": - value = JSON.stringify(value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = value; - } - - cellEl.innerHTML = value; - - if(column.definition.align){ - cellEl.style.textAlign = column.definition.align; - } - - if(j < columns.length - 1){ - if(firstCell){ - self.mapElementStyles(firstCell, cellEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]); - } - }else{ - if(firstCell){ - self.mapElementStyles(firstCell, cellEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size"]); - } - } - - rowEl.appendChild(cellEl); - }); - - if(!(i % 2) && oddRow){ - styleRow = oddRow; - } - - if((i % 2) && evenRow){ - styleRow = evenRow; - } - - if(styleRow){ - self.mapElementStyles(styleRow, rowEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - } - - body.appendChild(rowEl); - }); - } - - function processGroup(group){ - var groupEl = document.createElement("tr"), - groupCellEl = document.createElement("td"); - - groupCellEl.colSpan = columns.length; - - groupCellEl.innerHTML = group.key; - - groupEl.appendChild(groupCellEl); - body.appendChild(groupEl); - - self.mapElementStyles(firstGroup, groupEl, ["border-top", "border-left", "border-right", "border-bottom", "color", "font-weight", "font-family", "font-size", "background-color"]); - - if(group.subGroups){ - group.subGroups.forEach((subGroup) => { - processGroup(subGroup); - }); - }else{ - processRows(group.rows); - } - } - - if(config.rowGroups){ - rows.forEach((group) => { - processGroup(group); - }); - }else{ - processRows(rows); - } - - this.htmlElement.appendChild(body); -}; - -Clipboard.prototype.mapElementStyles = function(from, to, props){ - - var lookup = { - "background-color" : "backgroundColor", - "color" : "fontColor", - "font-weight" : "fontWeight", - "font-family" : "fontFamily", - "font-size" : "fontSize", - "border-top" : "borderTop", - "border-left" : "borderLeft", - "border-right" : "borderRight", - "border-bottom" : "borderBottom", - }; - - if(window.getComputedStyle){ - var fromStyle = window.getComputedStyle(from); - - props.forEach(function(prop){ - to.style[lookup[prop]] = fromStyle.getPropertyValue(prop); - }); - } - - // return window.getComputedStyle ? window.getComputedStyle(element, null).getPropertyValue(property) : element.style[property.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); })]; -}; - - -Clipboard.prototype.copySelectors = { - userSelection: function(config, params){ - return params; - }, - selected: function(config, params){ - var rows = []; - - if(this.table.modExists("selectRow", true)){ - rows = this.table.modules.selectRow.getSelectedRows(); - } - - if(config.rowGroups){ - console.warn("Clipboard Warning - select coptSelector does not support row groups"); - } - - return this.buildOutput(rows, config, params) - }, - table: function(config, params){ - if(config.rowGroups){ - console.warn("Clipboard Warning - table coptSelector does not support row groups"); - } - - return this.buildOutput(this.table.rowManager.getComponents(), config, params); - }, - active: function(config, params){ - var rows; - - if(config.rowGroups){ - rows = this.buildComplexRows(config); - }else{ - rows = this.table.rowManager.getComponents(true); - } - - return this.buildOutput(rows, config, params); - }, -}; - -Clipboard.prototype.copyFormatters = { - raw: function(data, params){ - return data; - }, - table: function(data, params){ - var output = []; - - data.forEach(function(row){ - row.forEach(function(value){ - if(typeof value == "undefined"){ - value = ""; - } - - value = typeof value == "undefined" || value === null ? "" : value.toString(); - - if(value.match(/\r|\n/)){ - value = value.split('"').join('""'); - value = '"' + value + '"'; - } - }); - - output.push(row.join("\t")); - }); - - return output.join("\n"); - }, -}; - -Clipboard.prototype.pasteParsers = { - table:function(clipboard){ - var data = [], - success = false, - headerFindSuccess = true, - columns = this.table.columnManager.columns, - columnMap = [], - rows = []; - - //get data from clipboard into array of columns and rows. - clipboard = clipboard.split("\n"); - - clipboard.forEach(function(row){ - data.push(row.split("\t")); - }); - - if(data.length && !(data.length === 1 && data[0].length < 2)){ - success = true; - - //check if headers are present by title - data[0].forEach(function(value){ - var column = columns.find(function(column){ - return value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim(); - }); - - if(column){ - columnMap.push(column); - }else{ - headerFindSuccess = false; - } - }); - - //check if column headers are present by field - if(!headerFindSuccess){ - headerFindSuccess = true; - columnMap = []; - - data[0].forEach(function(value){ - var column = columns.find(function(column){ - return value && column.field && value.trim() && column.field.trim() === value.trim(); - }); - - if(column){ - columnMap.push(column); - }else{ - headerFindSuccess = false; - } - }); - - if(!headerFindSuccess){ - columnMap = this.table.columnManager.columnsByIndex; - } - } - - //remove header row if found - if(headerFindSuccess){ - data.shift(); - } - - data.forEach(function(item){ - var row = {}; - - item.forEach(function(value, i){ - if(columnMap[i]){ - row[columnMap[i].field] = value; - } - }); - - rows.push(row); - }); - - return rows; - }else{ - return false; - } - } -}; - -Clipboard.prototype.pasteActions = { - replace:function(rows){ - return this.table.setData(rows); - }, - update:function(rows){ - return this.table.updateOrAddData(rows); - }, - insert:function(rows){ - return this.table.addData(rows); - }, -}; - - - -Tabulator.prototype.registerModule("clipboard", Clipboard); diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/comms.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/comms.js deleted file mode 100644 index c5c727ea85..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/comms.js +++ /dev/null @@ -1,45 +0,0 @@ -var Comms = function(table){ - this.table = table; -}; - - -Comms.prototype.getConnections = function(selectors){ - var self = this, - connections = [], - connection; - - connection = Tabulator.prototype.comms.lookupTable(selectors); - - connection.forEach(function(con){ - if(self.table !== con){ - connections.push(con); - } - }); - - return connections; -}; - -Comms.prototype.send = function(selectors, module, action, data){ - var self = this, - connections = this.getConnections(selectors); - - connections.forEach(function(connection){ - connection.tableComms(self.table.element, module, action, data); - }); - - if(!connections.length && selectors){ - console.warn("Table Connection Error - No tables matching selector found", selectors); - } -}; - - -Comms.prototype.receive = function(table, module, action, data){ - if(this.table.modExists(module)){ - return this.table.modules[module].commsReceived(table, action, data); - }else{ - console.warn("Inter-table Comms Error - no such module:", module); - } -}; - - -Tabulator.prototype.registerModule("comms", Comms); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/data_tree.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/data_tree.js deleted file mode 100644 index 9381f18187..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/data_tree.js +++ /dev/null @@ -1,301 +0,0 @@ -var DataTree = function(table){ - this.table = table; - this.indent = 10; - this.field = ""; - this.collapseEl = null; - this.expandEl = null; - this.branchEl = null; - - this.startOpen = function(){}; - - this.displayIndex = 0; -}; - -DataTree.prototype.initialize = function(){ - var dummyEl = null, - options = this.table.options; - - this.field = options.dataTreeChildField; - this.indent = options.dataTreeChildIndent; - - if(options.dataTreeBranchElement){ - - if(options.dataTreeBranchElement === true){ - this.branchEl = document.createElement("div"); - this.branchEl.classList.add("tabulator-data-tree-branch"); - }else{ - if(typeof options.dataTreeBranchElement === "string"){ - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeBranchElement; - this.branchEl = dummyEl.firstChild; - }else{ - this.branchEl = options.dataTreeBranchElement; - } - } - } - - if(options.dataTreeCollapseElement){ - if(typeof options.dataTreeCollapseElement === "string"){ - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeCollapseElement; - this.collapseEl = dummyEl.firstChild; - }else{ - this.collapseEl = options.dataTreeCollapseElement; - } - }else{ - this.collapseEl = document.createElement("div"); - this.collapseEl.classList.add("tabulator-data-tree-control"); - this.collapseEl.innerHTML = "
"; - } - - if(options.dataTreeExpandElement){ - if(typeof options.dataTreeExpandElement === "string"){ - dummyEl = document.createElement("div"); - dummyEl.innerHTML = options.dataTreeExpandElement; - this.expandEl = dummyEl.firstChild; - }else{ - this.expandEl = options.dataTreeExpandElement; - } - }else{ - this.expandEl = document.createElement("div"); - this.expandEl.classList.add("tabulator-data-tree-control"); - this.expandEl.innerHTML = "
"; - } - - - switch(typeof options.dataTreeStartExpanded){ - case "boolean": - this.startOpen = function(row, index){ - return options.dataTreeStartExpanded; - }; - break; - - case "function": - this.startOpen = options.dataTreeStartExpanded; - break; - - default: - this.startOpen = function(row, index){ - return options.dataTreeStartExpanded[index]; - }; - break; - } - - - - -}; - -DataTree.prototype.initializeRow = function(row){ - - var children = typeof row.getData()[this.field] !== "undefined"; - - row.modules.dataTree = { - index:0, - open:children ? this.startOpen(row.getComponent(), 0) : false, - controlEl:false, - branchEl:false, - parent:false, - children:children, - }; -}; - - -DataTree.prototype.layoutRow = function(row){ - var cell = row.getCells()[0], - el = cell.getElement(), - config = row.modules.dataTree; - - el.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + "px"; - - if(config.branchEl){ - config.branchEl.parentNode.removeChild(config.branchEl); - } - - this.generateControlElement(row, el); - - if(config.index && this.branchEl){ - config.branchEl = this.branchEl.cloneNode(true); - el.insertBefore(config.branchEl, el.firstChild); - el.style.paddingLeft = (parseInt(el.style.paddingLeft) + ((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1))) + "px"; - } -}; - -DataTree.prototype.generateControlElement = function(row, el){ - var config = row.modules.dataTree, - el = el || row.getCells()[0].getElement(), - oldControl = config.controlEl; - - if(config.children !== false){ - - if(config.open){ - config.controlEl = this.collapseEl.cloneNode(true); - config.controlEl.addEventListener("click", (e) => { - e.stopPropagation(); - this.collapseRow(row); - }); - }else{ - config.controlEl = this.expandEl.cloneNode(true); - config.controlEl.addEventListener("click", (e) => { - e.stopPropagation(); - this.expandRow(row); - }); - } - - config.controlEl.addEventListener("mousedown", (e) => { - e.stopPropagation(); - }); - - if(oldControl && oldControl.parentNode === el){ - oldControl.parentNode.replaceChild(config.controlEl,oldControl); - }else{ - el.insertBefore(config.controlEl, el.firstChild); - } - } -}; - -DataTree.prototype.setDisplayIndex = function (index) { - this.displayIndex = index; -}; - -DataTree.prototype.getDisplayIndex = function () { - return this.displayIndex; -}; - -DataTree.prototype.getRows = function(rows){ - var output = []; - - rows.forEach((row, i) => { - var config = row.modules.dataTree.children, - children; - - output.push(row); - - if(!config.index && config.children !== false){ - children = this.getChildren(row); - - children.forEach((child) => { - output.push(child); - }); - } - }); - - return output; -}; - - -DataTree.prototype.getChildren = function(row){ - var config = row.modules.dataTree, - output = []; - - if(config.children !== false && config.open){ - if(!Array.isArray(config.children)){ - config.children = this.generateChildren(row); - } - - config.children.forEach((child) => { - output.push(child); - - var subChildren = this.getChildren(child); - - subChildren.forEach((sub) => { - output.push(sub); - }); - }); - } - - return output; -}; - - -DataTree.prototype.generateChildren = function(row){ - var children = []; - - row.getData()[this.field].forEach((childData) => { - var childRow = new Row(childData || {}, this.table.rowManager); - childRow.modules.dataTree.index = row.modules.dataTree.index + 1; - childRow.modules.dataTree.parent = row; - childRow.modules.dataTree.open = this.startOpen(row, childRow.modules.dataTree.index); - children.push(childRow); - }); - - return children; -}; - - - -DataTree.prototype.expandRow = function(row, silent){ - var config = row.modules.dataTree; - - if(config.children !== false){ - config.open = true; - - row.reinitialize(); - - this.table.rowManager.refreshActiveData("tree", false, true); - - this.table.options.dataTreeRowExpanded(row.getComponent(), row.modules.dataTree.index); - } -}; - -DataTree.prototype.collapseRow = function(row){ - var config = row.modules.dataTree; - - if(config.children !== false){ - config.open = false; - - row.reinitialize(); - - this.table.rowManager.refreshActiveData("tree", false, true); - - this.table.options.dataTreeRowCollapsed(row.getComponent(), row.modules.dataTree.index); - } -}; - -DataTree.prototype.toggleRow = function(row){ - var config = row.modules.dataTree; - - if(config.children !== false){ - if(config.open){ - this.collapseRow(row); - }else{ - this.expandRow(row); - } - } -}; - -DataTree.prototype.getTreeParent = function(row){ - return row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false; -}; - -DataTree.prototype.getTreeChildren = function(row){ - var config = row.modules.dataTree, - output = []; - - if(config.children){ - - if(!Array.isArray(config.children)){ - config.children = this.generateChildren(row); - } - - config.children.forEach((childRow) => { - if(childRow instanceof Row){ - output.push(childRow.getComponent()); - } - }); - } - - return output; -}; - - -DataTree.prototype.checkForRestyle = function(cell){ - if(!cell.row.cells.indexOf(cell)){ - if(cell.row.modules.dataTree.children !== false){ - cell.row.reinitialize(); - } - } -}; - - -Tabulator.prototype.registerModule("dataTree", DataTree); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/download.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/download.js deleted file mode 100644 index 79c2b46010..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/download.js +++ /dev/null @@ -1,735 +0,0 @@ -var Download = function(table){ - this.table = table; //hold Tabulator object - this.fields = {}; //hold filed multi dimension arrays - this.columnsByIndex = []; //hold columns in their order in the table - this.columnsByField = {}; //hold columns with lookup by field name - this.config = {}; -}; - -//trigger file download -Download.prototype.download = function(type, filename, options, interceptCallback){ - var self = this, - downloadFunc = false; - this.processConfig(); - - function buildLink(data, mime){ - if(interceptCallback){ - interceptCallback(data); - }else{ - self.triggerDownload(data, mime, type, filename); - } - } - - if(typeof type == "function"){ - downloadFunc = type; - }else{ - if(self.downloaders[type]){ - downloadFunc = self.downloaders[type]; - }else{ - console.warn("Download Error - No such download type found: ", type); - } - } - - this.processColumns(); - - if(downloadFunc){ - downloadFunc.call(this, self.processDefinitions(), self.processData() , options || {}, buildLink, this.config); - } -}; - - -Download.prototype.processConfig = function(){ - var config = { //download config - columnGroups:true, - rowGroups:true, - }; - - if(this.table.options.downloadConfig){ - for(var key in this.table.options.downloadConfig){ - config[key] = this.table.options.downloadConfig[key]; - } - } - - if (config.rowGroups && this.table.options.groupBy && this.table.modExists("groupRows")){ - this.config.rowGroups = true; - } - - if (config.columnGroups && this.table.columnManager.columns.length != this.table.columnManager.columnsByIndex.length){ - this.config.columnGroups = true; - } -}; - -Download.prototype.processColumns = function () { - var self = this; - - self.columnsByIndex = []; - self.columnsByField = {}; - - self.table.columnManager.columnsByIndex.forEach(function (column) { - - if (column.field && column.visible && column.definition.download !== false) { - self.columnsByIndex.push(column); - self.columnsByField[column.field] = column; - } - }); -}; - -Download.prototype.processDefinitions = function(){ - var self = this, - processedDefinitions = []; - - if(this.config.columnGroups){ - self.table.columnManager.columns.forEach(function(column){ - var colData = self.processColumnGroup(column); - - if(colData){ - processedDefinitions.push(colData); - } - }); - }else{ - self.columnsByIndex.forEach(function(column){ - if(column.download !== false){ - //isolate definiton from defintion object - processedDefinitions.push(self.processDefinition(column)); - } - }); - } - - return processedDefinitions; -}; - -Download.prototype.processColumnGroup = function(column){ - var subGroups = column.columns; - - var groupData = { - type:"group", - title:column.definition.title, - }; - - if(subGroups.length){ - groupData.subGroups = []; - groupData.width = 0; - - subGroups.forEach((subGroup) => { - var subGroupData = this.processColumnGroup(subGroup); - - if(subGroupData){ - groupData.width += subGroupData.width; - groupData.subGroups.push(subGroupData); - } - }); - - if(!groupData.width){ - return false; - } - }else{ - if(column.field && column.visible && column.definition.download !== false){ - groupData.width = 1; - groupData.definition = this.processDefinition(column); - }else{ - return false; - } - } - - return groupData; -}; - -Download.prototype.processDefinition = function(column){ - var def = {}; - - for(var key in column.definition){ - def[key] = column.definition[key]; - } - - if(typeof column.definition.downloadTitle != "undefined"){ - def.title = column.definition.downloadTitle; - } - - return def; -}; - -Download.prototype.processData = function(){ - var self = this, - data = [], - groups = []; - - if(this.config.rowGroups){ - groups = this.table.modules.groupRows.getGroups(); - - groups.forEach((group) => { - data.push(this.processGroupData(group)); - }); - }else{ - data = self.table.rowManager.getData(true, "download"); - } - - //bulk data processing - if(typeof self.table.options.downloadDataFormatter == "function"){ - data = self.table.options.downloadDataFormatter(data); - } - - return data; -}; - -Download.prototype.processGroupData = function(group){ - var subGroups = group.getSubGroups(); - - var groupData = { - type:"group", - key:group.key - }; - - if(subGroups.length){ - groupData.subGroups = []; - - subGroups.forEach((subGroup) => { - groupData.subGroups.push(this.processGroupData(subGroup)); - }); - }else{ - groupData.rows = group.getData(true, "download"); - } - - return groupData; -}; - -Download.prototype.triggerDownload = function(data, mime, type, filename){ - var element = document.createElement('a'), - blob = new Blob([data],{type:mime}), - filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type); - - blob = this.table.options.downloadReady.call(this.table, data, blob); - - if(blob){ - - if(navigator.msSaveOrOpenBlob){ - navigator.msSaveOrOpenBlob(blob, filename); - }else{ - element.setAttribute('href', window.URL.createObjectURL(blob)); - - //set file title - element.setAttribute('download', filename); - - //trigger download - element.style.display = 'none'; - document.body.appendChild(element); - element.click(); - - //remove temporary link element - document.body.removeChild(element); - } - - - if(this.table.options.downloadComplete){ - this.table.options.downloadComplete(); - } - } - -}; - -//nested field lookup -Download.prototype.getFieldValue = function(field, data){ - var column = this.columnsByField[field]; - - if(column){ - return column.getFieldValue(data); - } - - return false; -}; - - -Download.prototype.commsReceived = function(table, action, data){ - switch(action){ - case "intercept": - this.download(data.type, "", data.options, data.intercept); - break; - } -}; - - -//downloaders -Download.prototype.downloaders = { - csv:function(columns, data, options, setFileContents, config){ - var self = this, - titles = [], - fields = [], - delimiter = options && options.delimiter ? options.delimiter : ",", - fileContents; - - //build column headers - function parseSimpleTitles(){ - columns.forEach(function(column){ - titles.push('"' + String(column.title).split('"').join('""') + '"'); - fields.push(column.field); - }); - } - - function parseColumnGroup(column, level){ - if(column.subGroups){ - column.subGroups.forEach(function(subGroup){ - parseColumnGroup(subGroup, level+1); - }); - }else{ - titles.push('"' + String(column.title).split('"').join('""') + '"'); - fields.push(column.definition.field); - } - } - - if(config.columnGroups){ - console.warn("Download Warning - CSV downloader cannot process column groups"); - - columns.forEach(function(column){ - parseColumnGroup(column,0); - }); - }else{ - parseSimpleTitles(); - } - - - //generate header row - fileContents = [titles.join(delimiter)]; - - function parseRows(data){ - //generate each row of the table - data.forEach(function(row){ - var rowData = []; - - fields.forEach(function(field){ - var value = self.getFieldValue(field, row); - - switch(typeof value){ - case "object": - value = JSON.stringify(value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = value; - } - - //escape quotation marks - rowData.push('"' + String(value).split('"').join('""') + '"'); - }); - - fileContents.push(rowData.join(delimiter)); - }); - } - - function parseGroup(group){ - if(group.subGroups){ - group.subGroups.forEach(function(subGroup){ - parseGroup(subGroup); - }); - }else{ - parseRows(group.rows); - } - } - - if(config.rowGroups){ - console.warn("Download Warning - CSV downloader cannot process row groups"); - - data.forEach(function(group){ - parseGroup(group); - }); - }else{ - parseRows(data); - } - - setFileContents(fileContents.join("\n"), "text/csv"); - }, - - json:function(columns, data, options, setFileContents, config){ - var fileContents = JSON.stringify(data, null, '\t'); - - setFileContents(fileContents, "application/json"); - }, - - pdf:function(columns, data, options, setFileContents, config){ - var self = this, - fields = [], - header = [], - body = [], - table = "", - groupRowIndexs = [], - autoTableParams = {}, - rowGroupStyles = {}, - jsPDFParams = options.jsPDF || {}, - title = options && options.title ? options.title : ""; - - if(!jsPDFParams.orientation){ - jsPDFParams.orientation = options.orientation || "landscape"; - } - - if(!jsPDFParams.unit){ - jsPDFParams.unit = "pt"; - } - - //build column headers - function parseSimpleTitles(){ - columns.forEach(function(column){ - if(column.field){ - header.push(column.title || ""); - fields.push(column.field); - } - }); - } - - function parseColumnGroup(column, level){ - if(column.subGroups){ - column.subGroups.forEach(function(subGroup){ - parseColumnGroup(subGroup, level+1); - }); - }else{ - header.push(column.title || ""); - fields.push(column.definition.field); - } - } - - if(config.columnGroups){ - console.warn("Download Warning - PDF downloader cannot process column groups"); - - columns.forEach(function(column){ - parseColumnGroup(column,0); - }); - }else{ - parseSimpleTitles(); - } - - function parseValue(value){ - switch(typeof value){ - case "object": - value = JSON.stringify(value); - break; - - case "undefined": - case "null": - value = ""; - break; - - default: - value = value; - } - - return value; - } - - function parseRows(data){ - //build table rows - data.forEach(function(row){ - var rowData = []; - - fields.forEach(function(field){ - var value = self.getFieldValue(field, row); - rowData.push(parseValue(value)); - }); - - body.push(rowData); - }); - } - - function parseGroup(group){ - var groupData = []; - - groupData.push(parseValue(group.key)); - - groupRowIndexs.push(body.length); - - body.push(groupData); - - if(group.subGroups){ - group.subGroups.forEach(function(subGroup){ - parseGroup(subGroup); - }); - }else{ - parseRows(group.rows); - } - } - - if(config.rowGroups){ - data.forEach(function(group){ - parseGroup(group); - }); - }else{ - parseRows(data); - } - - var doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables - - if(options && options.autoTable){ - if(typeof options.autoTable === "function"){ - autoTableParams = options.autoTable(doc) || {}; - }else{ - autoTableParams = options.autoTable; - } - } - - if(config.rowGroups){ - - rowGroupStyles = options.rowGroupStyles || { - fontStyle: "bold", - fontSize: 12, - cellPadding: 6, - fillColor: 220, - }; - - function createdCell (cell, data){ - if(groupRowIndexs.indexOf(data.row.index) > -1){ - for(var key in rowGroupStyles){ - cell.styles[key] = rowGroupStyles[key]; - } - } - } - - if(!autoTableParams.createdCell){ - autoTableParams.createdCell = createdCell; - }else{ - var createdCellHolder = autoTableParams.createdCell; - - autoTableParams.createdCell = function(cell, data){ - createdCell(cell, data); - createdCellHolder(cell, data); - }; - } - } - - if(title){ - autoTableParams.addPageContent = function(data) { - doc.text(title, 40, 30); - }; - } - - doc.autoTable(header, body, autoTableParams); - - setFileContents(doc.output("arraybuffer"), "application/pdf"); - }, - - xlsx:function(columns, data, options, setFileContents, config){ - var self = this, - sheetName = options.sheetName || "Sheet1", - workbook = {SheetNames:[], Sheets:{}}, - groupRowIndexs = [], - groupColumnIndexs = [], - output; - - function generateSheet(){ - var titles = [], - fields = [], - rows = [], - worksheet; - - //convert rows to worksheet - function rowsToSheet(){ - var sheet = {}; - var range = {s: {c:0, r:0}, e: {c:fields.length, r:rows.length }}; - - XLSX.utils.sheet_add_aoa(sheet, rows); - - sheet['!ref'] = XLSX.utils.encode_range(range); - - var merges = generateMerges(); - - if(merges.length){ - sheet["!merges"] = merges; - } - - return sheet; - } - - function parseSimpleTitles(){ - //get field lists - columns.forEach(function(column){ - titles.push(column.title); - fields.push(column.field); - }); - - rows.push(titles); - } - - function parseColumnGroup(column, level){ - - if(typeof titles[level] === "undefined"){ - titles[level] = []; - } - - if(typeof groupColumnIndexs[level] === "undefined"){ - groupColumnIndexs[level] = []; - } - - if(column.width > 1){ - - groupColumnIndexs[level].push({ - type:"hoz", - start:titles[level].length, - end:titles[level].length + column.width - 1, - }); - } - - titles[level].push(column.title); - - if(column.subGroups){ - column.subGroups.forEach(function(subGroup){ - parseColumnGroup(subGroup, level+1); - }); - }else{ - fields.push(column.definition.field); - padColumnTitles(fields.length - 1, level); - - groupColumnIndexs[level].push({ - type:"vert", - start:fields.length - 1, - }); - - } - } - - - function padColumnTitles(){ - var max = 0; - - titles.forEach(function(title){ - var len = title.length; - if(len > max){ - max = len; - } - }); - - titles.forEach(function(title){ - var len = title.length; - if(len < max){ - for(var i = len; i < max; i++){ - title.push(""); - } - } - }); - } - - if(config.columnGroups){ - columns.forEach(function(column){ - parseColumnGroup(column,0); - }); - - titles.forEach(function(title){ - rows.push(title); - }); - }else{ - parseSimpleTitles(); - } - - function generateMerges(){ - var output = []; - - groupRowIndexs.forEach(function(index){ - output.push({s:{r:index,c:0},e:{r:index,c:fields.length - 1}}); - }); - - groupColumnIndexs.forEach(function(merges, level){ - merges.forEach(function(merge){ - if(merge.type === "hoz"){ - output.push({s:{r:level,c:merge.start},e:{r:level,c:merge.end}}); - }else{ - if(level != titles.length - 1){ - output.push({s:{r:level,c:merge.start},e:{r:titles.length - 1,c:merge.start}}); - } - } - }); - }); - - return output; - } - - //generate each row of the table - function parseRows(data){ - data.forEach(function(row){ - var rowData = []; - - fields.forEach(function(field){ - var value = self.getFieldValue(field, row); - - rowData.push(typeof value === "object" ? JSON.stringify(value) : value); - }); - - rows.push(rowData); - }); - } - - function parseGroup(group){ - var groupData = []; - - groupData.push(group.key); - - groupRowIndexs.push(rows.length); - - rows.push(groupData); - - if(group.subGroups){ - group.subGroups.forEach(function(subGroup){ - parseGroup(subGroup); - }); - }else{ - parseRows(group.rows); - } - } - - if(config.rowGroups){ - data.forEach(function(group){ - parseGroup(group); - }); - }else{ - parseRows(data); - } - - worksheet = rowsToSheet(); - - return worksheet; - } - - if(options.sheetOnly){ - setFileContents(generateSheet()); - return; - } - - if(options.sheets){ - for(var sheet in options.sheets){ - - if(options.sheets[sheet] === true){ - workbook.SheetNames.push(sheet); - workbook.Sheets[sheet] = generateSheet(); - }else{ - - workbook.SheetNames.push(sheet); - - this.table.modules.comms.send(options.sheets[sheet], "download", "intercept",{ - type:"xlsx", - options:{sheetOnly:true}, - intercept:function(data){ - workbook.Sheets[sheet] = data; - } - }); - } - } - }else{ - workbook.SheetNames.push(sheetName); - workbook.Sheets[sheetName] = generateSheet(); - } - - //convert workbook to binary array - function s2ab(s) { - var buf = new ArrayBuffer(s.length); - var view = new Uint8Array(buf); - for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; - return buf; - } - - output = XLSX.write(workbook, {bookType:'xlsx', bookSST:true, type: 'binary'}); - - setFileContents(s2ab(output), "application/octet-stream"); - }, - -}; - - -Tabulator.prototype.registerModule("download", Download); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/edit.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/edit.js deleted file mode 100644 index ecb311fb19..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/edit.js +++ /dev/null @@ -1,1439 +0,0 @@ -var Edit = function(table){ - this.table = table; //hold Tabulator object - this.currentCell = false; //hold currently editing cell - this.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening - this.recursionBlock = false; //prevent focus recursion - this.invalidEdit = false; -}; - - -//initialize column editor -Edit.prototype.initializeColumn = function(column){ - var self = this, - config = { - editor:false, - blocked:false, - check:column.definition.editable, - params:column.definition.editorParams || {} - }; - - //set column editor - switch(typeof column.definition.editor){ - case "string": - - if(column.definition.editor === "tick"){ - column.definition.editor = "tickCross"; - console.warn("DEPRECATION WANRING - the tick editor has been depricated, please use the tickCross editor"); - } - - if(self.editors[column.definition.editor]){ - config.editor = self.editors[column.definition.editor]; - }else{ - console.warn("Editor Error - No such editor found: ", column.definition.editor); - } - break; - - case "function": - config.editor = column.definition.editor; - break; - - case "boolean": - - if(column.definition.editor === true){ - - if(typeof column.definition.formatter !== "function"){ - - if(column.definition.formatter === "tick"){ - column.definition.formatter = "tickCross"; - console.warn("DEPRECATION WANRING - the tick editor has been depricated, please use the tickCross editor"); - } - - if(self.editors[column.definition.formatter]){ - config.editor = self.editors[column.definition.formatter]; - }else{ - config.editor = self.editors["input"]; - } - }else{ - console.warn("Editor Error - Cannot auto lookup editor for a custom formatter: ", column.definition.formatter); - } - } - break; - } - - if(config.editor){ - column.modules.edit = config; - } -}; - -Edit.prototype.getCurrentCell = function(){ - return this.currentCell ? this.currentCell.getComponent() : false; -}; - -Edit.prototype.clearEditor = function(){ - var cell = this.currentCell, - cellEl; - - this.invalidEdit = false; - - if(cell){ - this.currentCell = false; - - cellEl = cell.getElement(); - cellEl.classList.remove("tabulator-validation-fail"); - cellEl.classList.remove("tabulator-editing"); - while(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild); - - cell.row.getElement().classList.remove("tabulator-row-editing"); - } -}; - -Edit.prototype.cancelEdit = function(){ - - if(this.currentCell){ - var cell = this.currentCell; - var component = this.currentCell.getComponent(); - - this.clearEditor(); - cell.setValueActual(cell.getValue()); - - if(cell.column.cellEvents.cellEditCancelled){ - cell.column.cellEvents.cellEditCancelled.call(this.table, component); - } - - this.table.options.cellEditCancelled.call(this.table, component); - } -}; - -//return a formatted value for a cell -Edit.prototype.bindEditor = function(cell){ - var self = this, - element = cell.getElement(); - - element.setAttribute("tabindex", 0); - - element.addEventListener("click", function(e){ - if(!element.classList.contains("tabulator-editing")){ - element.focus(); - } - }); - - element.addEventListener("mousedown", function(e){ - self.mouseClick = true; - }); - - element.addEventListener("focus", function(e){ - if(!self.recursionBlock){ - self.edit(cell, e, false); - } - }); -}; - -Edit.prototype.focusCellNoEvent = function(cell){ - this.recursionBlock = true; - cell.getElement().focus(); - this.recursionBlock = false; -}; - -Edit.prototype.editCell = function(cell, forceEdit){ - this.focusCellNoEvent(cell); - this.edit(cell, false, forceEdit); -}; - -Edit.prototype.edit = function(cell, e, forceEdit){ - var self = this, - allowEdit = true, - rendered = function(){}, - element = cell.getElement(), - cellEditor, component, params; - - //prevent editing if another cell is refusing to leave focus (eg. validation fail) - if(this.currentCell){ - if(!this.invalidEdit){ - this.cancelEdit(); - } - return; - } - - //handle successfull value change - function success(value){ - - if(self.currentCell === cell){ - var valid = true; - - if(cell.column.modules.validate && self.table.modExists("validate")){ - valid = self.table.modules.validate.validate(cell.column.modules.validate, cell.getComponent(), value); - } - - if(valid === true){ - self.clearEditor(); - cell.setValue(value, true); - - if(self.table.options.dataTree && self.table.modExists("dataTree")){ - self.table.modules.dataTree.checkForRestyle(cell); - } - }else{ - self.invalidEdit = true; - element.classList.add("tabulator-validation-fail"); - self.focusCellNoEvent(cell); - rendered(); - self.table.options.validationFailed.call(self.table, cell.getComponent(), value, valid); - } - }else{ - // console.warn("Edit Success Error - cannot call success on a cell that is no longer being edited"); - } - } - - //handle aborted edit - function cancel(){ - if(self.currentCell === cell){ - self.cancelEdit(); - - if(self.table.options.dataTree && self.table.modExists("dataTree")){ - self.table.modules.dataTree.checkForRestyle(cell); - } - }else{ - // console.warn("Edit Success Error - cannot call cancel on a cell that is no longer being edited"); - } - } - - function onRendered(callback){ - rendered = callback; - } - - if(!cell.column.modules.edit.blocked){ - if(e){ - e.stopPropagation(); - } - - switch(typeof cell.column.modules.edit.check){ - case "function": - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - break; - - case "boolean": - allowEdit = cell.column.modules.edit.check; - break; - } - - if(allowEdit || forceEdit){ - - self.cancelEdit(); - - self.currentCell = cell; - - component = cell.getComponent(); - - if(this.mouseClick){ - this.mouseClick = false; - - if(cell.column.cellEvents.cellClick){ - cell.column.cellEvents.cellClick.call(this.table, e, component); - } - } - - if(cell.column.cellEvents.cellEditing){ - cell.column.cellEvents.cellEditing.call(this.table, component); - } - - self.table.options.cellEditing.call(this.table, component); - - params = typeof cell.column.modules.edit.params === "function" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params; - - cellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params); - - //if editor returned, add to DOM, if false, abort edit - if(cellEditor !== false){ - - if(cellEditor instanceof Node){ - element.classList.add("tabulator-editing"); - cell.row.getElement().classList.add("tabulator-row-editing"); - while(element.firstChild) element.removeChild(element.firstChild); - element.appendChild(cellEditor); - - //trigger onRendered Callback - rendered(); - - //prevent editing from triggering rowClick event - var children = element.children; - - for (var i = 0; i < children.length; i++) { - children[i].addEventListener("click", function(e){ - e.stopPropagation(); - }); - } - }else{ - console.warn("Edit Error - Editor should return an instance of Node, the editor returned:", cellEditor); - element.blur(); - return false; - } - - }else{ - element.blur(); - return false; - } - - return true; - }else{ - this.mouseClick = false; - element.blur(); - return false; - } - }else{ - this.mouseClick = false; - element.blur(); - return false; - } -}; - -//default data editors -Edit.prototype.editors = { - - //input element - input:function(cell, onRendered, success, cancel, editorParams){ - - //create and style input - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - input.value = typeof cellValue !== "undefined" ? cellValue : ""; - - onRendered(function(){ - input.focus(); - input.style.height = "100%"; - }); - - function onChange(e){ - if(((cellValue === null || typeof cellValue === "undefined") && input.value !== "") || input.value != cellValue){ - success(input.value); - }else{ - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 13: - success(input.value); - break; - - case 27: - cancel(); - break; - } - }); - - return input; - }, - - //resizable text area element - textarea:function(cell, onRendered, success, cancel, editorParams){ - var self = this, - cellValue = cell.getValue(), - value = String(typeof cellValue == "null" || typeof cellValue == "undefined" ? "" : cellValue), - count = (value.match(/(?:\r\n|\r|\n)/g) || []).length + 1, - input = document.createElement("textarea"), - scrollHeight = 0; - - //create and style input - input.style.display = "block"; - input.style.padding = "2px"; - input.style.height = "100%"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - input.style.whiteSpace = "pre-wrap"; - input.style.resize = "none"; - - input.value = value; - - onRendered(function(){ - input.focus(); - input.style.height = "100%"; - }); - - function onChange(e){ - - if(((cellValue === null || typeof cellValue === "undefined") && input.value !== "") || input.value != cellValue){ - success(input.value); - setTimeout(function(){ - cell.getRow().normalizeHeight(); - },300) - }else{ - cancel(); - } - } - - //submit new value on blur or change - input.addEventListener("change", onChange); - input.addEventListener("blur", onChange); - - input.addEventListener("keyup", function(){ - - input.style.height = ""; - - var heightNow = input.scrollHeight; - - input.style.height = heightNow + "px"; - - if(heightNow != scrollHeight){ - scrollHeight = heightNow; - cell.getRow().normalizeHeight(); - } - }); - - input.addEventListener("keydown", function(e){ - if(e.keyCode == 27){ - cancel(); - } - }); - - return input; - }, - - //input element with type of number - number:function(cell, onRendered, success, cancel, editorParams){ - - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", "number"); - - if(typeof editorParams.max != "undefined"){ - input.setAttribute("max", editorParams.max); - } - - if(typeof editorParams.min != "undefined"){ - input.setAttribute("min", editorParams.min); - } - - if(typeof editorParams.step != "undefined"){ - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - input.value = cellValue; - - onRendered(function () { - input.focus(); - input.style.height = "100%"; - }); - - function onChange(){ - var value = input.value; - - if(!isNaN(value) && value !==""){ - value = Number(value); - } - - if(value != cellValue){ - success(value); - }else{ - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e){ - onChange(); - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 13: - case 9: - onChange(); - break; - - case 27: - cancel(); - break; - } - }); - - return input; - }, - - //input element with type of number - range:function(cell, onRendered, success, cancel, editorParams){ - - var cellValue = cell.getValue(), - input = document.createElement("input"); - - input.setAttribute("type", "range"); - - if (typeof editorParams.max != "undefined") { - input.setAttribute("max", editorParams.max); - } - - if (typeof editorParams.min != "undefined") { - input.setAttribute("min", editorParams.min); - } - - if (typeof editorParams.step != "undefined") { - input.setAttribute("step", editorParams.step); - } - - //create and style input - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - input.value = cellValue; - - onRendered(function () { - input.focus(); - input.style.height = "100%"; - }); - - function onChange(){ - var value = input.value; - - if(!isNaN(value) && value !==""){ - value = Number(value); - } - - if(value != cellValue){ - success(value); - }else{ - cancel(); - } - } - - //submit new value on blur - input.addEventListener("blur", function(e){ - onChange(); - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 13: - case 9: - onChange(); - break; - - case 27: - cancel(); - break; - } - }); - - return input; - }, - - //select - select:function(cell, onRendered, success, cancel, editorParams){ - var self = this, - cellEl = cell.getElement(), - initialValue = cell.getValue(), - input = document.createElement("input"), - listEl = document.createElement("div"), - dataItems = [], - displayItems = [], - currentItem = {}, - blurable = true; - - if(Array.isArray(editorParams) || (!Array.isArray(editorParams) && typeof editorParams === "object" && !editorParams.values)){ - console.warn("DEPRECATION WANRING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object"); - editorParams = {values:editorParams}; - } - - function getUniqueColumnValues(){ - var output = {}, - column = cell.getColumn()._getSelf(), - data = self.table.getData(); - - data.forEach(function(row){ - var val = column.getFieldValue(row); - - if(val !== null && typeof val !== "undefined" && val !== ""){ - output[val] = true; - } - }); - - return Object.keys(output); - } - - function parseItems(inputValues, curentValue){ - var dataList = []; - var displayList = []; - - function processComplexListItem(item){ - var item = { - label:editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label) : item.label, - value:item.value, - element:false, - }; - - if(item.value === curentValue){ - setCurrentItem(item); - } - - dataList.push(item); - displayList.push(item); - - return item; - } - - if(typeof inputValues == "function"){ - inputValues = inputValues(cell); - } - - if(Array.isArray(inputValues)){ - inputValues.forEach(function(value){ - var item; - - if(typeof value === "object"){ - - if(value.options){ - item = { - label:value.label, - group:true, - element:false, - }; - - displayList.push(item); - - value.options.forEach(function(item){ - processComplexListItem(item); - }); - }else{ - processComplexListItem(value); - } - - }else{ - item = { - label:editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value, - value:value, - element:false, - }; - - if(item.value === curentValue){ - setCurrentItem(item); - } - - dataList.push(item); - displayList.push(item); - } - }); - }else{ - for(var key in inputValues){ - var item = { - label:editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key], - value:key, - element:false, - }; - - if(item.value === curentValue){ - setCurrentItem(item); - } - - dataList.push(item); - displayList.push(item); - } - } - - dataItems = dataList; - displayItems = displayList; - - fillList(); - } - - function fillList(){ - while(listEl.firstChild) listEl.removeChild(listEl.firstChild); - - displayItems.forEach(function(item){ - var el = item.element; - - if(!el){ - - if(item.group){ - el = document.createElement("div"); - el.classList.add("tabulator-edit-select-list-group"); - el.tabIndex = 0; - el.innerHTML = item.label === "" ? " " : item.label; - }else{ - el = document.createElement("div"); - el.classList.add("tabulator-edit-select-list-item"); - el.tabIndex = 0; - el.innerHTML = item.label === "" ? " " : item.label; - - el.addEventListener("click", function(){ - setCurrentItem(item); - chooseItem(); - }); - - if(item === currentItem){ - el.classList.add("active"); - } - } - - el.addEventListener("mousedown", function(){ - blurable = false; - - setTimeout(function(){ - blurable = true; - }, 10); - }); - - item.element = el; - - - } - - listEl.appendChild(el); - }); - } - - - function setCurrentItem(item){ - - if(currentItem && currentItem.element){ - currentItem.element.classList.remove("active"); - } - - currentItem = item; - input.value = item.label === " " ? "" : item.label; - - if(item.element){ - item.element.classList.add("active"); - } - } - - - function chooseItem(){ - hideList(); - - if(initialValue !== currentItem.value){ - initialValue = currentItem.value; - success(currentItem.value); - }else{ - cancel(); - } - } - - function cancelItem(){ - hideList(); - cancel(); - } - - function showList(){ - if(!listEl.parentNode){ - - if(editorParams.values === true){ - parseItems(getUniqueColumnValues(), initialValue); - }else{ - parseItems(editorParams.values || [], initialValue); - } - - - var offset = Tabulator.prototype.helpers.elOffset(cellEl); - - listEl.style.minWidth = cellEl.offsetWidth + "px"; - - listEl.style.top = (offset.top + cellEl.offsetHeight) + "px"; - listEl.style.left = offset.left + "px"; - document.body.appendChild(listEl); - } - } - - function hideList(){ - if(listEl.parentNode){ - listEl.parentNode.removeChild(listEl); - } - } - - //style input - input.setAttribute("type", "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - input.readonly = true; - - //allow key based navigation - input.addEventListener("keydown", function(e){ - var index; - - switch(e.keyCode){ - case 38: //up arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - - index = dataItems.indexOf(currentItem); - - if(index > 0){ - setCurrentItem(dataItems[index - 1]); - } - break; - - case 40: //down arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - - index = dataItems.indexOf(currentItem); - - if(index < dataItems.length - 1){ - if(index == -1){ - setCurrentItem(dataItems[0]); - }else{ - setCurrentItem(dataItems[index + 1]); - } - } - break; - - case 13: //enter - chooseItem(); - break; - - case 27: //escape - cancelItem(); - break; - } - }); - - input.addEventListener("blur", function(e){ - if(blurable){ - cancelItem(); - } - }); - - input.addEventListener("focus", function(e){ - showList(); - }); - - //style list element - listEl = document.createElement("div"); - listEl.classList.add("tabulator-edit-select-list"); - - onRendered(function(){ - input.style.height = "100%"; - input.focus(); - }); - - return input; - }, - - - //autocomplete - autocomplete:function(cell, onRendered, success, cancel, editorParams){ - var self = this, - cellEl = cell.getElement(), - initialValue = cell.getValue(), - input = document.createElement("input"), - listEl = document.createElement("div"), - allItems = [], - displayItems = [], - currentItem = {}, - blurable = true; - - function getUniqueColumnValues(){ - var output = {}, - column = cell.getColumn()._getSelf(), - data = self.table.getData(); - - data.forEach(function(row){ - var val = column.getFieldValue(row); - - if(val !== null && typeof val !== "undefined" && val !== ""){ - output[val] = true; - } - }); - - return Object.keys(output); - } - - function parseItems(inputValues, curentValue){ - var itemList = []; - - if(Array.isArray(inputValues)){ - inputValues.forEach(function(value){ - var item = { - title:editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value, - value:value, - element:false, - }; - - if(item.value === curentValue){ - setCurrentItem(item); - } - - itemList.push(item); - }); - }else{ - for(var key in inputValues){ - var item = { - title:editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key], - value:key, - element:false, - }; - - if(item.value === curentValue){ - setCurrentItem(item); - } - - itemList.push(item); - } - } - - allItems = itemList; - } - - function filterList(term){ - var matches = []; - - if(editorParams.searchFunc){ - matches = editorParams.searchFunc(term, values); - }else{ - if(term === ""){ - - if(editorParams.showListOnEmpty){ - allItems.forEach(function(item){ - matches.push(item); - }); - } - }else{ - allItems.forEach(function(item){ - - if(item.value !== null || typeof item.value !== "undefined"){ - if(String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1){ - matches.push(item); - } - } - }); - } - } - - displayItems = matches; - - fillList(); - } - - function fillList(){ - var current = false; - - while(listEl.firstChild) listEl.removeChild(listEl.firstChild); - - displayItems.forEach(function(item){ - var el = item.element; - - if(!el){ - el = document.createElement("div"); - el.classList.add("tabulator-edit-select-list-item"); - el.tabIndex = 0; - el.innerHTML = item.title; - - el.addEventListener("click", function(){ - setCurrentItem(item); - chooseItem(); - }); - - el.addEventListener("mousedown", function(){ - blurable = false; - - setTimeout(function(){ - blurable = true; - }, 10); - }); - - item.element = el; - - if(item === currentItem){ - item.element.classList.add("active"); - current = true; - } - } - - listEl.appendChild(el); - }); - - if(!current){ - setCurrentItem(false); - } - } - - - function setCurrentItem(item, showInputValue){ - if(currentItem && currentItem.element){ - currentItem.element.classList.remove("active"); - } - - currentItem = item; - - if(item && item.element){ - item.element.classList.add("active"); - } - } - - - function chooseItem(){ - hideList(); - - if(currentItem){ - if(initialValue !== currentItem.value){ - initialValue = currentItem.value; - input.value = currentItem.value; - success(input.value); - }else{ - cancel(); - } - }else{ - if(editorParams.freetext){ - initialValue = input.value; - success(input.value); - }else{ - if(editorParams.allowEmpty && input.value === ""){ - initialValue = input.value; - success(input.value); - }else{ - cancel(); - } - } - } - } - - function cancelItem(){ - hideList(); - cancel(); - } - - function showList(){ - if(!listEl.parentNode){ - while(listEl.firstChild) listEl.removeChild(listEl.firstChild); - - if(editorParams.values === true){ - parseItems(getUniqueColumnValues(), initialValue); - }else{ - parseItems(editorParams.values || [], initialValue); - } - - var offset = Tabulator.prototype.helpers.elOffset(cellEl); - - listEl.style.minWidth = cellEl.offsetWidth + "px"; - - listEl.style.top = (offset.top + cellEl.offsetHeight) + "px"; - listEl.style.left = offset.left + "px"; - document.body.appendChild(listEl); - } - } - - function hideList(){ - if(listEl.parentNode){ - listEl.parentNode.removeChild(listEl); - } - } - - //style input - input.setAttribute("type", "text"); - - input.style.padding = "4px"; - input.style.width = "100%"; - input.style.boxSizing = "border-box"; - - //allow key based navigation - input.addEventListener("keydown", function(e){ - var index; - - switch(e.keyCode){ - case 38: //up arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - - index = displayItems.indexOf(currentItem); - - if(index > 0){ - setCurrentItem(displayItems[index - 1]); - }else{ - setCurrentItem(false); - } - break; - - case 40: //down arrow - e.stopImmediatePropagation(); - e.stopPropagation(); - - index = displayItems.indexOf(currentItem); - - if(index < displayItems.length - 1){ - if(index == -1){ - setCurrentItem(displayItems[0]); - }else{ - setCurrentItem(displayItems[index + 1]); - } - } - break; - - case 13: //enter - chooseItem(); - break; - - case 27: //escape - cancelItem(); - break; - } - }); - - input.addEventListener("keyup", function(e){ - - switch(e.keyCode){ - case 38: //up arrow - case 37: //left arrow - case 39: //up arrow - case 40: //right arrow - case 13: //enter - case 27: //escape - break; - - default: - filterList(input.value); - } - - }); - - input.addEventListener("blur", function(e){ - if(blurable){ - chooseItem(); - } - }); - - input.addEventListener("focus", function(e){ - showList(); - input.value = initialValue; - filterList(initialValue); - }); - - //style list element - listEl = document.createElement("div"); - listEl.classList.add("tabulator-edit-select-list"); - - onRendered(function(){ - input.style.height = "100%"; - input.focus(); - }); - - return input; - }, - - //start rating - star:function(cell, onRendered, success, cancel, editorParams){ - var self = this, - element = cell.getElement(), - value = cell.getValue(), - maxStars = element.getElementsByTagName("svg").length || 5, - size = element.getElementsByTagName("svg")[0] ? element.getElementsByTagName("svg")[0].getAttribute("width") : 14, - stars = [], - starsHolder = document.createElement("div"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"); - - //change star type - function starChange(val){ - stars.forEach(function(star, i){ - if(i < val){ - if(self.table.browser == "ie"){ - star.setAttribute("class", "tabulator-star-active"); - }else{ - star.classList.replace("tabulator-star-inactive", "tabulator-star-active"); - } - - star.innerHTML = ''; - }else{ - if(self.table.browser == "ie"){ - star.setAttribute("class", "tabulator-star-inactive"); - }else{ - star.classList.replace("tabulator-star-active", "tabulator-star-inactive"); - } - - star.innerHTML = ''; - } - }); - } - - //build stars - function buildStar(i){ - var nextStar = star.cloneNode(true); - - stars.push(nextStar); - - nextStar.addEventListener("mouseover", function(e){ - e.stopPropagation(); - starChange(i); - }); - - nextStar.addEventListener("click", function(e){ - e.stopPropagation(); - success(i); - }); - - starsHolder.appendChild(nextStar); - } - - //handle keyboard navigation value change - function changeValue(val){ - value = val; - starChange(val); - } - - //style cell - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - //style holding element - starsHolder.style.verticalAlign = "middle"; - starsHolder.style.display = "inline-block"; - starsHolder.style.padding = "4px"; - - //style star - star.setAttribute("width", size); - star.setAttribute("height", size); - star.setAttribute("viewBox", "0 0 512 512"); - star.setAttribute("xml:space", "preserve"); - star.style.padding = "0 1px"; - - //create correct number of stars - for(var i=1;i<= maxStars;i++){ - buildStar(i); - } - - //ensure value does not exceed number of stars - value = Math.min(parseInt(value), maxStars); - - // set initial styling of stars - starChange(value); - - starsHolder.addEventListener("mouseover", function(e){ - starChange(0); - }); - - starsHolder.addEventListener("click", function(e){ - success(0); - }); - - element.addEventListener("blur", function(e){ - cancel(); - }); - - //allow key based navigation - element.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 39: //right arrow - changeValue(value + 1); - break; - - case 37: //left arrow - changeValue(value - 1); - break; - - case 13: //enter - success(value); - break; - - case 27: //escape - cancel(); - break; - } - }); - - return starsHolder; - }, - - //draggable progress bar - progress:function(cell, onRendered, success, cancel, editorParams){ - var element = cell.getElement(), - max = typeof editorParams.max === "undefined" ? ( element.getElementsByTagName("div")[0].getAttribute("max") || 100) : editorParams.max, - min = typeof editorParams.min === "undefined" ? ( element.getElementsByTagName("div")[0].getAttribute("min") || 0) : editorParams.min, - percent = (max - min) / 100, - value = cell.getValue() || 0, - handle = document.createElement("div"), - bar = document.createElement("div"), - mouseDrag, mouseDragWidth; - - //set new value - function updateValue(){ - var calcVal = (percent * Math.round(bar.offsetWidth / (element.clientWidth/100))) + min; - success(calcVal); - element.setAttribute("aria-valuenow", calcVal); - element.setAttribute("aria-label", value); - } - - //style handle - handle.style.position = "absolute"; - handle.style.right = "0"; - handle.style.top = "0"; - handle.style.bottom = "0"; - handle.style.width = "5px"; - handle.classList.add("tabulator-progress-handle"); - - //style bar - bar.style.display = "inline-block"; - bar.style.position = "absolute"; - bar.style.top = "8px"; - bar.style.bottom = "8px"; - bar.style.left = "4px"; - bar.style.marginRight = "4px"; - bar.style.backgroundColor = "#488CE9"; - bar.style.maxWidth = "100%"; - bar.style.minWidth = "0%"; - - //style cell - element.style.padding = "0 4px"; - - //make sure value is in range - value = Math.min(parseFloat(value), max); - value = Math.max(parseFloat(value), min); - - //workout percentage - value = 100 - Math.round((value - min) / percent); - bar.style.right = value + "%"; - - element.setAttribute("aria-valuemin", min); - element.setAttribute("aria-valuemax", max); - - bar.appendChild(handle); - - handle.addEventListener("mousedown", function(e){ - mouseDrag = e.screenX; - mouseDragWidth = bar.offsetWidth; - }); - - handle.addEventListener("mouseover", function(){ - handle.style.cursor = "ew-resize"; - }); - - element.addEventListener("mousemove", function(e){ - if(mouseDrag){ - bar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + "px"; - } - }); - - element.addEventListener("mouseup", function(e){ - if(mouseDrag){ - e.stopPropagation(); - e.stopImmediatePropagation(); - - mouseDrag = false; - mouseDragWidth = false; - - updateValue(); - } - }); - - //allow key based navigation - element.addEventListener("keydown", function(e){ - switch(e.keyCode){ - case 39: //right arrow - bar.style.width = (bar.clientWidth + element.clientWidth/100) + "px"; - break; - - case 37: //left arrow - bar.style.width = (bar.clientWidth - element.clientWidth/100) + "px"; - break; - - case 13: //enter - updateValue(); - break; - - case 27: //escape - cancel(); - break; - - } - }); - - element.addEventListener("blur", function(){ - cancel(); - }); - - return bar; - }, - - //checkbox - tickCross:function(cell, onRendered, success, cancel, editorParams){ - var value = cell.getValue(), - input = document.createElement("input"), - tristate = editorParams.tristate, - indetermValue = typeof editorParams.indeterminateValue === "undefined" ? null : editorParams.indeterminateValue, - indetermState = false; - - input.setAttribute("type", "checkbox"); - input.style.marginTop = "5px"; - input.style.boxSizing = "border-box"; - - input.value = value; - - if(tristate && (typeof value === "undefined" || value === indetermValue || value === "")){ - indetermState = true; - input.indeterminate = true; - } - - if(this.table.browser != "firefox"){ //prevent blur issue on mac firefox - onRendered(function(){ - input.focus(); - }); - } - - input.checked = value === true || value === "true" || value === "True" || value === 1; - - function setValue(blur){ - if(tristate){ - if(!blur){ - if(input.checked && !indetermState){ - input.checked = false; - input.indeterminate = true; - indetermState = true; - return indetermValue; - }else{ - indetermState = false; - return input.checked; - } - }else{ - if(indetermState){ - return indetermValue; - }else{ - return input.checked; - } - } - }else{ - return input.checked; - } - } - - //submit new value on blur - input.addEventListener("change", function(e){ - success(setValue()); - }); - - input.addEventListener("blur", function(e){ - success(setValue(true)); - }); - - //submit new value on enter - input.addEventListener("keydown", function(e){ - if(e.keyCode == 13){ - success(setValue()); - } - if(e.keyCode == 27){ - cancel(); - } - }); - - return input; - }, -}; - -Tabulator.prototype.registerModule("edit", Edit); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/filter.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/filter.js deleted file mode 100644 index d8296b5e54..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/filter.js +++ /dev/null @@ -1,711 +0,0 @@ -var Filter = function(table){ - - this.table = table; //hold Tabulator object - - this.filterList = []; //hold filter list - this.headerFilters = {}; //hold column filters - this.headerFilterElements = []; //hold header filter elements for manipulation - this.headerFilterColumns = []; //hold columns that use header filters - - this.changed = false; //has filtering changed since last render -}; - - -//initialize column header filter -Filter.prototype.initializeColumn = function(column, value){ - var self = this, - field = column.getField(), - prevSuccess, params; - - - //handle successfull value change - function success(value){ - var filterType = (column.modules.filter.tagType == "input" && column.modules.filter.attrType == "text") || column.modules.filter.tagType == "textarea" ? "partial" : "match", - type = "", - filterFunc; - - if(typeof prevSuccess === "undefined" || prevSuccess !== value){ - - prevSuccess = value; - - if(!column.modules.filter.emptyFunc(value)){ - column.modules.filter.value = value; - - switch(typeof column.definition.headerFilterFunc){ - case "string": - if(self.filters[column.definition.headerFilterFunc]){ - type = column.definition.headerFilterFunc; - filterFunc = function(data){ - return self.filters[column.definition.headerFilterFunc](value, column.getFieldValue(data)); - }; - }else{ - console.warn("Header Filter Error - Matching filter function not found: ", column.definition.headerFilterFunc); - } - break; - - case "function": - filterFunc = function(data){ - var params = column.definition.headerFilterFuncParams || {}; - var fieldVal = column.getFieldValue(data); - - params = typeof params === "function" ? params(value, fieldVal, data) : params; - - return column.definition.headerFilterFunc(value, fieldVal, data, params); - }; - - type = filterFunc; - break; - } - - if(!filterFunc){ - switch(filterType){ - case "partial": - filterFunc = function(data){ - return String(column.getFieldValue(data)).toLowerCase().indexOf(String(value).toLowerCase()) > -1; - }; - type = "like"; - break; - - default: - filterFunc = function(data){ - return column.getFieldValue(data) == value; - }; - type = "="; - } - } - - self.headerFilters[field] = {value:value, func:filterFunc, type:type}; - - }else{ - delete self.headerFilters[field]; - } - - self.changed = true; - - self.table.rowManager.filterRefresh(); - } - } - - column.modules.filter = { - success:success, - attrType:false, - tagType:false, - emptyFunc:false, - }; - - this.generateHeaderFilterElement(column); -}; - -Filter.prototype.generateHeaderFilterElement = function(column, initialValue){ - var self = this, - success = column.modules.filter.success, - field = column.getField(), - filterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params; - - //handle aborted edit - function cancel(){} - - if(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){ - column.modules.filter.headerElement.parentNode.removeChild(column.modules.filter.headerElement); - } - - if(field){ - - //set empty value function - column.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){ - return !value && value !== "0"; - }; - - filterElement = document.createElement("div"); - filterElement.classList.add("tabulator-header-filter"); - - //set column editor - switch(typeof column.definition.headerFilter){ - case "string": - if(self.table.modules.edit.editors[column.definition.headerFilter]){ - editor = self.table.modules.edit.editors[column.definition.headerFilter]; - - if((column.definition.headerFilter === "tick" || column.definition.headerFilter === "tickCross") && !column.definition.headerFilterEmptyCheck){ - column.modules.filter.emptyFunc = function(value){ - return value !== true && value !== false; - }; - } - }else{ - console.warn("Filter Error - Cannot build header filter, No such editor found: ", column.definition.editor); - } - break; - - case "function": - editor = column.definition.headerFilter; - break; - - case "boolean": - if(column.modules.edit && column.modules.edit.editor){ - editor = column.modules.edit.editor; - }else{ - if(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){ - editor = self.table.modules.edit.editors[column.definition.formatter]; - - if((column.definition.formatter === "tick" || column.definition.formatter === "tickCross") && !column.definition.headerFilterEmptyCheck){ - column.modules.filter.emptyFunc = function(value){ - return value !== true && value !== false; - }; - } - }else{ - editor = self.table.modules.edit.editors["input"]; - } - } - break; - } - - if(editor){ - - cellWrapper = { - getValue:function(){ - return typeof initialValue !== "undefined" ? initialValue : ""; - }, - getField:function(){ - return column.definition.field; - }, - getElement:function(){ - return filterElement; - }, - getColumn:function(){ - return column.getComponent(); - }, - getRow:function(){ - return { - normalizeHeight:function(){ - - } - }; - } - }; - - params = column.definition.headerFilterParams || {}; - - params = typeof params === "function" ? params.call(self.table) : params; - - editorElement = editor.call(this.table.modules.edit, cellWrapper, function(){}, success, cancel, params); - - if(!editorElement){ - console.warn("Filter Error - Cannot add filter to " + field + " column, editor returned a value of false"); - return; - } - - if(!(editorElement instanceof Node)){ - console.warn("Filter Error - Cannot add filter to " + field + " column, editor should return an instance of Node, the editor returned:", editorElement); - return; - } - - //set Placeholder Text - if(field){ - self.table.modules.localize.bind("headerFilters|columns|" + column.definition.field, function(value){ - editorElement.setAttribute("placeholder", typeof value !== "undefined" && value ? value : self.table.modules.localize.getText("headerFilters|default")); - }); - }else{ - self.table.modules.localize.bind("headerFilters|default", function(value){ - editorElement.setAttribute("placeholder", typeof self.column.definition.headerFilterPlaceholder !== "undefined" && self.column.definition.headerFilterPlaceholder ? self.column.definition.headerFilterPlaceholder : value); - }); - } - - //focus on element on click - editorElement.addEventListener("click", function(e){ - e.stopPropagation(); - editorElement.focus(); - }); - - //live update filters as user types - typingTimer = false; - - searchTrigger = function(e){ - if(typingTimer){ - clearTimeout(typingTimer); - } - - typingTimer = setTimeout(function(){ - success(editorElement.value); - },300); - }; - - column.modules.filter.headerElement = editorElement; - column.modules.filter.attrType = editorElement.hasAttribute("type") ? editorElement.getAttribute("type").toLowerCase() : "" ; - column.modules.filter.tagType = editorElement.tagName.toLowerCase(); - - if(column.definition.headerFilterLiveFilter !== false){ - - if(!(column.definition.headerFilter === "autocomplete" || (column.definition.editor === "autocomplete" && column.definition.headerFilter === true))){ - editorElement.addEventListener("keyup", searchTrigger); - editorElement.addEventListener("search", searchTrigger); - - - //update number filtered columns on change - if(column.modules.filter.attrType == "number"){ - editorElement.addEventListener("change", function(e){ - success(editorElement.value); - }); - } - - //change text inputs to search inputs to allow for clearing of field - if(column.modules.filter.attrType == "text" && this.table.browser !== "ie"){ - editorElement.setAttribute("type", "search"); - // editorElement.off("change blur"); //prevent blur from triggering filter and preventing selection click - } - - } - - //prevent input and select elements from propegating click to column sorters etc - if(column.modules.filter.tagType == "input" || column.modules.filter.tagType == "select" || column.modules.filter.tagType == "textarea"){ - editorElement.addEventListener("mousedown",function(e){ - e.stopPropagation(); - }); - } - } - - filterElement.appendChild(editorElement); - - column.contentElement.appendChild(filterElement); - - self.headerFilterElements.push(editorElement); - self.headerFilterColumns.push(column); - } - }else{ - console.warn("Filter Error - Cannot add header filter, column has no field set:", column.definition.title); - } - -}; - -//hide all header filter elements (used to ensure correct column widths in "fitData" layout mode) -Filter.prototype.hideHeaderFilterElements = function(){ - this.headerFilterElements.forEach(function(element){ - element.style.display = 'none'; - }); -}; - -//show all header filter elements (used to ensure correct column widths in "fitData" layout mode) -Filter.prototype.showHeaderFilterElements = function(){ - this.headerFilterElements.forEach(function(element){ - element.style.display = ''; - }); -}; - - -//programatically set value of header filter -Filter.prototype.setHeaderFilterFocus = function(column){ - if(column.modules.filter && column.modules.filter.headerElement){ - column.modules.filter.headerElement.focus(); - }else{ - console.warn("Column Filter Focus Error - No header filter set on column:", column.getField()); - } -}; - -//programatically set value of header filter -Filter.prototype.setHeaderFilterValue = function(column, value){ - if (column){ - if(column.modules.filter && column.modules.filter.headerElement){ - this.generateHeaderFilterElement(column, value); - column.modules.filter.success(value); - }else{ - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } -}; - -Filter.prototype.reloadHeaderFilter = function(column){ - if (column){ - if(column.modules.filter && column.modules.filter.headerElement){ - this.generateHeaderFilterElement(column, column.modules.filter.value); - }else{ - console.warn("Column Filter Error - No header filter set on column:", column.getField()); - } - } -} - -//check if the filters has changed since last use -Filter.prototype.hasChanged = function(){ - var changed = this.changed; - this.changed = false; - return changed; -}; - -//set standard filters -Filter.prototype.setFilter = function(field, type, value){ - var self = this; - - self.filterList = []; - - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value}]; - } - - self.addFilter(field); - -}; - -//add filter to array -Filter.prototype.addFilter = function(field, type, value){ - var self = this; - - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value}]; - } - - field.forEach(function(filter){ - - filter = self.findFilter(filter); - - if(filter){ - self.filterList.push(filter); - - self.changed = true; - } - }); - - if(this.table.options.persistentFilter && this.table.modExists("persistence", true)){ - this.table.modules.persistence.save("filter"); - } - -}; - -Filter.prototype.findFilter = function(filter){ - var self = this, - column; - - if(Array.isArray(filter)){ - return this.findSubFilters(filter); - } - - - var filterFunc = false; - - if(typeof filter.field == "function"){ - filterFunc = function(data){ - return filter.field(data, filter.type || {})// pass params to custom filter function - } - }else{ - - if(self.filters[filter.type]){ - - column = self.table.columnManager.getColumnByField(filter.field); - - if(column){ - filterFunc = function(data){ - return self.filters[filter.type](filter.value, column.getFieldValue(data)); - } - }else{ - filterFunc = function(data){ - return self.filters[filter.type](filter.value, data[filter.field]); - } - } - - - }else{ - console.warn("Filter Error - No such filter type found, ignoring: ", filter.type); - } - } - - - filter.func = filterFunc; - - - - return filter.func ? filter : false; -}; - -Filter.prototype.findSubFilters = function(filters){ - var self = this, - output = []; - - filters.forEach(function(filter){ - filter = self.findFilter(filter); - - if(filter){ - output.push(filter); - } - }); - - return output.length ? output : false; -} - - -//get all filters -Filter.prototype.getFilters = function(all, ajax){ - var self = this, - output = []; - - if(all){ - output = self.getHeaderFilters(); - } - - self.filterList.forEach(function(filter){ - output.push({field:filter.field, type:filter.type, value:filter.value}); - }); - - if(ajax){ - output.forEach(function(item){ - if(typeof item.type == "function"){ - item.type = "function"; - } - }) - } - - return output; -}; - -//get all filters -Filter.prototype.getHeaderFilters = function(){ - var self = this, - output = []; - - for(var key in this.headerFilters){ - output.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value}); - } - - return output; -}; - -//remove filter from array -Filter.prototype.removeFilter = function(field, type, value){ - var self = this; - - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value}]; - } - - field.forEach(function(filter){ - var index = -1; - - if(typeof filter.field == "object"){ - index = self.filterList.findIndex(function(element){ - return filter === element; - }); - }else{ - index = self.filterList.findIndex(function(element){ - return filter.field === element.field && filter.type === element.type && filter.value === element.value - }); - } - - if(index > -1){ - self.filterList.splice(index, 1); - self.changed = true; - }else{ - console.warn("Filter Error - No matching filter type found, ignoring: ", filter.type); - } - - }); - - if(this.table.options.persistentFilter && this.table.modExists("persistence", true)){ - this.table.modules.persistence.save("filter"); - } - -}; - -//clear filters -Filter.prototype.clearFilter = function(all){ - this.filterList = []; - - if(all){ - this.clearHeaderFilter(); - } - - this.changed = true; - - if(this.table.options.persistentFilter && this.table.modExists("persistence", true)){ - this.table.modules.persistence.save("filter"); - } -}; - -//clear header filters -Filter.prototype.clearHeaderFilter = function(){ - var self = this; - - this.headerFilters = {}; - - this.headerFilterColumns.forEach(function(column){ - column.modules.filter.value = null; - self.reloadHeaderFilter(column); - }); - - this.changed = true; -}; - -//search data and return matching rows -Filter.prototype.search = function (searchType, field, type, value){ - var self = this, - activeRows = [], - filterList = []; - - if(!Array.isArray(field)){ - field = [{field:field, type:type, value:value}]; - } - - field.forEach(function(filter){ - filter = self.findFilter(filter); - - if(filter){ - filterList.push(filter); - } - }); - - this.table.rowManager.rows.forEach(function(row){ - var match = true; - - filterList.forEach(function(filter){ - if(!self.filterRecurse(filter, row.getData())){ - match = false; - } - }); - - if(match){ - activeRows.push(searchType === "data" ? row.getData("data") : row.getComponent()); - } - - }); - - return activeRows; -}; - -//filter row array -Filter.prototype.filter = function(rowList, filters){ - var self = this, - activeRows = [], - activeRowComponents = []; - - if(self.table.options.dataFiltering){ - self.table.options.dataFiltering.call(self.table, self.getFilters()); - } - - if(!self.table.options.ajaxFiltering && (self.filterList.length || Object.keys(self.headerFilters).length)){ - - rowList.forEach(function(row){ - if(self.filterRow(row)){ - activeRows.push(row); - } - }); - - }else{ - activeRows = rowList.slice(0); - } - - if(self.table.options.dataFiltered){ - - activeRows.forEach(function(row){ - activeRowComponents.push(row.getComponent()); - }); - - self.table.options.dataFiltered.call(self.table, self.getFilters(), activeRowComponents); - } - - return activeRows; - -}; - -//filter individual row -Filter.prototype.filterRow = function(row, filters){ - var self = this, - match = true, - data = row.getData(); - - self.filterList.forEach(function(filter){ - if(!self.filterRecurse(filter, data)){ - match = false; - } - }); - - - for(var field in self.headerFilters){ - if(!self.headerFilters[field].func(data)){ - match = false; - } - } - - return match; -}; - -Filter.prototype.filterRecurse = function(filter, data){ - var self = this, - match = false; - - if(Array.isArray(filter)){ - filter.forEach(function(subFilter){ - if(self.filterRecurse(subFilter, data)){ - match = true; - } - }); - }else{ - match = filter.func(data); - } - - return match; -}; - - - -//list of available filters -Filter.prototype.filters ={ - - //equal to - "=":function(filterVal, rowVal){ - return rowVal == filterVal ? true : false; - }, - - //less than - "<":function(filterVal, rowVal){ - return rowVal < filterVal ? true : false; - }, - - //less than or equal to - "<=":function(filterVal, rowVal){ - return rowVal <= filterVal ? true : false; - }, - - //greater than - ">":function(filterVal, rowVal){ - return rowVal > filterVal ? true : false; - }, - - //greater than or equal to - ">=":function(filterVal, rowVal){ - return rowVal >= filterVal ? true : false; - }, - - //not equal to - "!=":function(filterVal, rowVal){ - return rowVal != filterVal ? true : false; - }, - - "regex":function(filterVal, rowVal){ - - if(typeof filterVal == "string"){ - filterVal = new RegExp(filterVal); - } - - return filterVal.test(rowVal); - }, - - //contains the string - "like":function(filterVal, rowVal){ - if(filterVal === null || typeof filterVal === "undefined"){ - return rowVal === filterVal ? true : false; - }else{ - if(typeof rowVal !== 'undefined' && rowVal !== null){ - return String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1 ? true : false; - } - else{ - return false; - } - } - }, - - //in array - "in":function(filterVal, rowVal){ - if(Array.isArray(filterVal)){ - return filterVal.indexOf(rowVal) > -1; - }else{ - console.warn("Filter Error - filter value is not an array:", filterVal); - return false; - } - }, -}; - -Tabulator.prototype.registerModule("filter", Filter); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/format.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/format.js deleted file mode 100644 index b76a38ca3a..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/format.js +++ /dev/null @@ -1,526 +0,0 @@ -var Format = function(table){ - this.table = table; //hold Tabulator object -}; - -//initialize column formatter -Format.prototype.initializeColumn = function(column){ - var self = this, - config = {params:column.definition.formatterParams || {}}; - - //set column formatter - switch(typeof column.definition.formatter){ - case "string": - - if(column.definition.formatter === "tick"){ - column.definition.formatter = "tickCross"; - - if(typeof config.params.crossElement == "undefined"){ - config.params.crossElement = false; - } - - console.warn("DEPRECATION WANRING - the tick formatter has been depricated, please use the tickCross formatter with the crossElement param set to false"); - } - - if(self.formatters[column.definition.formatter]){ - config.formatter = self.formatters[column.definition.formatter]; - }else{ - console.warn("Formatter Error - No such formatter found: ", column.definition.formatter); - config.formatter = self.formatters.plaintext; - } - break; - - case "function": - config.formatter = column.definition.formatter; - break; - - default: - config.formatter = self.formatters.plaintext; - break; - } - - column.modules.format = config; -}; - -Format.prototype.cellRendered = function(cell){ - if(cell.column.modules.format.renderedCallback){ - cell.column.modules.format.renderedCallback(); - } -}; - -//return a formatted value for a cell -Format.prototype.formatValue = function(cell){ - var component = cell.getComponent(), - params = typeof cell.column.modules.format.params === "function" ? cell.column.modules.format.params(component) : cell.column.modules.format.params; - - function onRendered(callback){ - cell.column.modules.format.renderedCallback = callback; - } - - return cell.column.modules.format.formatter.call(this, component, params, onRendered); -}; - - -Format.prototype.sanitizeHTML = function(value){ - if(value){ - var entityMap = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '/': '/', - '`': '`', - '=': '=' - }; - - return String(value).replace(/[&<>"'`=\/]/g, function (s) { - return entityMap[s]; - }); - }else{ - return value; - } -}; - -Format.prototype.emptyToSpace = function(value){ - return value === null || typeof value === "undefined" ? " " : value; -}; - -//get formatter for cell -Format.prototype.getFormatter = function(formatter){ - var formatter; - - switch(typeof formatter){ - case "string": - if(this.formatters[formatter]){ - formatter = this.formatters[formatter] - }else{ - console.warn("Formatter Error - No such formatter found: ", formatter); - formatter = this.formatters.plaintext; - } - break; - - case "function": - formatter = formatter; - break; - - default: - formatter = this.formatters.plaintext; - break; - } - - return formatter; - -}; - -//default data formatters -Format.prototype.formatters = { - //plain text value - plaintext:function(cell, formatterParams, onRendered){ - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - }, - - //html text value - html:function(cell, formatterParams, onRendered){ - return cell.getValue(); - }, - - //multiline text area - textarea:function(cell, formatterParams, onRendered){ - cell.getElement().style.whiteSpace = "pre-wrap"; - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - }, - - //currency formatting - money:function(cell, formatterParams, onRendered){ - var floatVal = parseFloat(cell.getValue()), - number, integer, decimal, rgx; - - var decimalSym = formatterParams.decimal || "."; - var thousandSym = formatterParams.thousand || ","; - var symbol = formatterParams.symbol || ""; - var after = !!formatterParams.symbolAfter; - var precision = typeof formatterParams.precision !== "undefined" ? formatterParams.precision : 2; - - if(isNaN(floatVal)){ - return this.emptyToSpace(this.sanitizeHTML(cell.getValue())); - } - - number = precision !== false ? floatVal.toFixed(precision) : floatVal; - number = String(number).split("."); - - integer = number[0]; - decimal = number.length > 1 ? decimalSym + number[1] : ""; - - rgx = /(\d+)(\d{3})/; - - while (rgx.test(integer)){ - integer = integer.replace(rgx, "$1" + thousandSym + "$2"); - } - - return after ? integer + decimal + symbol : symbol + integer + decimal; - }, - - //clickable anchor tag - link:function(cell, formatterParams, onRendered){ - var value = this.sanitizeHTML(cell.getValue()), - urlPrefix = formatterParams.urlPrefix || "", - label = this.emptyToSpace(value), - el = document.createElement("a"), - data; - - if(formatterParams.labelField){ - data = cell.getData(); - label = data[formatterParams.labelField]; - } - - if(formatterParams.label){ - switch(typeof formatterParams.label){ - case "string": - label = formatterParams.label; - break; - - case "function": - label = formatterParams.label(cell); - break; - } - } - - if(formatterParams.urlField){ - data = cell.getData(); - value = data[formatterParams.urlField]; - } - - if(formatterParams.url){ - switch(typeof formatterParams.url){ - case "string": - value = formatterParams.url; - break; - - case "function": - value = formatterParams.url(cell); - break; - } - } - - el.setAttribute("href", urlPrefix + value); - - if(formatterParams.target){ - el.setAttribute("target", formatterParams.target); - } - - el.innerHTML = this.emptyToSpace(label); - - return el; - }, - - //image element - image:function(cell, formatterParams, onRendered){ - var el = document.createElement("img"); - el.setAttribute("src", cell.getValue()); - - switch(typeof formatterParams.height){ - case "number": - element.style.height = formatterParams.height + "px"; - break; - - case "string": - element.style.height = formatterParams.height; - break; - } - - switch(typeof formatterParams.width){ - case "number": - element.style.width = formatterParams.width + "px"; - break; - - case "string": - element.style.width = formatterParams.width; - break; - } - - el.addEventListener("load", function(){ - cell.getRow().normalizeHeight(); - }); - - return el; - }, - - //tick or cross - tickCross:function(cell, formatterParams, onRendered){ - var value = cell.getValue(), - element = cell.getElement(), - empty = formatterParams.allowEmpty, - truthy = formatterParams.allowTruthy, - tick = typeof formatterParams.tickElement !== "undefined" ? formatterParams.tickElement : '', - cross = typeof formatterParams.crossElement !== "undefined" ? formatterParams.crossElement : ''; - - if((truthy && value) || (value === true || value === "true" || value === "True" || value === 1 || value === "1")){ - element.setAttribute("aria-checked", true); - return tick || ""; - }else{ - if(empty && (value === "null" || value === "" || value === null || typeof value === "undefined")){ - element.setAttribute("aria-checked", "mixed"); - return ""; - }else{ - element.setAttribute("aria-checked", false); - return cross || ""; - } - } - }, - - datetime:function(cell, formatterParams, onRendered){ - var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss"; - var outputFormat = formatterParams.outputFormat || "DD/MM/YYYY hh:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var value = cell.getValue(); - - var newDatetime = moment(value, inputFormat); - - if(newDatetime.isValid()){ - return newDatetime.format(outputFormat); - }else{ - - if(invalid === true){ - return value; - }else if(typeof invalid === "function"){ - return invalid(value); - }else{ - return invalid; - } - } - }, - - datetimediff: function datetime(cell, formatterParams, onRendered) { - var inputFormat = formatterParams.inputFormat || "YYYY-MM-DD hh:mm:ss"; - var invalid = typeof formatterParams.invalidPlaceholder !== "undefined" ? formatterParams.invalidPlaceholder : ""; - var suffix = typeof formatterParams.suffix !== "undefined" ? formatterParams.suffix : false; - var unit = typeof formatterParams.unit !== "undefined" ? formatterParams.unit : undefined; - var humanize = typeof formatterParams.humanize !== "undefined" ? formatterParams.humanize : false; - var date = typeof formatterParams.date !== "undefined" ? formatterParams.date : moment(); - var value = cell.getValue(); - - var newDatetime = moment(value, inputFormat); - - if (newDatetime.isValid()) { - if(humanize){ - return moment.duration(newDatetime.diff(date)).humanize(suffix); - }else{ - return newDatetime.diff(date, unit) + (suffix ? " " + suffix : ""); - } - - } else { - - if (invalid === true) { - return value; - } else if (typeof invalid === "function") { - return invalid(value); - } else { - return invalid; - } - } - }, - - //select - lookup: function (cell, formatterParams, onRendered) { - var value = cell.getValue(); - - if (typeof formatterParams[value] === "undefined") { - console.warn('Missing display value for ' + value); - return value; - } - - return formatterParams[value]; - }, - - //star rating - star:function(cell, formatterParams, onRendered){ - var value = cell.getValue(), - element = cell.getElement(), - maxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5, - stars = document.createElement("span"), - star = document.createElementNS('http://www.w3.org/2000/svg', "svg"), - starActive = '', - starInactive = ''; - - //style stars holder - stars.style.verticalAlign = "middle"; - - //style star - star.setAttribute("width", "14"); - star.setAttribute("height", "14"); - star.setAttribute("viewBox", "0 0 512 512"); - star.setAttribute("xml:space", "preserve"); - star.style.padding = "0 1px"; - - value = parseInt(value) < maxStars ? parseInt(value) : maxStars; - - for(var i=1;i<= maxStars;i++){ - var nextStar = star.cloneNode(true); - nextStar.innerHTML = i <= value ? starActive : starInactive; - - stars.appendChild(nextStar); - } - - element.style.whiteSpace = "nowrap"; - element.style.overflow = "hidden"; - element.style.textOverflow = "ellipsis"; - - element.setAttribute("aria-label", value); - - return stars; - }, - - //progress bar - progress:function(cell, formatterParams, onRendered){ //progress bar - var value = this.sanitizeHTML(cell.getValue()) || 0, - element = cell.getElement(), - max = formatterParams && formatterParams.max ? formatterParams.max : 100, - min = formatterParams && formatterParams.min ? formatterParams.min : 0, - legendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : "center", - percent, percentValue, color, legend, legendColor, top, left, right, bottom; - - //make sure value is in range - percentValue = parseFloat(value) <= max ? parseFloat(value) : max; - percentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min; - - //workout percentage - percent = (max - min) / 100; - percentValue = Math.round((percentValue - min) / percent); - - //set bar color - switch(typeof formatterParams.color){ - case "string": - color = formatterParams.color; - break; - case "function": - color = formatterParams.color(value); - break; - case "object": - if(Array.isArray(formatterParams.color)){ - var unit = 100 / formatterParams.color.length; - var index = Math.floor(percentValue / unit); - - index = Math.min(index, formatterParams.color.length - 1); - index = Math.max(index, 0); - color = formatterParams.color[index]; - break; - } - default: - color = "#2DC214"; - } - - //generate legend - switch(typeof formatterParams.legend){ - case "string": - legend = formatterParams.legend; - break; - case "function": - legend = formatterParams.legend(value); - break; - case "boolean": - legend = value; - break; - default: - legend = false; - } - - //set legend color - switch(typeof formatterParams.legendColor){ - case "string": - legendColor = formatterParams.legendColor; - break; - case "function": - legendColor = formatterParams.legendColor(value); - break; - case "object": - if(Array.isArray(formatterParams.legendColor)){ - var unit = 100 / formatterParams.legendColor.length; - var index = Math.floor(percentValue / unit); - - index = Math.min(index, formatterParams.legendColor.length - 1); - index = Math.max(index, 0); - legendColor = formatterParams.legendColor[index]; - } - break; - default: - legendColor = "#000"; - } - - element.style.minWidth = "30px"; - element.style.position = "relative"; - - element.setAttribute("aria-label", percentValue); - - return "
" + (legend ? "
" + legend + "
" : ""); - }, - - //background color - color:function(cell, formatterParams, onRendered){ - cell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue()); - return ""; - }, - - //tick icon - buttonTick:function(cell, formatterParams, onRendered){ - return ''; - }, - - //cross icon - buttonCross:function(cell, formatterParams, onRendered){ - return ''; - }, - - //current row number - rownum:function(cell, formatterParams, onRendered){ - return this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1; - }, - - //row handle - handle:function(cell, formatterParams, onRendered){ - cell.getElement().classList.add("tabulator-row-handle"); - return "
"; - }, - - responsiveCollapse:function(cell, formatterParams, onRendered){ - var self = this, - open = false, - el = document.createElement("div"); - - function toggleList(isOpen){ - var collapse = cell.getRow().getElement().getElementsByClassName("tabulator-responsive-collapse")[0]; - - open = isOpen; - - if(open){ - el.classList.add("open"); - if(collapse){ - collapse.style.display = ''; - } - }else{ - el.classList.remove("open"); - if(collapse){ - collapse.style.display = 'none'; - } - } - } - - el.classList.add("tabulator-responsive-collapse-toggle"); - el.innerHTML = "+-"; - - cell.getElement().classList.add("tabulator-row-handle"); - - if(self.table.options.responsiveLayoutCollapseStartOpen){ - open = true; - } - - el.addEventListener("click", function(){ - toggleList(!open); - }); - - toggleList(open); - - return el; - }, -}; - -Tabulator.prototype.registerModule("format", Format); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/frozen_columns.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/frozen_columns.js deleted file mode 100644 index f9fecfae56..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/frozen_columns.js +++ /dev/null @@ -1,160 +0,0 @@ -var FrozenColumns = function(table){ - this.table = table; //hold Tabulator object - this.leftColumns = []; - this.rightColumns = []; - this.leftMargin = 0; - this.rightMargin = 0; - this.initializationMode = "left"; - this.active = false; -}; - -//reset initial state -FrozenColumns.prototype.reset = function(){ - this.initializationMode = "left"; - this.leftColumns = []; - this.rightColumns = []; - this.active = false; -}; - -//initialize specific column -FrozenColumns.prototype.initializeColumn = function(column){ - var config = {margin:0, edge:false}; - - if(column.definition.frozen){ - - if(!column.parent.isGroup){ - - - if(!column.isGroup){ - config.position = this.initializationMode; - - if(this.initializationMode == "left"){ - this.leftColumns.push(column); - }else{ - this.rightColumns.unshift(column); - } - - this.active = true; - - column.modules.frozen = config; - }else{ - console.warn("Frozen Column Error - Column Groups cannot be frozen"); - } - }else{ - console.warn("Frozen Column Error - Grouped columns cannot be frozen"); - } - - }else{ - this.initializationMode = "right"; - } -}; - -//layout columns appropropriatly -FrozenColumns.prototype.layout = function(){ - var self = this, - tableHolder = this.table.rowManager.element, - rightMargin = 0; - - if(self.active){ - - //calculate row padding - - self.leftMargin = self._calcSpace(self.leftColumns, self.leftColumns.length); - self.table.columnManager.headersElement.style.marginLeft = self.leftMargin + "px"; - - self.rightMargin = self._calcSpace(self.rightColumns, self.rightColumns.length); - self.table.columnManager.element.style.paddingRight = self.rightMargin + "px"; - - self.table.rowManager.activeRows.forEach(function(row){ - self.layoutRow(row); - }); - - if(self.table.modExists("columnCalcs")){ - if(self.table.modules.columnCalcs.topInitialized && self.table.modules.columnCalcs.topRow){ - self.layoutRow(self.table.modules.columnCalcs.topRow); - } - if(self.table.modules.columnCalcs.botInitialized && self.table.modules.columnCalcs.botRow){ - self.layoutRow(self.table.modules.columnCalcs.botRow); - } - } - - //calculate left columns - self.leftColumns.forEach(function(column, i){ - column.modules.frozen.margin = self._calcSpace(self.leftColumns, i) + self.table.columnManager.scrollLeft; - - if(i == self.leftColumns.length - 1){ - column.modules.frozen.edge = true; - }else{ - column.modules.frozen.edge = false; - } - - self.layoutColumn(column); - }); - - //calculate right frozen columns - rightMargin = self.table.rowManager.element.clientWidth + self.table.columnManager.scrollLeft; - - // if(tableHolder.scrollHeight > tableHolder.clientHeight){ - // rightMargin -= tableHolder.offsetWidth - tableHolder.clientWidth; - // } - - self.rightColumns.forEach(function(column, i){ - column.modules.frozen.margin = rightMargin - self._calcSpace(self.rightColumns, i + 1); - - if(i == self.rightColumns.length - 1){ - column.modules.frozen.edge = true; - }else{ - column.modules.frozen.edge = false; - } - - self.layoutColumn(column); - }); - - this.table.rowManager.tableElement.style.marginRight = this.rightMargin + "px"; - } -}; - -FrozenColumns.prototype.layoutColumn = function(column){ - var self = this; - - self.layoutElement(column.getElement(), column); - - column.cells.forEach(function(cell){ - self.layoutElement(cell.getElement(), column); - }); -}; - -FrozenColumns.prototype.layoutRow = function(row){ - var rowEl = row.getElement(); - - rowEl.style.paddingLeft = this.leftMargin + "px"; - // rowEl.style.paddingRight = this.rightMargin + "px"; -}; - -FrozenColumns.prototype.layoutElement = function(element, column){ - - if(column.modules.frozen){ - element.style.position = "absolute"; - element.style.left = column.modules.frozen.margin + "px"; - - element.classList.add("tabulator-frozen"); - - if(column.modules.frozen.edge){ - element.classList.add("tabulator-frozen-" + column.modules.frozen.position); - } - } -}; - -FrozenColumns.prototype._calcSpace = function(columns, index){ - var width = 0; - - for (let i = 0; i < index; i++){ - if(columns[i].visible){ - width += columns[i].getWidth(); - } - } - - return width; -}; - -Tabulator.prototype.registerModule("frozenColumns", FrozenColumns); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/frozen_rows.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/frozen_rows.js deleted file mode 100644 index 5dbf7cc3b3..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/frozen_rows.js +++ /dev/null @@ -1,99 +0,0 @@ -var FrozenRows = function(table){ - this.table = table; //hold Tabulator object - this.topElement = document.createElement("div"); - this.rows = []; - this.displayIndex = 0; //index in display pipeline -}; - -FrozenRows.prototype.initialize = function(){ - this.rows = []; - - this.topElement.classList.add("tabulator-frozen-rows-holder"); - - // this.table.columnManager.element.append(this.topElement); - this.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling); -}; - -FrozenRows.prototype.setDisplayIndex = function(index){ - this.displayIndex = index; -}; - -FrozenRows.prototype.getDisplayIndex = function(){ - return this.displayIndex; -}; - -FrozenRows.prototype.isFrozen = function(){ - return !!this.rows.length; -}; - -//filter frozen rows out of display data -FrozenRows.prototype.getRows = function(rows){ - var self = this, - frozen = [], - output = rows.slice(0); - - this.rows.forEach(function(row){ - var index = output.indexOf(row); - - if(index > -1){ - output.splice(index, 1); - } - }); - - return output; -}; - -FrozenRows.prototype.freezeRow = function(row){ - if(!row.modules.frozen){ - row.modules.frozen = true; - this.topElement.appendChild(row.getElement()); - row.initialize(); - row.normalizeHeight(); - this.table.rowManager.adjustTableSize(); - - this.rows.push(row); - - this.table.rowManager.refreshActiveData("display"); - - this.styleRows(); - - }else{ - console.warn("Freeze Error - Row is already frozen"); - } -}; - -FrozenRows.prototype.unfreezeRow = function(row){ - var index = this.rows.indexOf(row); - - if(row.modules.frozen){ - - row.modules.frozen = false; - - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - - this.table.rowManager.adjustTableSize(); - - this.rows.splice(index, 1); - - this.table.rowManager.refreshActiveData("display"); - - if(this.rows.length){ - this.styleRows(); - } - - }else{ - console.warn("Freeze Error - Row is already unfrozen"); - } -}; - -FrozenRows.prototype.styleRows = function(row){ - var self = this; - - this.rows.forEach(function(row, i){ - self.table.rowManager.styleRow(row, i); - }); -} - - -Tabulator.prototype.registerModule("frozenRows", FrozenRows); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/group_rows.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/group_rows.js deleted file mode 100644 index 9efa3480b9..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/group_rows.js +++ /dev/null @@ -1,995 +0,0 @@ - - -//public group object -var GroupComponent = function (group){ - this._group = group; - this.type = "GroupComponent"; -}; - -GroupComponent.prototype.getKey = function(){ - return this._group.key; -}; - -GroupComponent.prototype.getElement = function(){ - return this._group.element; -}; - -GroupComponent.prototype.getRows = function(){ - return this._group.getRows(true); -}; - -GroupComponent.prototype.getSubGroups = function(){ - return this._group.getSubGroups(true); -}; - -GroupComponent.prototype.getParentGroup = function(){ - return this._group.parent ? this._group.parent.getComponent() : false; -}; - -GroupComponent.prototype.getVisibility = function(){ - return this._group.visible; -}; - -GroupComponent.prototype.show = function(){ - this._group.show(); -}; - -GroupComponent.prototype.hide = function(){ - this._group.hide(); -}; - -GroupComponent.prototype.toggle = function(){ - this._group.toggleVisibility(); -}; - -GroupComponent.prototype._getSelf = function(){ - return this._group; -}; - -GroupComponent.prototype.getTable = function(){ - return this._group.table; -}; - -////////////////////////////////////////////////// -//////////////// Group Functions ///////////////// -////////////////////////////////////////////////// - -var Group = function(groupManager, parent, level, key, field, generator, oldGroup){ - - this.groupManager = groupManager; - this.parent = parent; - this.key = key; - this.level = level; - this.field = field; - this.hasSubGroups = level < (groupManager.groupIDLookups.length - 1); - this.addRow = this.hasSubGroups ? this._addRowToGroup : this._addRow; - this.type = "group"; //type of element - this.old = oldGroup; - this.rows = []; - this.groups = []; - this.groupList = []; - this.generator = generator; - this.elementContents = false; - this.height = 0; - this.outerHeight = 0; - this.initialized = false; - this.calcs = {}; - this.initialized = false; - this.modules = {}; - - this.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== "undefined" ? groupManager.startOpen[level] : groupManager.startOpen[0]); - - this.createElements(); - this.addBindings(); - - this.createValueGroups(); -}; - -Group.prototype.createElements = function(){ - this.element = document.createElement("div"); - this.element.classList.add("tabulator-row"); - this.element.classList.add("tabulator-group"); - this.element.classList.add("tabulator-group-level-" + this.level); - this.element.setAttribute("role", "rowgroup"); - - this.arrowElement = document.createElement("div"); - this.arrowElement.classList.add("tabulator-arrow"); -}; - -Group.prototype.createValueGroups = function(){ - var level = this.level + 1; - if(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){ - this.groupManager.allowedValues[level].forEach((value) => { - this._createGroup(value, level); - }); - } -}; - -Group.prototype.addBindings = function(){ - var self = this, - dblTap, tapHold, tap, toggleElement; - - - //handle group click events - if (self.groupManager.table.options.groupClick){ - self.element.addEventListener("click", function(e){ - self.groupManager.table.options.groupClick(e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupDblClick){ - self.element.addEventListener("dblclick", function(e){ - self.groupManager.table.options.groupDblClick(e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupContext){ - self.element.addEventListener("contextmenu", function(e){ - self.groupManager.table.options.groupContext(e, self.getComponent()); - }); - } - - if (self.groupManager.table.options.groupTap){ - - tap = false; - - self.element.addEventListener("touchstart", function(e){ - tap = true; - }); - - self.element.addEventListener("touchend", function(e){ - if(tap){ - self.groupManager.table.options.groupTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (self.groupManager.table.options.groupDblTap){ - - dblTap = null; - - self.element.addEventListener("touchend", function(e){ - - if(dblTap){ - clearTimeout(dblTap); - dblTap = null; - - self.groupManager.table.options.groupDblTap(e, self.getComponent()); - }else{ - - dblTap = setTimeout(function(){ - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - - }); - } - - - if (self.groupManager.table.options.groupTapHold){ - - tapHold = null; - - self.element.addEventListener("touchstart", function(e){ - clearTimeout(tapHold); - - tapHold = setTimeout(function(){ - clearTimeout(tapHold); - tapHold = null; - tap = false; - self.groupManager.table.options.groupTapHold(e, self.getComponent()); - }, 1000); - - }); - - self.element.addEventListener("touchend", function(e){ - clearTimeout(tapHold); - tapHold = null; - }); - } - - - - if(self.groupManager.table.options.groupToggleElement){ - toggleElement = self.groupManager.table.options.groupToggleElement == "arrow" ? self.arrowElement : self.element; - - toggleElement.addEventListener("click", function(e){ - e.stopPropagation(); - e.stopImmediatePropagation(); - self.toggleVisibility(); - }); - } - -}; - - -Group.prototype._createGroup = function(groupID, level){ - var groupKey = level + "_" + groupID; - var group = new Group(this.groupManager, this, level, groupID, this.groupManager.groupIDLookups[level].field, this.groupManager.headerGenerator[level] || this.groupManager.headerGenerator[0], this.old ? this.old.groups[groupKey] : false); - - this.groups[groupKey] = group; - this.groupList.push(group); -}; - -Group.prototype._addRowToGroup = function(row){ - - var level = this.level + 1; - - if(this.hasSubGroups){ - var groupID = this.groupManager.groupIDLookups[level].func(row.getData()), - groupKey = level + "_" + groupID; - - if(this.groupManager.allowedValues && this.groupManager.allowedValues[level]){ - if(this.groups[groupKey]){ - this.groups[groupKey].addRow(row); - } - }else{ - if(!this.groups[groupKey]){ - this._createGroup(groupID, level); - } - - this.groups[groupKey].addRow(row); - } - } -}; - -Group.prototype._addRow = function(row){ - this.rows.push(row); - row.modules.group = this; -}; - -Group.prototype.insertRow = function(row, to, after){ - var data = this.conformRowData({}); - - row.updateData(data); - - var toIndex = this.rows.indexOf(to); - - if(toIndex > -1){ - if(after){ - this.rows.splice(toIndex+1, 0, row); - }else{ - this.rows.splice(toIndex, 0, row); - } - }else{ - if(after){ - this.rows.push(row); - }else{ - this.rows.unshift(row); - } - } - - row.modules.group = this; - - this.generateGroupHeaderContents(); - - if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){ - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } -}; - -Group.prototype.getRowIndex = function(row){ - -}; - -//update row data to match grouping contraints -Group.prototype.conformRowData = function(data){ - if(this.field){ - data[this.field] = this.key; - }else{ - console.warn("Data Conforming Error - Cannot conform row data to match new group as groupBy is a function"); - } - - if(this.parent){ - data = this.parent.conformRowData(data); - } - - return data; -}; - - - -Group.prototype.removeRow = function(row){ - var index = this.rows.indexOf(row); - - if(index > -1){ - this.rows.splice(index, 1); - } - - if(!this.rows.length){ - if(this.parent){ - this.parent.removeGroup(this); - }else{ - this.groupManager.removeGroup(this); - } - - this.groupManager.updateGroupRows(true); - }else{ - this.generateGroupHeaderContents(); - if(this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.options.columnCalcs != "table"){ - this.groupManager.table.modules.columnCalcs.recalcGroup(this); - } - } -}; - -Group.prototype.removeGroup = function(group){ - var groupKey = group.level + "_" + group.key, - index; - - if(this.groups[groupKey]){ - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if(index > -1){ - this.groupList.splice(index, 1); - } - - if(!this.groupList.length){ - if(this.parent){ - this.parent.removeGroup(this); - }else{ - this.groupManager.removeGroup(this); - } - } - } -}; - -Group.prototype.getHeadersAndRows = function(){ - var output = []; - - output.push(this); - - this._visSet(); - - if(this.visible){ - - if(this.groupList.length){ - this.groupList.forEach(function(group){ - output = output.concat(group.getHeadersAndRows()); - }); - - }else{ - if(this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasTopCalcs()){ - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - - output = output.concat(this.rows); - - if(this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.modExists("columnCalcs") && this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){ - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - }else{ - if(!this.groupList.length && this.groupManager.table.options.columnCalcs != "table" && this.groupManager.table.options.groupClosedShowCalcs){ - if(this.groupManager.table.modExists("columnCalcs")){ - if(this.groupManager.table.modules.columnCalcs.hasTopCalcs()){ - this.calcs.top = this.groupManager.table.modules.columnCalcs.generateTopRow(this.rows); - output.push(this.calcs.top); - } - - if(this.groupManager.table.modules.columnCalcs.hasBottomCalcs()){ - this.calcs.bottom = this.groupManager.table.modules.columnCalcs.generateBottomRow(this.rows); - output.push(this.calcs.bottom); - } - } - } - } - - return output; -}; - -Group.prototype.getData = function(visible, transform){ - var self = this, - output = []; - - this._visSet(); - - if(!visible || (visible && this.visible)){ - this.rows.forEach(function(row){ - output.push(row.getData(transform || "data")); - }); - } - - return output; -}; - -// Group.prototype.getRows = function(){ -// this._visSet(); - -// return this.visible ? this.rows : []; -// }; - -Group.prototype.getRowCount = function(){ - var count = 0; - - if(this.groupList.length){ - this.groupList.forEach(function(group){ - count += group.getRowCount(); - }); - }else{ - count = this.rows.length; - } - return count; -}; - -Group.prototype.toggleVisibility = function(){ - if(this.visible){ - this.hide(); - }else{ - this.show(); - } -}; - -Group.prototype.hide = function(){ - this.visible = false; - - if(this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination){ - - this.element.classList.remove("tabulator-group-visible"); - - if(this.groupList.length){ - this.groupList.forEach(function(group){ - - var el; - - if(group.calcs.top){ - el = group.calcs.top.getElement(); - el.parentNode.removeChild(el); - } - - if(group.calcs.bottom){ - el = group.calcs.bottom.getElement(); - el.parentNode.removeChild(el); - } - - var rows = group.getHeadersAndRows(); - - rows.forEach(function(row){ - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - }); - }); - - }else{ - this.rows.forEach(function(row){ - var rowEl = row.getElement(); - rowEl.parentNode.removeChild(rowEl); - }); - } - - this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex()); - - }else{ - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), false); -}; - -Group.prototype.show = function(){ - var self = this; - - self.visible = true; - - if(this.groupManager.table.rowManager.getRenderMode() == "classic" && !this.groupManager.table.options.pagination){ - - this.element.classList.add("tabulator-group-visible"); - - var prev = self.getElement(); - - if(this.groupList.length){ - this.groupList.forEach(function(group){ - var rows = group.getHeadersAndRows(); - - rows.forEach(function(row){ - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - }); - - }else{ - self.rows.forEach(function(row){ - var rowEl = row.getElement(); - prev.parentNode.insertBefore(rowEl, prev.nextSibling); - row.initialize(); - prev = rowEl; - }); - } - - this.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex()); - }else{ - this.groupManager.updateGroupRows(true); - } - - this.groupManager.table.options.groupVisibilityChanged.call(this.table, this.getComponent(), true); -}; - -Group.prototype._visSet = function(){ - var data = []; - - if(typeof this.visible == "function"){ - - this.rows.forEach(function(row){ - data.push(row.getData()); - }); - - this.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent()); - } -}; - -Group.prototype.getRowGroup = function(row){ - var match = false; - if(this.groupList.length){ - this.groupList.forEach(function(group){ - var result = group.getRowGroup(row); - - if(result){ - match = result; - } - }); - }else{ - if(this.rows.find(function(item){ - return item === row; - })){ - match = this; - } - } - - return match; -}; - -Group.prototype.getSubGroups = function(component){ - var output = []; - - this.groupList.forEach(function(child){ - output.push(component ? child.getComponent() : child); - }); - - return output; -}; - -Group.prototype.getRows = function(compoment){ - var output = []; - - this.rows.forEach(function(row){ - output.push(compoment ? row.getComponent() : row); - }); - - return output; -}; - -Group.prototype.generateGroupHeaderContents = function(){ - var data = []; - - this.rows.forEach(function(row){ - data.push(row.getData()); - }); - - this.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent()); - - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - - if(typeof this.elementContents === "string"){ - this.element.innerHTML = this.elementContents; - }else{ - this.element.appendChild(this.elementContents); - } - - this.element.insertBefore(this.arrowElement, this.element.firstChild); -}; - -////////////// Standard Row Functions ////////////// - -Group.prototype.getElement = function(){ - this.addBindingsd = false; - - this._visSet(); - - - if(this.visible){ - this.element.classList.add("tabulator-group-visible"); - }else{ - this.element.classList.remove("tabulator-group-visible"); - } - - this.element.childNodes.forEach(function(child){ - child.parentNode.removeChild(child); - }); - - this.generateGroupHeaderContents(); - - // this.addBindings(); - - return this.element; -}; - -//normalize the height of elements in the row -Group.prototype.normalizeHeight = function(){ - this.setHeight(this.element.clientHeight); -}; - -Group.prototype.initialize = function(force){ - if(!this.initialized || force){ - this.normalizeHeight(); - this.initialized = true; - } -}; - -Group.prototype.reinitialize = function(){ - this.initialized = false; - this.height = 0; - - if(Tabulator.prototype.helpers.elVisible(this.element)){ - this.initialize(true); - } -}; - -Group.prototype.setHeight = function(height){ - if(this.height != height){ - this.height = height; - this.outerHeight = this.element.offsetHeight; - } -}; - -//return rows outer height -Group.prototype.getHeight = function(){ - return this.outerHeight; -}; - -Group.prototype.getGroup = function(){ - return this; -}; - -Group.prototype.reinitializeHeight = function(){ -}; -Group.prototype.calcHeight = function(){ -}; -Group.prototype.setCellHeight = function(){ -}; -Group.prototype.clearCellHeight = function(){ -}; - - -//////////////// Object Generation ///////////////// -Group.prototype.getComponent = function(){ - return new GroupComponent(this); -}; - -////////////////////////////////////////////////// -////////////// Group Row Extension /////////////// -////////////////////////////////////////////////// - -var GroupRows = function(table){ - - this.table = table; //hold Tabulator object - - this.groupIDLookups = false; //enable table grouping and set field to group by - this.startOpen = [function(){return false;}]; //starting state of group - this.headerGenerator = [function(){return "";}]; - this.groupList = []; //ordered list of groups - this.allowedValues = false; - this.groups = {}; //hold row groups - this.displayIndex = 0; //index in display pipeline -}; - -//initialize group configuration -GroupRows.prototype.initialize = function(){ - var self = this, - groupBy = self.table.options.groupBy, - startOpen = self.table.options.groupStartOpen, - groupHeader = self.table.options.groupHeader; - - this.allowedValues = self.table.options.groupValues; - - self.headerGenerator = [function(){return "";}]; - this.startOpen = [function(){return false;}]; //starting state of group - - self.table.modules.localize.bind("groups|item", function(langValue, lang){ - self.headerGenerator[0] = function(value, count, data){ //header layout function - return (typeof value === "undefined" ? "" : value) + "(" + count + " " + ((count === 1) ? langValue : lang.groups.items) + ")"; - }; - }); - - this.groupIDLookups = []; - - if(Array.isArray(groupBy) || groupBy){ - if(this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "table" && this.table.options.columnCalcs != "both"){ - this.table.modules.columnCalcs.removeCalcs(); - } - }else{ - if(this.table.modExists("columnCalcs") && this.table.options.columnCalcs != "group"){ - - var cols = this.table.columnManager.getRealColumns(); - - cols.forEach(function(col){ - if(col.definition.topCalc){ - self.table.modules.columnCalcs.initializeTopRow(); - } - - if(col.definition.bottomCalc){ - self.table.modules.columnCalcs.initializeBottomRow(); - } - }); - } - } - - - - if(!Array.isArray(groupBy)){ - groupBy = [groupBy]; - } - - groupBy.forEach(function(group, i){ - var lookupFunc, column; - - if(typeof group == "function"){ - lookupFunc = group; - }else{ - column = self.table.columnManager.getColumnByField(group); - - if(column){ - lookupFunc = function(data){ - return column.getFieldValue(data); - }; - }else{ - lookupFunc = function(data){ - return data[group]; - }; - } - } - - self.groupIDLookups.push({ - field: typeof group === "function" ? false : group, - func:lookupFunc, - values:self.allowedValues ? self.allowedValues[i] : false, - }); - }); - - - - if(startOpen){ - - if(!Array.isArray(startOpen)){ - startOpen = [startOpen]; - } - - startOpen.forEach(function(level){ - level = typeof level == "function" ? level : function(){return true;}; - }); - - self.startOpen = startOpen; - } - - if(groupHeader){ - self.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader]; - } - - this.initialized = true; - -}; - -GroupRows.prototype.setDisplayIndex = function(index){ - this.displayIndex = index; -}; - -GroupRows.prototype.getDisplayIndex = function(){ - return this.displayIndex; -}; - - -//return appropriate rows with group headers -GroupRows.prototype.getRows = function(rows){ - if(this.groupIDLookups.length){ - - this.table.options.dataGrouping.call(this.table); - - this.generateGroups(rows); - - if(this.table.options.dataGrouped){ - this.table.options.dataGrouped.call(this.table, this.getGroups(true)); - } - - return this.updateGroupRows(); - - }else{ - return rows.slice(0); - } - -}; - -GroupRows.prototype.getGroups = function(compoment){ - var groupComponents = []; - - this.groupList.forEach(function(group){ - groupComponents.push(compoment ? group.getComponent() : group); - }); - - return groupComponents; -}; - -GroupRows.prototype.pullGroupListData = function(groupList) { - var self = this; - var groupListData = []; - - groupList.forEach( function(group) { - var groupHeader = {}; - groupHeader.level = 0; - groupHeader.rowCount = 0; - groupHeader.headerContent = ""; - var childData = []; - - if (group.hasSubGroups) { - childData = self.pullGroupListData(group.groupList); - - groupHeader.level = group.level; - groupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers - groupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group); - - groupListData.push(groupHeader); - groupListData = groupListData.concat(childData); - } - - else { - groupHeader.level = group.level; - groupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group); - groupHeader.rowCount = group.getRows().length; - - groupListData.push(groupHeader); - - group.getRows().forEach( function(row) { - groupListData.push(row.getData("data")); - }); - } - }); - - return groupListData -}; - -GroupRows.prototype.getGroupedData = function(){ - - return this.pullGroupListData(this.groupList); -}; - -GroupRows.prototype.getRowGroup = function(row){ - var match = false; - - this.groupList.forEach(function(group){ - var result = group.getRowGroup(row); - - if(result){ - match = result; - } - }); - - return match; -}; - -GroupRows.prototype.countGroups = function(){ - return this.groupList.length; -}; - -GroupRows.prototype.generateGroups = function(rows){ - var self = this, - oldGroups = self.groups; - - self.groups = {}; - self.groupList =[]; - - if(this.allowedValues && this.allowedValues[0]){ - this.allowedValues[0].forEach(function(value){ - self.createGroup(value, 0, oldGroups); - }); - - rows.forEach(function(row){ - self.assignRowToExistingGroup(row, oldGroups); - }); - }else{ - rows.forEach(function(row){ - self.assignRowToGroup(row, oldGroups); - }); - } - -}; - -GroupRows.prototype.createGroup = function(groupID, level, oldGroups){ - var groupKey = level + "_" + groupID, - group; - - oldGroups = oldGroups || []; - - group = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]); - - this.groups[groupKey] = group; - this.groupList.push(group); -}; - -GroupRows.prototype.assignRowToGroup = function(row, oldGroups){ - var groupID = this.groupIDLookups[0].func(row.getData()), - groupKey = "0_" + groupID; - - if(!this.groups[groupKey]){ - this.createGroup(groupID, 0, oldGroups); - } - - this.groups[groupKey].addRow(row); -}; - -GroupRows.prototype.assignRowToExistingGroup = function(row, oldGroups){ - var groupID = this.groupIDLookups[0].func(row.getData()), - groupKey = "0_" + groupID; - - if(this.groups[groupKey]){ - this.groups[groupKey].addRow(row); - } -}; - - -GroupRows.prototype.assignRowToGroup = function(row, oldGroups){ - var groupID = this.groupIDLookups[0].func(row.getData()), - newGroupNeeded = !this.groups["0_" + groupID]; - - if(newGroupNeeded){ - this.createGroup(groupID, 0, oldGroups); - } - - this.groups["0_" + groupID].addRow(row); - - return !newGroupNeeded; -}; - - - -GroupRows.prototype.updateGroupRows = function(force){ - var self = this, - output = [], - oldRowCount; - - self.groupList.forEach(function(group){ - output = output.concat(group.getHeadersAndRows()); - }); - - //force update of table display - if(force){ - - var displayIndex = self.table.rowManager.setDisplayRows(output, this.getDisplayIndex()); - - if(displayIndex !== true){ - this.setDisplayIndex(displayIndex); - } - - self.table.rowManager.refreshActiveData("group", true, true); - } - - return output; -}; - -GroupRows.prototype.scrollHeaders = function(left){ - this.groupList.forEach(function(group){ - group.arrowElement.style.marginLeft = left + "px"; - }); -}; - -GroupRows.prototype.removeGroup = function(group){ - var groupKey = group.level + "_" + group.key, - index; - - if(this.groups[groupKey]){ - delete this.groups[groupKey]; - - index = this.groupList.indexOf(group); - - if(index > -1){ - this.groupList.splice(index, 1); - } - } -}; - -Tabulator.prototype.registerModule("groupRows", GroupRows); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/history.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/history.js deleted file mode 100644 index 17be37623a..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/history.js +++ /dev/null @@ -1,135 +0,0 @@ -var History = function(table){ - this.table = table; //hold Tabulator object - - this.history = []; - this.index = -1; -}; - - -History.prototype.clear = function(){ - this.history = []; - this.index = -1; -}; - -History.prototype.action = function(type, component, data){ - - this.history = this.history.slice(0, this.index + 1); - - this.history.push({ - type:type, - component:component, - data:data, - }); - - this.index ++; -}; - -History.prototype.getHistoryUndoSize = function(){ - return this.index + 1; -}; - -History.prototype.getHistoryRedoSize = function(){ - return this.history.length - (this.index + 1); -}; - -History.prototype.undo = function(){ - - if(this.index > -1){ - let action = this.history[this.index]; - - this.undoers[action.type].call(this, action); - - this.index--; - - this.table.options.historyUndo.call(this.table, action.type, action.component.getComponent(), action.data); - - return true; - }else{ - console.warn("History Undo Error - No more history to undo"); - return false; - } -}; - -History.prototype.redo = function(){ - if(this.history.length-1 > this.index){ - - this.index++; - - let action = this.history[this.index]; - - this.redoers[action.type].call(this, action); - - this.table.options.historyRedo.call(this.table, action.type, action.component.getComponent(), action.data); - - return true; - }else{ - console.warn("History Redo Error - No more history to redo"); - return false; - } -}; - - -History.prototype.undoers = { - cellEdit: function(action){ - action.component.setValueProcessData(action.data.oldValue); - }, - - rowAdd: function(action){ - action.component.deleteActual(); - }, - - rowDelete: function(action){ - var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index); - - this._rebindRow(action.component, newRow); - }, - - rowMove: function(action){ - this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.pos], false); - this.table.rowManager.redraw(); - }, -}; - - -History.prototype.redoers = { - cellEdit: function(action){ - action.component.setValueProcessData(action.data.newValue); - }, - - rowAdd: function(action){ - var newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index); - - this._rebindRow(action.component, newRow); - }, - - rowDelete:function(action){ - action.component.deleteActual(); - }, - - rowMove: function(action){ - this.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.pos], false); - this.table.rowManager.redraw(); - }, -}; - -//rebind rows to new element after deletion -History.prototype._rebindRow = function(oldRow, newRow){ - this.history.forEach(function(action){ - if(action.component instanceof Row){ - if(action.component === oldRow){ - action.component = newRow; - } - }else if(action.component instanceof Cell){ - if(action.component.row === oldRow){ - var field = action.component.column.getField(); - - if(field){ - action.component = newRow.getCell(field); - } - - } - } - }); -}; - -Tabulator.prototype.registerModule("history", History); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/html_table_import.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/html_table_import.js deleted file mode 100644 index b841738d97..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/html_table_import.js +++ /dev/null @@ -1,196 +0,0 @@ -var HtmlTableImport = function(table){ - this.table = table; //hold Tabulator object - this.fieldIndex = []; - this.hasIndex = false; -}; - -HtmlTableImport.prototype.parseTable = function(){ - var self = this, - element = self.table.element, - options = self.table.options, - columns = options.columns, - headers = element.getElementsByTagName("th"), - rows = element.getElementsByTagName("tbody")[0], - data = [], - newTable; - - self.hasIndex = false; - - self.table.options.htmlImporting.call(this.table); - - rows = rows ? rows.getElementsByTagName("tr") : []; - - //check for tablator inline options - self._extractOptions(element, options); - - if(headers.length){ - self._extractHeaders(headers, rows); - }else{ - self._generateBlankHeaders(headers, rows); - } - - - //iterate through table rows and build data set - for(var index = 0; index < rows.length; index++){ - var row = rows[index], - cells = row.getElementsByTagName("td"), - item = {}; - - //create index if the dont exist in table - if(!self.hasIndex){ - item[options.index] = index; - } - - for(var i = 0; i < cells.length; i++){ - var cell = cells[i]; - if(typeof this.fieldIndex[i] !== "undefined"){ - item[this.fieldIndex[i]] = cell.innerHTML; - } - } - - //add row data to item - data.push(item); - } - - //create new element - var newElement = document.createElement("div"); - - //transfer attributes to new element - var attributes = element.attributes; - - // loop through attributes and apply them on div - - for(var i in attributes){ - if(typeof attributes[i] == "object"){ - newElement.setAttribute(attributes[i].name, attributes[i].value); - } - } - - // replace table with div element - element.parentNode.replaceChild(newElement, element); - - options.data = data; - - self.table.options.htmlImported.call(this.table); - - // // newElement.tabulator(options); - - this.table.element = newElement; -}; - -//extract tabulator attribute options -HtmlTableImport.prototype._extractOptions = function(element, options){ - var attributes = element.attributes; - - for(var index in attributes){ - var attrib = attributes[index]; - var name; - - if(typeof attrib == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0){ - name = attrib.name.replace("tabulator-", ""); - - for(var key in options){ - if(key.toLowerCase() == name){ - options[key] = this._attribValue(attrib.value); - } - } - } - } -}; - -//get value of attribute -HtmlTableImport.prototype._attribValue = function(value){ - if(value === "true"){ - return true; - } - - if(value === "false"){ - return false; - } - - return value; -}; - -//find column if it has already been defined -HtmlTableImport.prototype._findCol = function(title){ - var match = this.table.options.columns.find(function(column){ - return column.title === title; - }); - - return match || false; -}; - -//extract column from headers -HtmlTableImport.prototype._extractHeaders = function(headers, rows){ - for(var index = 0; index < headers.length; index++){ - var header = headers[index], - exists = false, - col = this._findCol(header.textContent), - width, attributes; - - if(col){ - exists = true; - }else{ - col = {title:header.textContent.trim()}; - } - - if(!col.field) { - col.field = header.textContent.trim().toLowerCase().replace(" ", "_"); - } - - width = header.getAttribute("width"); - - if(width && !col.width) { - col.width = width; - } - - //check for tablator inline options - attributes = header.attributes; - - // //check for tablator inline options - this._extractOptions(header, col); - - for(var i in attributes){ - var attrib = attributes[i], - name; - - if(typeof attrib == "object" && attrib.name && attrib.name.indexOf("tabulator-") === 0){ - - name = attrib.name.replace("tabulator-", ""); - - col[name] = this._attribValue(attrib.value); - } - } - - this.fieldIndex[index] = col.field; - - if(col.field == this.table.options.index){ - this.hasIndex = true; - } - - if(!exists){ - this.table.options.columns.push(col); - } - - } -}; - -//generate blank headers -HtmlTableImport.prototype._generateBlankHeaders = function(headers, rows){ - for(var index = 0; index < headers.length; index++){ - var header = headers[index], - col = {title:"", field:"col" + index}; - - this.fieldIndex[index] = col.field; - - var width = header.getAttribute("width"); - - if(width){ - col.width = width; - } - - this.table.options.columns.push(col); - } -}; - -Tabulator.prototype.registerModule("htmlTableImport", HtmlTableImport); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/keybindings.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/keybindings.js deleted file mode 100644 index 6dd3ca3560..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/keybindings.js +++ /dev/null @@ -1,355 +0,0 @@ -var Keybindings = function(table){ - this.table = table; //hold Tabulator object - this.watchKeys = null; - this.pressedKeys = null; - this.keyupBinding = false; - this.keydownBinding = false; -}; - -Keybindings.prototype.initialize = function(){ - var bindings = this.table.options.keybindings, - mergedBindings = {}; - - this.watchKeys = {}; - this.pressedKeys = []; - - if(bindings !== false){ - - for(let key in this.bindings){ - mergedBindings[key] = this.bindings[key]; - } - - if(Object.keys(bindings).length){ - - for(let key in bindings){ - mergedBindings[key] = bindings[key]; - } - } - - this.mapBindings(mergedBindings); - this.bindEvents(); - } -}; - -Keybindings.prototype.mapBindings = function(bindings){ - var self = this; - - for(let key in bindings){ - - if(this.actions[key]){ - - if(bindings[key]){ - - if(typeof bindings[key] !== "object"){ - bindings[key] = [bindings[key]]; - } - - bindings[key].forEach(function(binding){ - self.mapBinding(key, binding); - }); - } - - }else{ - console.warn("Key Binding Error - no such action:", key); - } - } -}; - -Keybindings.prototype.mapBinding = function(action, symbolsList){ - var self = this; - - var binding = { - action: this.actions[action], - keys: [], - ctrl: false, - shift: false, - }; - - var symbols = symbolsList.toString().toLowerCase().split(" ").join("").split("+"); - - symbols.forEach(function(symbol){ - switch(symbol){ - case "ctrl": - binding.ctrl = true; - break; - - case "shift": - binding.shift = true; - break; - - default: - symbol = parseInt(symbol); - binding.keys.push(symbol); - - if(!self.watchKeys[symbol]){ - self.watchKeys[symbol] = []; - } - - self.watchKeys[symbol].push(binding); - } - }); -}; - -Keybindings.prototype.bindEvents = function(){ - var self = this; - - this.keyupBinding = function(e){ - var code = e.keyCode; - var bindings = self.watchKeys[code]; - - if(bindings){ - - self.pressedKeys.push(code); - - bindings.forEach(function(binding){ - self.checkBinding(e, binding); - }); - } - }; - - this.keydownBinding = function(e){ - var code = e.keyCode; - var bindings = self.watchKeys[code]; - - if(bindings){ - - var index = self.pressedKeys.indexOf(code); - - if(index > -1){ - self.pressedKeys.splice(index, 1); - } - } - }; - - this.table.element.addEventListener("keydown", this.keyupBinding); - - this.table.element.addEventListener("keyup", this.keydownBinding); -}; - -Keybindings.prototype.clearBindings = function(){ - if(this.keyupBinding){ - this.table.element.removeEventListener("keydown", this.keyupBinding); - } - - if(this.keydownBinding){ - this.table.element.removeEventListener("keyup", this.keydownBinding); - } -}; - - -Keybindings.prototype.checkBinding = function(e, binding){ - var self = this, - match = true; - - if(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift){ - binding.keys.forEach(function(key){ - var index = self.pressedKeys.indexOf(key); - - if(index == -1){ - match = false; - } - }); - - if(match){ - binding.action.call(self, e); - } - - return true; - } - - return false; -}; - -//default bindings -Keybindings.prototype.bindings = { - navPrev:"shift + 9", - navNext:9, - navUp:38, - navDown:40, - scrollPageUp:33, - scrollPageDown:34, - scrollToStart:36, - scrollToEnd:35, - undo:"ctrl + 90", - redo:"ctrl + 89", - copyToClipboard:"ctrl + 67", -}; - -//default actions -Keybindings.prototype.actions = { - keyBlock:function(e){ - e.stopPropagation(); - e.preventDefault(); - }, - scrollPageUp:function(e){ - var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop - rowManager.height, - scrollMax = rowManager.element.scrollHeight; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - if(newPos >= 0){ - rowManager.element.scrollTop = newPos; - }else{ - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - } - - this.table.element.focus(); - }, - scrollPageDown:function(e){ - var rowManager = this.table.rowManager, - newPos = rowManager.scrollTop + rowManager.height, - scrollMax = rowManager.element.scrollHeight; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - if(newPos <= scrollMax){ - rowManager.element.scrollTop = newPos; - }else{ - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - } - - this.table.element.focus(); - - }, - scrollToStart:function(e){ - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - rowManager.scrollToRow(rowManager.getDisplayRows()[0]); - } - - this.table.element.focus(); - }, - scrollToEnd:function(e){ - var rowManager = this.table.rowManager; - - e.preventDefault(); - - if(rowManager.displayRowsCount){ - rowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]); - } - - this.table.element.focus(); - }, - navPrev:function(e){ - var cell = false; - - if(this.table.modExists("edit")){ - cell = this.table.modules.edit.currentCell; - - if(cell){ - e.preventDefault(); - cell.nav().prev(); - } - } - }, - - navNext:function(e){ - var cell = false; - - if(this.table.modExists("edit")){ - cell = this.table.modules.edit.currentCell; - - if(cell){ - e.preventDefault(); - cell.nav().next(); - } - } - }, - - navLeft:function(e){ - var cell = false; - - if(this.table.modExists("edit")){ - cell = this.table.modules.edit.currentCell; - - if(cell){ - e.preventDefault(); - cell.nav().left(); - } - } - }, - - navRight:function(e){ - var cell = false; - - if(this.table.modExists("edit")){ - cell = this.table.modules.edit.currentCell; - - if(cell){ - e.preventDefault(); - cell.nav().right(); - } - } - }, - - navUp:function(e){ - var cell = false; - - if(this.table.modExists("edit")){ - cell = this.table.modules.edit.currentCell; - - if(cell){ - e.preventDefault(); - cell.nav().up(); - } - } - }, - - navDown:function(e){ - var cell = false; - - if(this.table.modExists("edit")){ - cell = this.table.modules.edit.currentCell; - - if(cell){ - e.preventDefault(); - cell.nav().down(); - } - } - }, - - undo:function(e){ - var cell = false; - if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){ - - cell = this.table.modules.edit.currentCell; - - if(!cell){ - e.preventDefault(); - this.table.modules.history.undo(); - } - } - }, - - redo:function(e){ - var cell = false; - if(this.table.options.history && this.table.modExists("history") && this.table.modExists("edit")){ - - cell = this.table.modules.edit.currentCell; - - if(!cell){ - e.preventDefault(); - this.table.modules.history.redo(); - } - } - }, - - copyToClipboard:function(e){ - if(!this.table.modules.edit.currentCell){ - if(this.table.modExists("clipboard", true)){ - this.table.modules.clipboard.copy(!this.table.options.selectable || this.table.options.selectable == "highlight" ? "active" : "selected", null, null, null, true); - } - } - }, -}; - - -Tabulator.prototype.registerModule("keybindings", Keybindings); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/layout.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/layout.js deleted file mode 100644 index 8242659722..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/layout.js +++ /dev/null @@ -1,225 +0,0 @@ -var Layout = function(table){ - this.table = table; - this.mode = null; -}; - -//initialize layout system -Layout.prototype.initialize = function(layout){ - - if(this.modes[layout]){ - this.mode = layout; - }else{ - console.warn("Layout Error - invalid mode set, defaulting to 'fitData' : " + layout); - this.mode = 'fitData'; - } - - this.table.element.setAttribute("tabulator-layout", this.mode); -}; - -Layout.prototype.getMode = function(){ - return this.mode; -}; - -//trigger table layout -Layout.prototype.layout = function(){ - this.modes[this.mode].call(this, this.table.columnManager.columnsByIndex); -}; - -//layout render functions -Layout.prototype.modes = { - - //resize columns to fit data the contain - "fitData": function(columns){ - columns.forEach(function(column){ - column.reinitializeWidth(); - }); - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } - }, - - //resize columns to fit data the contain - "fitDataFill": function(columns){ - columns.forEach(function(column){ - column.reinitializeWidth(); - }); - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } - }, - - //resize columns to fit - "fitColumns": function(columns){ - var self = this; - - var totalWidth = self.table.element.clientWidth; //table element width - var fixedWidth = 0; //total width of columns with a defined width - var flexWidth = 0; //total width available to flexible columns - var flexGrowUnits = 0; //total number of widthGrow blocks accross all columns - var flexColWidth = 0; //desired width of flexible columns - var flexColumns = []; //array of flexible width columns - var fixedShrinkColumns = []; //array of fixed width columns that can shrink - var flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns - var overflowWidth = 0; //horizontal overflow width - var gapFill=0; //number of pixels to be added to final column to close and half pixel gaps - - function calcWidth(width){ - var colWidth; - - if(typeof(width) == "string"){ - if(width.indexOf("%") > -1){ - colWidth = (totalWidth / 100) * parseInt(width); - }else{ - colWidth = parseInt(width); - } - }else{ - colWidth = width; - } - - return colWidth; - } - - //ensure columns resize to take up the correct amount of space - function scaleColumns(columns, freeSpace, colWidth, shrinkCols){ - - var oversizeCols = [], - oversizeSpace = 0, - remainingSpace = 0, - nextColWidth = 0, - gap = 0, - changeUnits = 0, - undersizeCols = []; - - function calcGrow(col){ - return (colWidth * (col.column.definition.widthGrow || 1)); - } - - function calcShrink(col){ - return (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0))) - } - - columns.forEach(function(col, i){ - var width = shrinkCols ? calcShrink(col) : calcGrow(col); - if(col.column.minWidth >= width){ - oversizeCols.push(col); - }else{ - undersizeCols.push(col); - changeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1); - } - }); - - if(oversizeCols.length){ - oversizeCols.forEach(function(col){ - oversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth; - col.width = col.column.minWidth; - }); - - remainingSpace = freeSpace - oversizeSpace; - - nextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace; - - gap = remainingSpace - (nextColWidth * changeUnits); - - gap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols); - }else{ - gap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace; - - undersizeCols.forEach(function(column){ - column.width = shrinkCols ? calcShrink(column) : calcGrow(column); - }); - } - - return gap; - } - - - if(this.table.options.responsiveLayout && this.table.modExists("responsiveLayout", true)){ - this.table.modules.responsiveLayout.update(); - } - - //adjust for vertical scrollbar if present - if(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){ - totalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth; - } - - columns.forEach(function(column){ - var width, minWidth, colWidth; - - if(column.visible){ - - width = column.definition.width; - minWidth = parseInt(column.minWidth); - - if(width){ - - colWidth = calcWidth(width); - - fixedWidth += colWidth > minWidth ? colWidth : minWidth; - - if(column.definition.widthShrink){ - fixedShrinkColumns.push({ - column:column, - width:colWidth > minWidth ? colWidth : minWidth - }); - flexShrinkUnits += column.definition.widthShrink; - } - - }else{ - flexColumns.push({ - column:column, - width:0, - }); - flexGrowUnits += column.definition.widthGrow || 1; - } - } - }); - - - //calculate available space - flexWidth = totalWidth - fixedWidth; - - //calculate correct column size - flexColWidth = Math.floor(flexWidth / flexGrowUnits) - - //generate column widths - var gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false); - - //increase width of last column to account for rounding errors - if(flexColumns.length && gapFill > 0){ - flexColumns[flexColumns.length-1].width += + gapFill; - } - - //caculate space for columns to be shrunk into - flexColumns.forEach(function(col){ - flexWidth -= col.width; - }) - - overflowWidth = Math.abs(gapFill) + flexWidth; - - - //shrink oversize columns if there is no available space - if(overflowWidth > 0 && flexShrinkUnits){ - gapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true); - } - - //decrease width of last column to account for rounding errors - if(fixedShrinkColumns.length){ - fixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill; - } - - - flexColumns.forEach(function(col){ - col.column.setWidth(col.width); - }); - - fixedShrinkColumns.forEach(function(col){ - col.column.setWidth(col.width); - }); - - }, -}; - - -Tabulator.prototype.registerModule("layout", Layout); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/localize.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/localize.js deleted file mode 100644 index f066525449..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/localize.js +++ /dev/null @@ -1,196 +0,0 @@ -var Localize = function(table){ - this.table = table; //hold Tabulator object - this.locale = "default"; //current locale - this.lang = false; //current language - this.bindings = {}; //update events to call when locale is changed -}; - -//set header placehoder -Localize.prototype.setHeaderFilterPlaceholder = function(placeholder){ - this.langs.default.headerFilters.default = placeholder; -}; - -//set header filter placeholder by column -Localize.prototype.setHeaderFilterColumnPlaceholder = function(column, placeholder){ - this.langs.default.headerFilters.columns[column] = placeholder; - - if(this.lang && !this.lang.headerFilters.columns[column]){ - this.lang.headerFilters.columns[column] = placeholder; - } -}; - -//setup a lang description object -Localize.prototype.installLang = function(locale, lang){ - if(this.langs[locale]){ - this._setLangProp(this.langs[locale], lang); - }else{ - this.langs[locale] = lang; - } -}; - -Localize.prototype._setLangProp = function(lang, values){ - for(let key in values){ - if(lang[key] && typeof lang[key] == "object"){ - this._setLangProp(lang[key], values[key]) - }else{ - lang[key] = values[key]; - } - } -}; - - -//set current locale -Localize.prototype.setLocale = function(desiredLocale){ - var self = this; - - desiredLocale = desiredLocale || "default"; - - //fill in any matching languge values - function traverseLang(trans, path){ - for(var prop in trans){ - - if(typeof trans[prop] == "object"){ - if(!path[prop]){ - path[prop] = {}; - } - traverseLang(trans[prop], path[prop]); - }else{ - path[prop] = trans[prop]; - } - } - } - - //determing correct locale to load - if(desiredLocale === true && navigator.language){ - //get local from system - desiredLocale = navigator.language.toLowerCase(); - } - - if(desiredLocale){ - - //if locale is not set, check for matching top level locale else use default - if(!self.langs[desiredLocale]){ - let prefix = desiredLocale.split("-")[0]; - - if(self.langs[prefix]){ - console.warn("Localization Error - Exact matching locale not found, using closest match: ", desiredLocale, prefix); - desiredLocale = prefix; - }else{ - console.warn("Localization Error - Matching locale not found, using default: ", desiredLocale); - desiredLocale = "default"; - } - } - } - - self.locale = desiredLocale; - - //load default lang template - self.lang = Tabulator.prototype.helpers.deepClone(self.langs.default || {}); - - if(desiredLocale != "default"){ - traverseLang(self.langs[desiredLocale], self.lang); - } - - self.table.options.localized.call(self.table, self.locale, self.lang); - - self._executeBindings(); -}; - -//get current locale -Localize.prototype.getLocale = function(locale){ - return self.locale; -}; - -//get lang object for given local or current if none provided -Localize.prototype.getLang = function(locale){ - return locale ? this.langs[locale] : this.lang; -}; - -//get text for current locale -Localize.prototype.getText = function(path, value){ - var path = value ? path + "|" + value : path, - pathArray = path.split("|"), - text = this._getLangElement(pathArray, this.locale); - - // if(text === false){ - // console.warn("Localization Error - Matching localized text not found for given path: ", path); - // } - - return text || ""; -}; - -//traverse langs object and find localized copy -Localize.prototype._getLangElement = function(path, locale){ - var self = this; - var root = self.lang; - - path.forEach(function(level){ - var rootPath; - - if(root){ - rootPath = root[level]; - - if(typeof rootPath != "undefined"){ - root = rootPath; - }else{ - root = false; - } - } - }); - - return root; -}; - -//set update binding -Localize.prototype.bind = function(path, callback){ - if(!this.bindings[path]){ - this.bindings[path] = []; - } - - this.bindings[path].push(callback); - - callback(this.getText(path), this.lang); -}; - -//itterate through bindings and trigger updates -Localize.prototype._executeBindings = function(){ - var self = this; - - for(let path in self.bindings){ - self.bindings[path].forEach(function(binding){ - binding(self.getText(path), self.lang); - }); - } -}; - -//Localized text listings -Localize.prototype.langs = { - "default":{ //hold default locale text - "groups":{ - "item":"item", - "items":"items", - }, - "columns":{ - }, - "ajax":{ - "loading":"Loading", - "error":"Error", - }, - "pagination":{ - "first":"First", - "first_title":"First Page", - "last":"Last", - "last_title":"Last Page", - "prev":"Prev", - "prev_title":"Prev Page", - "next":"Next", - "next_title":"Next Page", - }, - "headerFilters":{ - "default":"filter column...", - "columns":{} - } - }, -}; - -Tabulator.prototype.registerModule("localize", Localize); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/moveable_columns.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/moveable_columns.js deleted file mode 100644 index 9891b8bed2..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/moveable_columns.js +++ /dev/null @@ -1,195 +0,0 @@ -var MoveColumns = function(table){ - this.table = table; //hold Tabulator object - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating column header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving column - this.toCol = false; //destination column - this.toColAfter = false; //position of moving column relative to the desitnation column - this.startX = 0; //starting position within header element - this.autoScrollMargin = 40; //auto scroll on edge when within margin - this.autoScrollStep = 5; //auto scroll distance in pixels - this.autoScrollTimeout = false; //auto scroll timeout - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); -}; - -MoveColumns.prototype.createPlaceholderElement = function(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-col"); - el.classList.add("tabulator-col-placeholder"); - - return el; -}; - -MoveColumns.prototype.initializeColumn = function(column){ - var self = this, - config = {}, - colEl; - - if(!column.modules.frozen){ - - colEl = column.getElement(); - - config.mousemove = function(e){ - if(column.parent === self.moving.parent){ - if(((e.pageX - Tabulator.prototype.helpers.elOffset(colEl).left) + self.table.columnManager.element.scrollLeft) > (column.getWidth() / 2)){ - if(self.toCol !== column || !self.toColAfter){ - colEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling); - self.moveColumn(column, true); - } - }else{ - if(self.toCol !== column || self.toColAfter){ - colEl.parentNode.insertBefore(self.placeholderElement, colEl); - self.moveColumn(column, false); - } - } - } - }.bind(self); - - colEl.addEventListener("mousedown", function(e){ - if(e.which === 1){ - self.checkTimeout = setTimeout(function(){ - self.startMove(e, column); - }, self.checkPeriod); - } - }); - - colEl.addEventListener("mouseup", function(e){ - if(e.which === 1){ - if(self.checkTimeout){ - clearTimeout(self.checkTimeout); - } - } - }); - } - - column.modules.moveColumn = config; -}; - -MoveColumns.prototype.startMove = function(e, column){ - var element = column.getElement(); - - - this.moving = column; - this.startX = e.pageX - Tabulator.prototype.helpers.elOffset(element).left; - - this.table.element.classList.add("tabulator-block-select"); - - //create placeholder - - this.placeholderElement.style.width = column.getWidth() + "px"; - this.placeholderElement.style.height = column.getHeight() + "px"; - - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - this.table.columnManager.getElement().appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.bottom = "0"; - - this._bindMouseMove(); - - document.body.addEventListener("mousemove", this.moveHover); - document.body.addEventListener("mouseup", this.endMove); - - this.moveHover(e); -}; - -MoveColumns.prototype._bindMouseMove = function(){ - this.table.columnManager.columnsByIndex.forEach(function(column){ - if(column.modules.moveColumn.mousemove){ - column.getElement().addEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); -}; - -MoveColumns.prototype._unbindMouseMove = function(){ - this.table.columnManager.columnsByIndex.forEach(function(column){ - if(column.modules.moveColumn.mousemove){ - column.getElement().removeEventListener("mousemove", column.modules.moveColumn.mousemove); - } - }); -}; - -MoveColumns.prototype.moveColumn = function(column, after){ - var movingCells = this.moving.getCells(); - - this.toCol = column; - this.toColAfter = after; - - if(after){ - column.getCells().forEach(function(cell, i){ - var cellEl = cell.getElement(); - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling); - }); - }else{ - column.getCells().forEach(function(cell, i){ - var cellEl = cell.getElement(); - cellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl); - }); - } -}; - -MoveColumns.prototype.endMove = function(e){ - if(e.which === 1){ - this._unbindMouseMove(); - - this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling); - this.placeholderElement.parentNode.removeChild(this.placeholderElement); - this.hoverElement.parentNode.removeChild(this.hoverElement); - - this.table.element.classList.remove("tabulator-block-select"); - - if(this.toCol){ - this.table.columnManager.moveColumn(this.moving, this.toCol, this.toColAfter); - } - - this.moving = false; - this.toCol = false; - this.toColAfter = false; - - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - } -}; - -MoveColumns.prototype.moveHover = function(e){ - var self = this, - columnHolder = self.table.columnManager.getElement(), - scrollLeft = columnHolder.scrollLeft, - xPos = (e.pageX - Tabulator.prototype.helpers.elOffset(columnHolder).left) + scrollLeft, - scrollPos; - - self.hoverElement.style.left = (xPos - self.startX) + "px"; - - if(xPos - scrollLeft < self.autoScrollMargin){ - if(!self.autoScrollTimeout){ - self.autoScrollTimeout = setTimeout(function(){ - scrollPos = Math.max(0,scrollLeft-5); - self.table.rowManager.getElement().scrollLeft = scrollPos; - self.autoScrollTimeout = false; - }, 1); - } - } - - if(scrollLeft + columnHolder.clientWidth - xPos < self.autoScrollMargin){ - if(!self.autoScrollTimeout){ - self.autoScrollTimeout = setTimeout(function(){ - scrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5); - self.table.rowManager.getElement().scrollLeft = scrollPos; - self.autoScrollTimeout = false; - }, 1); - } - } -}; - -Tabulator.prototype.registerModule("moveColumn", MoveColumns); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/moveable_rows.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/moveable_rows.js deleted file mode 100644 index 2477e6fdd3..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/moveable_rows.js +++ /dev/null @@ -1,460 +0,0 @@ -var MoveRows = function(table){ - - this.table = table; //hold Tabulator object - this.placeholderElement = this.createPlaceholderElement(); - this.hoverElement = false; //floating row header element - this.checkTimeout = false; //click check timeout holder - this.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click - this.moving = false; //currently moving row - this.toRow = false; //destination row - this.toRowAfter = false; //position of moving row relative to the desitnation row - this.hasHandle = false; //row has handle instead of fully movable row - this.startY = 0; //starting Y position within header element - this.startX = 0; //starting X position within header element - - this.moveHover = this.moveHover.bind(this); - this.endMove = this.endMove.bind(this); - this.tableRowDropEvent = false; - - this.connection = false; - this.connections = []; - - this.connectedTable = false; - this.connectedRow = false; -}; - -MoveRows.prototype.createPlaceholderElement = function(){ - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - el.classList.add("tabulator-row-placeholder"); - - return el; -}; - - -MoveRows.prototype.initialize = function(handle){ - this.connection = this.table.options.movableRowsConnectedTables; -}; - -MoveRows.prototype.setHandle = function(handle){ - this.hasHandle = handle; -}; - -MoveRows.prototype.initializeRow = function(row){ - var self = this, - config = {}, - rowEl; - - //inter table drag drop - config.mouseup = function(e){ - self.tableRowDrop(e, row); - }.bind(self); - - //same table drag drop - config.mousemove = function(e){ - if(((e.pageY - Tabulator.prototype.helpers.elOffset(row.element).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){ - if(self.toRow !== row || !self.toRowAfter){ - var rowEl = row.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling); - self.moveRow(row, true); - } - }else{ - if(self.toRow !== row || self.toRowAfter){ - var rowEl = row.getElement(); - rowEl.parentNode.insertBefore(self.placeholderElement, rowEl); - self.moveRow(row, false); - } - } - }.bind(self); - - - if(!this.hasHandle){ - - rowEl = row.getElement(); - - rowEl.addEventListener("mousedown", function(e){ - if(e.which === 1){ - self.checkTimeout = setTimeout(function(){ - self.startMove(e, row); - }, self.checkPeriod); - } - }); - - rowEl.addEventListener("mouseup", function(e){ - if(e.which === 1){ - if(self.checkTimeout){ - clearTimeout(self.checkTimeout); - } - } - }); - } - - row.modules.moveRow = config; -}; - -MoveRows.prototype.initializeCell = function(cell){ - var self = this, - cellEl = cell.getElement(); - - cellEl.addEventListener("mousedown", function(e){ - if(e.which === 1){ - self.checkTimeout = setTimeout(function(){ - self.startMove(e, cell.row); - }, self.checkPeriod); - } - }); - - cellEl.addEventListener("mouseup", function(e){ - if(e.which === 1){ - if(self.checkTimeout){ - clearTimeout(self.checkTimeout); - } - } - }); -}; - -MoveRows.prototype._bindMouseMove = function(){ - var self = this; - - self.table.rowManager.getDisplayRows().forEach(function(row){ - if(row.type === "row" && row.modules.moveRow.mousemove){ - row.getElement().addEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); -}; - -MoveRows.prototype._unbindMouseMove = function(){ - var self = this; - - self.table.rowManager.getDisplayRows().forEach(function(row){ - if(row.type === "row" && row.modules.moveRow.mousemove){ - row.getElement().removeEventListener("mousemove", row.modules.moveRow.mousemove); - } - }); -}; - -MoveRows.prototype.startMove = function(e, row){ - var element = row.getElement(); - - this.setStartPosition(e, row); - - this.moving = row; - - this.table.element.classList.add("tabulator-block-select"); - - //create placeholder - this.placeholderElement.style.width = row.getWidth() + "px"; - this.placeholderElement.style.height = row.getHeight() + "px"; - - if(!this.connection){ - element.parentNode.insertBefore(this.placeholderElement, element); - element.parentNode.removeChild(element); - }else{ - this.table.element.classList.add("tabulator-movingrow-sending"); - this.connectToTables(row); - } - - //create hover element - this.hoverElement = element.cloneNode(true); - this.hoverElement.classList.add("tabulator-moving"); - - if(this.connection){ - document.body.appendChild(this.hoverElement); - this.hoverElement.style.left = "0"; - this.hoverElement.style.top = "0"; - this.hoverElement.style.width = this.table.element.clientWidth + "px"; - this.hoverElement.style.whiteSpace = "nowrap"; - this.hoverElement.style.overflow = "hidden"; - this.hoverElement.style.pointerEvents = "none"; - }else{ - this.table.rowManager.getTableElement().appendChild(this.hoverElement); - - this.hoverElement.style.left = "0"; - this.hoverElement.style.top = "0"; - - this._bindMouseMove(); - } - - document.body.addEventListener("mousemove", this.moveHover); - document.body.addEventListener("mouseup", this.endMove); - - this.moveHover(e); -}; - - -MoveRows.prototype.setStartPosition = function(e, row){ - var element, position; - - element = row.getElement(); - if(this.connection){ - position = element.getBoundingClientRect(); - - this.startX = position.left - e.pageX + window.scrollX; - this.startY = position.top - e.pageY + window.scrollY; - }else{ - this.startY = (e.pageY - element.getBoundingClientRect().top); - } -}; - -MoveRows.prototype.endMove = function(e){ - if(!e || e.which === 1){ - this._unbindMouseMove(); - - if(!this.connection){ - this.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling); - this.placeholderElement.parentNode.removeChild(this.placeholderElement); - } - - this.hoverElement.parentNode.removeChild(this.hoverElement); - - this.table.element.classList.remove("tabulator-block-select"); - - if(this.toRow){ - this.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter); - } - - this.moving = false; - this.toRow = false; - this.toRowAfter = false; - - document.body.removeEventListener("mousemove", this.moveHover); - document.body.removeEventListener("mouseup", this.endMove); - - if(this.connection){ - this.table.element.classList.remove("tabulator-movingrow-sending"); - this.disconnectFromTables(); - } - } -}; - -MoveRows.prototype.moveRow = function(row, after){ - this.toRow = row; - this.toRowAfter = after; -}; - -MoveRows.prototype.moveHover = function(e){ - if(this.connection){ - this.moveHoverConnections.call(this, e); - }else{ - this.moveHoverTable.call(this, e); - } -}; - -MoveRows.prototype.moveHoverTable = function(e){ - var rowHolder = this.table.rowManager.getElement(), - scrollTop = rowHolder.scrollTop, - yPos = (e.pageY - rowHolder.getBoundingClientRect().top) + scrollTop, - scrollPos; - - this.hoverElement.style.top = (yPos - this.startY) + "px"; -}; - - -MoveRows.prototype.moveHoverConnections = function(e){ - this.hoverElement.style.left = (this.startX + e.pageX) + "px"; - this.hoverElement.style.top = (this.startY + e.pageY) + "px"; -}; - - -//establish connection with other tables -MoveRows.prototype.connectToTables = function(row){ - var self = this, - connections = this.table.modules.comms.getConnections(this.connection); - - this.table.options.movableRowsSendingStart.call(this.table, connections); - - this.table.modules.comms.send(this.connection, "moveRow", "connect", { - row:row, - }); -}; - - -//disconnect from other tables -MoveRows.prototype.disconnectFromTables = function(){ - var self = this, - connections = this.table.modules.comms.getConnections(this.connection); - - this.table.options.movableRowsSendingStop.call(this.table, connections); - - this.table.modules.comms.send(this.connection, "moveRow", "disconnect"); -}; - - -//accept incomming connection -MoveRows.prototype.connect = function(table, row){ - var self = this; - if(!this.connectedTable){ - this.connectedTable = table; - this.connectedRow = row; - - this.table.element.classList.add("tabulator-movingrow-receiving"); - - self.table.rowManager.getDisplayRows().forEach(function(row){ - if(row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup){ - row.getElement().addEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - self.tableRowDropEvent = self.tableRowDrop.bind(self); - - self.table.element.addEventListener("mouseup", self.tableRowDropEvent); - - this.table.options.movableRowsReceivingStart.call(this.table, row, table); - - return true; - }else{ - console.warn("Move Row Error - Table cannot accept connection, already connected to table:", this.connectedTable); - return false; - } -}; - -//close incomming connection -MoveRows.prototype.disconnect = function(table){ - var self = this; - if(table === this.connectedTable){ - this.connectedTable = false; - this.connectedRow = false; - - this.table.element.classList.remove("tabulator-movingrow-receiving"); - - self.table.rowManager.getDisplayRows().forEach(function(row){ - if(row.type === "row" && row.modules.moveRow && row.modules.moveRow.mouseup){ - row.getElement().removeEventListener("mouseup", row.modules.moveRow.mouseup); - } - }); - - self.table.element.removeEventListener("mouseup", self.tableRowDropEvent); - - this.table.options.movableRowsReceivingStop.call(this.table, table); - }else{ - console.warn("Move Row Error - trying to disconnect from non connected table") - } -}; - -MoveRows.prototype.dropComplete = function(table, row, success){ - var sender = false; - - if(success){ - - switch(typeof this.table.options.movableRowsSender){ - case "string": - sender = this.senders[this.table.options.movableRowsSender]; - break; - - case "function": - sender = this.table.options.movableRowsSender; - break; - } - - if(sender){ - sender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table) - }else{ - if(this.table.options.movableRowsSender){ - console.warn("Mover Row Error - no matching sender found:", this.table.options.movableRowsSender); - } - } - - this.table.options.movableRowsSent.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table); - - }else{ - this.table.options.movableRowsSentFailed.call(this.table, this.moving.getComponent(), row ? row.getComponent() : undefined, table); - } - - this.endMove(); - -}; - - -MoveRows.prototype.tableRowDrop = function(e, row){ - var receiver = false, - success = false; - - e.stopImmediatePropagation(); - - switch(typeof this.table.options.movableRowsReceiver){ - case "string": - receiver = this.receivers[this.table.options.movableRowsReceiver]; - break; - - case "function": - receiver = this.table.options.movableRowsReceiver; - break; - } - - if(receiver){ - success = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable) - }else{ - console.warn("Mover Row Error - no matching receiver found:", this.table.options.movableRowsReceiver) - } - - if(success){ - this.table.options.movableRowsReceived.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - }else{ - this.table.options.movableRowsReceivedFailed.call(this.table, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable); - } - - this.table.modules.comms.send(this.connectedTable, "moveRow", "dropcomplete", { - row:row, - success:success, - }); -}; - - - -MoveRows.prototype.receivers = { - insert:function(fromRow, toRow, fromTable){ - this.table.addRow(fromRow.getData(), undefined, toRow); - return true; - }, - - add:function(fromRow, toRow, fromTable){ - this.table.addRow(fromRow.getData()); - return true; - }, - - update:function(fromRow, toRow, fromTable){ - if(toRow){ - toRow.update(fromRow.getData()); - return true; - } - - return false; - }, - - replace:function(fromRow, toRow, fromTable){ - if(toRow){ - this.table.addRow(fromRow.getData(), undefined, toRow); - toRow.delete(); - return true; - } - - return false; - }, -}; - -MoveRows.prototype.senders = { - delete:function(fromRow, toRow, toTable){ - fromRow.delete(); - } -}; - - -MoveRows.prototype.commsReceived = function(table, action, data){ - switch(action){ - case "connect": - return this.connect(table, data.row); - break; - - case "disconnect": - return this.disconnect(table); - break; - - case "dropcomplete": - return this.dropComplete(table, data.row, data.success); - break; - } -}; - - -Tabulator.prototype.registerModule("moveRow", MoveRows); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/mutator.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/mutator.js deleted file mode 100644 index b6044ba5aa..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/mutator.js +++ /dev/null @@ -1,110 +0,0 @@ -var Mutator = function(table){ - this.table = table; //hold Tabulator object - this.allowedTypes = ["", "data", "edit", "clipboard"]; //list of muatation types - this.enabled = true; -}; - -//initialize column mutator -Mutator.prototype.initializeColumn = function(column){ - var self = this, - match = false, - config = {}; - - this.allowedTypes.forEach(function(type){ - var key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - mutator; - - if(column.definition[key]){ - mutator = self.lookupMutator(column.definition[key]); - - if(mutator){ - match = true; - - config[key] = { - mutator:mutator, - params: column.definition[key + "Params"] || {}, - }; - } - } - }); - - if(match){ - column.modules.mutate = config; - } -}; - -Mutator.prototype.lookupMutator = function(value){ - var mutator = false; - - //set column mutator - switch(typeof value){ - case "string": - if(this.mutators[value]){ - mutator = this.mutators[value]; - }else{ - console.warn("Mutator Error - No such mutator found, ignoring: ", value); - } - break; - - case "function": - mutator = value; - break; - } - - return mutator; -}; - -//apply mutator to row -Mutator.prototype.transformRow = function(data, type, update){ - var self = this, - key = "mutator" + (type.charAt(0).toUpperCase() + type.slice(1)), - value; - - if(this.enabled){ - - self.table.columnManager.traverse(function(column){ - var mutator, params, component; - - if(column.modules.mutate){ - mutator = column.modules.mutate[key] || column.modules.mutate.mutator || false; - - if(mutator){ - value = column.getFieldValue(data); - - if(!update || (update && typeof value !== "undefined")){ - component = column.getComponent(); - params = typeof mutator.params === "function" ? mutator.params(value, data, type, component) : mutator.params; - column.setFieldValue(data, mutator.mutator(value, data, type, params, component)); - } - } - } - }); - } - - return data; -}; - -//apply mutator to new cell value -Mutator.prototype.transformCell = function(cell, value){ - var mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false; - - if(mutator){ - return mutator.mutator(value, cell.row.getData(), "edit", mutator.params, cell.getComponent()); - }else{ - return value; - } -}; - -Mutator.prototype.enable = function(){ - this.enabled = true; -}; - -Mutator.prototype.disable = function(){ - this.enabled = false; -}; - - -//default mutators -Mutator.prototype.mutators = {}; - -Tabulator.prototype.registerModule("mutator", Mutator); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/page.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/page.js deleted file mode 100644 index 5ff005f2f2..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/page.js +++ /dev/null @@ -1,532 +0,0 @@ -var Page = function(table){ - - this.table = table; //hold Tabulator object - - this.mode = "local"; - this.progressiveLoad = false; - - this.size = 0; - this.page = 1; - this.count = 5; - this.max = 1; - - this.displayIndex = 0; //index in display pipeline - - this.createElements(); -}; - -Page.prototype.createElements = function(){ - - var button; - - this.element = document.createElement("span"); - this.element.classList.add("tabulator-paginator"); - - this.pagesElement = document.createElement("span"); - this.pagesElement.classList.add("tabulator-pages"); - - button = document.createElement("button"); - button.classList.add("tabulator-page"); - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - button.setAttribute("aria-label", ""); - button.setAttribute("title", ""); - - this.firstBut = button.cloneNode(true); - this.firstBut.setAttribute("data-page", "first"); - - this.prevBut = button.cloneNode(true); - this.prevBut.setAttribute("data-page", "prev"); - - this.nextBut = button.cloneNode(true); - this.nextBut.setAttribute("data-page", "next"); - - this.lastBut = button.cloneNode(true); - this.lastBut.setAttribute("data-page", "last"); -}; - -//setup pageination -Page.prototype.initialize = function(hidden){ - var self = this; - - //update param names - for(let key in self.table.options.paginationDataSent){ - self.paginationDataSentNames[key] = self.table.options.paginationDataSent[key]; - } - - for(let key in self.table.options.paginationDataReceived){ - self.paginationDataReceivedNames[key] = self.table.options.paginationDataReceived[key]; - } - - //build pagination element - - //bind localizations - self.table.modules.localize.bind("pagination|first", function(value){ - self.firstBut.innerHTML = value; - }); - - self.table.modules.localize.bind("pagination|first_title", function(value){ - self.firstBut.setAttribute("aria-label", value); - self.firstBut.setAttribute("title", value); - }); - - self.table.modules.localize.bind("pagination|prev", function(value){ - self.prevBut.innerHTML = value; - }); - - self.table.modules.localize.bind("pagination|prev_title", function(value){ - self.prevBut.setAttribute("aria-label", value); - self.prevBut.setAttribute("title", value); - }); - - self.table.modules.localize.bind("pagination|next", function(value){ - self.nextBut.innerHTML = value; - }); - - self.table.modules.localize.bind("pagination|next_title", function(value){ - self.nextBut.setAttribute("aria-label", value); - self.nextBut.setAttribute("title", value); - }); - - self.table.modules.localize.bind("pagination|last", function(value){ - self.lastBut.innerHTML = value; - }); - - self.table.modules.localize.bind("pagination|last_title", function(value){ - self.lastBut.setAttribute("aria-label", value); - self.lastBut.setAttribute("title", value); - }); - - //click bindings - self.firstBut.addEventListener("click", function(){ - self.setPage(1); - }); - - self.prevBut.addEventListener("click", function(){ - self.previousPage(); - }); - - self.nextBut.addEventListener("click", function(){ - self.nextPage().then(()=>{}).catch(()=>{}); - }); - - self.lastBut.addEventListener("click", function(){ - self.setPage(self.max); - }); - - if(self.table.options.paginationElement){ - self.element = self.table.options.paginationElement; - } - - //append to DOM - self.element.appendChild(self.firstBut); - self.element.appendChild(self.prevBut); - self.element.appendChild(self.pagesElement); - self.element.appendChild(self.nextBut); - self.element.appendChild(self.lastBut); - - if(!self.table.options.paginationElement && !hidden){ - self.table.footerManager.append(self.element, self); - } - - //set default values - self.mode = self.table.options.pagination; - self.size = self.table.options.paginationSize || Math.floor(self.table.rowManager.getElement().clientHeight / 24); - self.count = self.table.options.paginationButtonCount; -}; - -Page.prototype.initializeProgressive = function(mode){ - this.initialize(true); - this.mode = "progressive_" + mode; - this.progressiveLoad = true; -}; - -Page.prototype.setDisplayIndex = function(index){ - this.displayIndex = index; -}; - -Page.prototype.getDisplayIndex = function(){ - return this.displayIndex; -}; - - -//calculate maximum page from number of rows -Page.prototype.setMaxRows = function(rowCount){ - if(!rowCount){ - this.max = 1; - }else{ - this.max = Math.ceil(rowCount/this.size); - } - - if(this.page > this.max){ - this.page = this.max; - } -}; - -//reset to first page without triggering action -Page.prototype.reset = function(force){ - if(this.mode == "local" || force){ - this.page = 1; - } - return true; -}; - -//set the maxmum page -Page.prototype.setMaxPage = function(max){ - this.max = max || 1; - - if(this.page > this.max){ - this.page = this.max; - this.trigger(); - } -}; - -//set current page number -Page.prototype.setPage = function(page){ - return new Promise((resolve, reject)=>{ - if(page > 0 && page <= this.max){ - this.page = page; - this.trigger() - .then(()=>{ - resolve(); - }) - .catch(()=>{ - reject(); - }); - }else{ - console.warn("Pagination Error - Requested page is out of range of 1 - " + this.max + ":", page); - reject(); - } - }); -}; - -Page.prototype.setPageSize = function(size){ - if(size > 0){ - this.size = size; - } -}; - - -//setup the pagination buttons -Page.prototype._setPageButtons = function(){ - var self = this; - - let leftSize = Math.floor((this.count-1) / 2); - let rightSize = Math.ceil((this.count-1) / 2); - let min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1); - let max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max); - - while(self.pagesElement.firstChild) self.pagesElement.removeChild(self.pagesElement.firstChild); - - if(self.page == 1){ - self.firstBut.disabled = true; - self.prevBut.disabled = true; - }else{ - self.firstBut.disabled = false; - self.prevBut.disabled = false; - } - - if(self.page == self.max){ - self.lastBut.disabled = true; - self.nextBut.disabled = true; - }else{ - self.lastBut.disabled = false; - self.nextBut.disabled = false; - } - - for(let i = min; i <= max; i++){ - if(i>0 && i <= self.max){ - self.pagesElement.appendChild(self._generatePageButton(i)); - } - } - - this.footerRedraw(); -}; - -Page.prototype._generatePageButton = function(page){ - var self = this, - button = document.createElement("button"); - - button.classList.add("tabulator-page"); - if(page == self.page){ - button.classList.add("active"); - } - - button.setAttribute("type", "button"); - button.setAttribute("role", "button"); - button.setAttribute("aria-label", "Show Page " + page); - button.setAttribute("title", "Show Page " + page); - button.setAttribute("data-page", page); - button.textContent = page; - - button.addEventListener("click", function(e){ - self.setPage(page); - }); - - return button; -}; - -//previous page -Page.prototype.previousPage = function(){ - return new Promise((resolve, reject)=>{ - if(this.page > 1){ - this.page--; - this.trigger() - .then(()=>{ - resolve(); - }) - .catch(()=>{ - reject(); - }); - }else{ - console.warn("Pagination Error - Previous page would be less than page 1:", 0); - reject() - } - }); -}; - -//next page -Page.prototype.nextPage = function(){ - return new Promise((resolve, reject)=>{ - if(this.page < this.max){ - this.page++; - this.trigger() - .then(()=>{ - resolve(); - }) - .catch(()=>{ - reject(); - }); - }else{ - if(!this.progressiveLoad){ - console.warn("Pagination Error - Next page would be greater than maximum page of " + this.max + ":", this.max + 1); - } - reject(); - } - }); -}; - -//return current page number -Page.prototype.getPage = function(){ - return this.page; -}; - -//return max page number -Page.prototype.getPageMax = function(){ - return this.max; -}; - -Page.prototype.getPageSize = function(size){ - return this.size; -}; - -Page.prototype.getMode = function(){ - return this.mode; -}; - -//return appropriate rows for current page -Page.prototype.getRows = function(data){ - var output, start, end; - - if(this.mode == "local"){ - output = []; - start = this.size * (this.page - 1); - end = start + parseInt(this.size); - - this._setPageButtons(); - - for(let i = start; i < end; i++){ - if(data[i]){ - output.push(data[i]); - } - } - - return output; - }else{ - - this._setPageButtons(); - - return data.slice(0); - } -}; - -Page.prototype.trigger = function(){ - var left; - - return new Promise((resolve, reject)=>{ - - switch(this.mode){ - case "local": - left = this.table.rowManager.scrollLeft; - - this.table.rowManager.refreshActiveData("page"); - this.table.rowManager.scrollHorizontal(left); - - this.table.options.pageLoaded.call(this.table, this.getPage()); - resolve(); - break; - - case "remote": - case "progressive_load": - case "progressive_scroll": - this.table.modules.ajax.blockActiveRequest(); - this._getRemotePage() - .then(()=>{ - resolve(); - }) - .catch(()=>{ - reject(); - }); - break; - - default: - console.warn("Pagination Error - no such pagination mode:", this.mode); - reject(); - } - }); -}; - -Page.prototype._getRemotePage = function(){ - var self = this, - oldParams, pageParams; - - - return new Promise((resolve, reject)=>{ - - if(!self.table.modExists("ajax", true)){ - reject() - } - - //record old params and restore after request has been made - oldParams = Tabulator.prototype.helpers.deepClone(self.table.modules.ajax.getParams() || {}); - pageParams = self.table.modules.ajax.getParams(); - - //configure request params - pageParams[this.paginationDataSentNames.page] = self.page; - - //set page size if defined - if(this.size){ - pageParams[this.paginationDataSentNames.size] = this.size; - } - - //set sort data if defined - if(this.table.options.ajaxSorting && this.table.modExists("sort")){ - let sorters = self.table.modules.sort.getSort(); - - sorters.forEach(function(item){ - delete item.column; - }); - - pageParams[this.paginationDataSentNames.sorters] = sorters; - } - - //set filter data if defined - if(this.table.options.ajaxFiltering && this.table.modExists("filter")){ - let filters = self.table.modules.filter.getFilters(true, true); - pageParams[this.paginationDataSentNames.filters] = filters; - } - - self.table.modules.ajax.setParams(pageParams); - - self.table.modules.ajax.sendRequest(this.progressiveLoad) - .then((data)=>{ - self._parseRemoteData(data); - resolve(); - }) - .catch((e)=>{reject()}); - - self.table.modules.ajax.setParams(oldParams); - }); -}; - - - -Page.prototype._parseRemoteData = function(data){ - var self = this, - left, data, margin; - - if(typeof data[this.paginationDataReceivedNames.last_page] === "undefined"){ - console.warn("Remote Pagination Error - Server response missing '" + this.paginationDataReceivedNames.last_page + "' property"); - } - - if(data[this.paginationDataReceivedNames.data]){ - this.max = parseInt(data[this.paginationDataReceivedNames.last_page]) || 1; - - if(this.progressiveLoad){ - switch(this.mode){ - case "progressive_load": - this.table.rowManager.addRows(data[this.paginationDataReceivedNames.data]); - if(this.page < this.max){ - setTimeout(function(){ - self.nextPage().then(()=>{}).catch(()=>{}); - }, self.table.options.ajaxProgressiveLoadDelay); - } - break; - - case "progressive_scroll": - data = this.table.rowManager.getData().concat(data[this.paginationDataReceivedNames.data]); - - this.table.rowManager.setData(data, true); - - margin = this.table.options.ajaxProgressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2); - - if(self.table.rowManager.element.scrollHeight <= (self.table.rowManager.element.clientHeight + margin)){ - self.nextPage().then(()=>{}).catch(()=>{}); - } - break; - } - }else{ - left = this.table.rowManager.scrollLeft; - - this.table.rowManager.setData(data[this.paginationDataReceivedNames.data]); - - this.table.rowManager.scrollHorizontal(left); - - this.table.columnManager.scrollHorizontal(left); - - this.table.options.pageLoaded.call(this.table, this.getPage()); - } - - }else{ - console.warn("Remote Pagination Error - Server response missing '" + this.paginationDataReceivedNames.data + "' property"); - } - -}; - - - - -//handle the footer element being redrawn -Page.prototype.footerRedraw = function(){ - var footer = this.table.footerManager.element; - - if((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){ - this.pagesElement.style.display = 'none'; - }else{ - this.pagesElement.style.display = ''; - - if((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){ - this.pagesElement.style.display = 'none'; - } - } -}; - -//set the paramter names for pagination requests -Page.prototype.paginationDataSentNames = { - "page":"page", - "size":"size", - "sorters":"sorters", - // "sort_dir":"sort_dir", - "filters":"filters", - // "filter_value":"filter_value", - // "filter_type":"filter_type", -}; - -//set the property names for pagination responses -Page.prototype.paginationDataReceivedNames = { - "current_page":"current_page", - "last_page":"last_page", - "data":"data", -}; - -Tabulator.prototype.registerModule("page", Page); diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/persistence.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/persistence.js deleted file mode 100644 index 41baf9ada3..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/persistence.js +++ /dev/null @@ -1,208 +0,0 @@ -var Persistence = function(table){ - this.table = table; //hold Tabulator object - this.mode = ""; - this.id = ""; - this.persistProps = ["field", "width", "visible"]; -}; - -//setup parameters -Persistence.prototype.initialize = function(mode, id){ - //determine persistent layout storage type - this.mode = mode !== true ? mode : (typeof window.localStorage !== 'undefined' ? "local" : "cookie"); - - //set storage tag - this.id = "tabulator-" + (id || (this.table.element.getAttribute("id") || "")); -}; - -//load saved definitions -Persistence.prototype.load = function(type, current){ - - var data = this.retreiveData(type); - - if(current){ - data = data ? this.mergeDefinition(current, data) : current; - } - - return data; -}; - -//retreive data from memory -Persistence.prototype.retreiveData = function(type){ - var data = "", - id = this.id + (type === "columns" ? "" : "-" + type); - - switch(this.mode){ - case "local": - data = localStorage.getItem(id); - break; - - case "cookie": - - //find cookie - let cookie = document.cookie, - cookiePos = cookie.indexOf(id + "="), - end; - - //if cookie exists, decode and load column data into tabulator - if(cookiePos > -1){ - cookie = cookie.substr(cookiePos); - - end = cookie.indexOf(";"); - - if(end > -1){ - cookie = cookie.substr(0, end); - } - - data = cookie.replace(id + "=", ""); - } - break; - - default: - console.warn("Persistance Load Error - invalid mode selected", this.mode); - } - - return data ? JSON.parse(data) : false; -}; - -//merge old and new column defintions -Persistence.prototype.mergeDefinition = function(oldCols, newCols){ - var self = this, - output = []; - - // oldCols = oldCols || []; - newCols = newCols || []; - - newCols.forEach(function(column, to){ - - var from = self._findColumn(oldCols, column); - - if(from){ - - from.width = column.width; - from.visible = column.visible; - - if(from.columns){ - from.columns = self.mergeDefinition(from.columns, column.columns); - } - - output.push(from); - } - - }); - oldCols.forEach(function (column, i) { - var from = self._findColumn(newCols, column); - if (!from) { - if(output.length>i){ - output.splice(i, 0, column); - }else{ - output.push(column); - } - } - }); - - return output; -}; - -//find matching columns -Persistence.prototype._findColumn = function(columns, subject){ - var type = subject.columns ? "group" : (subject.field ? "field" : "object"); - - return columns.find(function(col){ - switch(type){ - case "group": - return col.title === subject.title && col.columns.length === subject.columns.length; - break; - - case "field": - return col.field === subject.field; - break; - - case "object": - return col === subject; - break; - } - }); -}; - -//save data -Persistence.prototype.save = function(type){ - var data = {}; - - - switch(type){ - case "columns": - data = this.parseColumns(this.table.columnManager.getColumns()) - break; - - case "filter": - data = this.table.modules.filter.getFilters(); - break; - - case "sort": - data = this.validateSorters(this.table.modules.sort.getSort()); - break; - } - - var id = this.id + (type === "columns" ? "" : "-" + type); - - this.saveData(id, data); -}; - -//ensure sorters contain no function data -Persistence.prototype.validateSorters = function(data){ - data.forEach(function(item){ - item.column = item.field; - delete item.field; - }); - - return data; -}; - -//save data to chosed medium -Persistence.prototype.saveData = function(id, data){ - - data = JSON.stringify(data); - - switch(this.mode){ - case "local": - localStorage.setItem(id, data); - break; - - case "cookie": - let expireDate = new Date(); - expireDate.setDate(expireDate.getDate() + 10000); - - //save cookie - document.cookie = id + "=" + data + "; expires=" + expireDate.toUTCString(); - break; - - default: - console.warn("Persistance Save Error - invalid mode selected", this.mode); - } -}; - -//build premission list -Persistence.prototype.parseColumns = function(columns){ - var self = this, - definitions = []; - - columns.forEach(function(column){ - var def = {}; - - if(column.isGroup){ - def.title = column.getDefinition().title; - def.columns = self.parseColumns(column.getColumns()); - }else{ - def.title = column.getDefinition().title; - def.field = column.getField(); - def.width = column.getWidth(); - def.visible = column.visible; - } - - definitions.push(def); - }); - - return definitions; -}; - -Tabulator.prototype.registerModule("persistence", Persistence); diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/resize_columns.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/resize_columns.js deleted file mode 100644 index a74f101fec..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/resize_columns.js +++ /dev/null @@ -1,147 +0,0 @@ -var ResizeColumns = function(table){ - this.table = table; //hold Tabulator object - this.startColumn = false; - this.startX = false; - this.startWidth = false; - this.handle = null; - this.prevHandle = null; -}; - -ResizeColumns.prototype.initializeColumn = function(type, column, element){ - var self = this, - variableHeight =false, - mode = this.table.options.resizableColumns; - - //set column resize mode - if(type === "header"){ - variableHeight = column.definition.formatter == "textarea" || column.definition.variableHeight; - column.modules.resize = {variableHeight:variableHeight}; - } - - if(mode === true || mode == type){ - - var handle = document.createElement('div'); - handle.className = "tabulator-col-resize-handle"; - - - var prevHandle = document.createElement('div'); - prevHandle.className = "tabulator-col-resize-handle prev"; - - handle.addEventListener("click", function(e){ - e.stopPropagation(); - }); - - handle.addEventListener("mousedown", function(e){ - var nearestColumn = column.getLastColumn(); - - if(nearestColumn && self._checkResizability(nearestColumn)){ - self.startColumn = column; - self._mouseDown(e, nearestColumn); - } - }); - - //reszie column on double click - handle.addEventListener("dblclick", function(e){ - if(self._checkResizability(column)){ - column.reinitializeWidth(true); - } - }); - - - prevHandle.addEventListener("click", function(e){ - e.stopPropagation(); - }); - - prevHandle.addEventListener("mousedown", function(e){ - var nearestColumn, colIndex, prevColumn; - - nearestColumn = column.getFirstColumn(); - - if(nearestColumn){ - colIndex = self.table.columnManager.findColumnIndex(nearestColumn); - prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false; - - if(prevColumn && self._checkResizability(prevColumn)){ - self.startColumn = column; - self._mouseDown(e, prevColumn); - } - } - }); - - //resize column on double click - prevHandle.addEventListener("dblclick", function(e){ - var nearestColumn, colIndex, prevColumn; - - nearestColumn = column.getFirstColumn(); - - if(nearestColumn){ - colIndex = self.table.columnManager.findColumnIndex(nearestColumn); - prevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false; - - if(prevColumn && self._checkResizability(prevColumn)){ - prevColumn.reinitializeWidth(true); - } - } - }); - - element.appendChild(handle); - element.appendChild(prevHandle); - } -}; - - -ResizeColumns.prototype._checkResizability = function(column){ - return typeof column.definition.resizable != "undefined" ? column.definition.resizable : this.table.options.resizableColumns; -}; - -ResizeColumns.prototype._mouseDown = function(e, column){ - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e){ - column.setWidth(self.startWidth + (e.screenX - self.startX)); - - if(!self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){ - column.checkCellHeights(); - } - } - - function mouseUp(e){ - - //block editor from taking action while resizing is taking place - if(self.startColumn.modules.edit){ - self.startColumn.modules.edit.blocked = false; - } - - if(self.table.browserSlow && column.modules.resize && column.modules.resize.variableHeight){ - column.checkCellHeights(); - } - - document.body.removeEventListener("mouseup", mouseUp); - document.body.removeEventListener("mousemove", mouseMove); - - self.table.element.classList.remove("tabulator-block-select"); - - if(self.table.options.persistentLayout && self.table.modExists("persistence", true)){ - self.table.modules.persistence.save("columns"); - } - - self.table.options.columnResized.call(self.table, self.startColumn.getComponent()); - } - - e.stopPropagation(); //prevent resize from interfereing with movable columns - - //block editor from taking action while resizing is taking place - if(self.startColumn.modules.edit){ - self.startColumn.modules.edit.blocked = true; - } - - self.startX = e.screenX; - self.startWidth = column.getWidth(); - - document.body.addEventListener("mousemove", mouseMove); - document.body.addEventListener("mouseup", mouseUp); -}; - -Tabulator.prototype.registerModule("resizeColumns", ResizeColumns); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/resize_rows.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/resize_rows.js deleted file mode 100644 index d95b313eb7..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/resize_rows.js +++ /dev/null @@ -1,85 +0,0 @@ -var ResizeRows = function(table){ - this.table = table; //hold Tabulator object - this.startColumn = false; - this.startY = false; - this.startHeight = false; - this.handle = null; - this.prevHandle = null; -}; - -ResizeRows.prototype.initializeRow = function(row){ - var self = this, - rowEl = row.getElement(); - - var handle = document.createElement('div'); - handle.className = "tabulator-row-resize-handle"; - - var prevHandle = document.createElement('div'); - prevHandle.className = "tabulator-row-resize-handle prev"; - - handle.addEventListener("click", function(e){ - e.stopPropagation(); - }); - - handle.addEventListener("mousedown", function(e){ - self.startRow = row; - self._mouseDown(e, row); - }); - - prevHandle.addEventListener("click", function(e){ - e.stopPropagation(); - }); - - prevHandle.addEventListener("mousedown", function(e){ - var prevRow = self.table.rowManager.prevDisplayRow(row); - - if(prevRow){ - self.startRow = prevRow; - self._mouseDown(e, prevRow); - } - }); - - rowEl.appendChild(handle); - rowEl.appendChild(prevHandle); -}; - -ResizeRows.prototype._mouseDown = function(e, row){ - var self = this; - - self.table.element.classList.add("tabulator-block-select"); - - function mouseMove(e){ - row.setHeight(self.startHeight + (e.screenY - self.startY)); - } - - function mouseUp(e){ - - // //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = false; - // } - - document.body.removeEventListener("mouseup", mouseMove); - document.body.removeEventListener("mousemove", mouseMove); - - self.table.element.classList.remove("tabulator-block-select"); - - self.table.options.rowResized.call(this.table, row.getComponent()); - } - - e.stopPropagation(); //prevent resize from interfereing with movable columns - - //block editor from taking action while resizing is taking place - // if(self.startColumn.modules.edit){ - // self.startColumn.modules.edit.blocked = true; - // } - - self.startY = e.screenY; - self.startHeight = row.getHeight(); - - document.body.addEventListener("mousemove", mouseMove); - - document.body.addEventListener("mouseup", mouseUp); -}; - -Tabulator.prototype.registerModule("resizeRows", ResizeRows); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/resize_table.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/resize_table.js deleted file mode 100644 index 6c019f6043..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/resize_table.js +++ /dev/null @@ -1,36 +0,0 @@ -var ResizeTable = function(table){ - this.table = table; //hold Tabulator object - this.binding = false; - this.observer = false; -}; - -ResizeTable.prototype.initialize = function(row){ - var table = this.table, - observer; - - if(typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual"){ - this.observer = new ResizeObserver(function(entry){ - table.redraw(); - }); - - this.observer.observe(table.element); - }else{ - this.binding = function(){ - table.redraw(); - }; - - window.addEventListener("resize", this.binding); - } -}; - -ResizeTable.prototype.clearBindings = function(row){ - if(this.binding){ - window.removeEventListener("resize", this.binding); - } - - if(this.observer){ - this.observer.unobserve(this.table.element); - } -}; - -Tabulator.prototype.registerModule("resizeTable", ResizeTable); \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/responsive_layout.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/responsive_layout.js deleted file mode 100644 index db3748177f..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/responsive_layout.js +++ /dev/null @@ -1,242 +0,0 @@ -var ResponsiveLayout = function(table){ - this.table = table; //hold Tabulator object - this.columns = []; - this.hiddenColumns = []; - this.mode = ""; - this.index = 0; - this.collapseFormatter = []; - this.collapseStartOpen = true; -}; - -//generate resposive columns list -ResponsiveLayout.prototype.initialize = function(){ - var self = this, - columns = []; - - this.mode = this.table.options.responsiveLayout; - this.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData; - this.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen; - this.hiddenColumns = []; - - //detemine level of responsivity for each column - this.table.columnManager.columnsByIndex.forEach(function(column, i){ - if(column.modules.responsive){ - if(column.modules.responsive.order && column.modules.responsive.visible){ - column.modules.responsive.index = i; - columns.push(column); - - if(!column.visible && self.mode === "collapse"){ - self.hiddenColumns.push(column); - } - } - } - }); - - //sort list by responsivity - columns = columns.reverse(); - columns = columns.sort(function(a, b){ - var diff = b.modules.responsive.order - a.modules.responsive.order; - return diff || (b.modules.responsive.index - a.modules.responsive.index); - }); - - this.columns = columns; - - if(this.mode === "collapse"){ - this.generateCollapsedContent(); - } -}; - -//define layout information -ResponsiveLayout.prototype.initializeColumn = function(column){ - var def = column.getDefinition(); - - column.modules.responsive = {order: typeof def.responsive === "undefined" ? 1 : def.responsive, visible:def.visible === false ? false : true}; -}; - -ResponsiveLayout.prototype.layoutRow = function(row){ - var rowEl = row.getElement(), - el = document.createElement("div"); - - el.classList.add("tabulator-responsive-collapse"); - - if(!rowEl.classList.contains("tabulator-calcs")){ - row.modules.responsiveLayout = { - element:el, - }; - - if(!this.collapseStartOpen){ - el.style.display = 'none'; - } - - rowEl.appendChild(el); - - this.generateCollapsedRowContent(row); - } -}; - -//update column visibility -ResponsiveLayout.prototype.updateColumnVisibility = function(column, visible){ - var index; - if(column.modules.responsive){ - column.modules.responsive.visible = visible; - this.initialize(); - } -}; - -ResponsiveLayout.prototype.hideColumn = function(column){ - column.hide(false, true); - - if(this.mode === "collapse"){ - this.hiddenColumns.unshift(column); - this.generateCollapsedContent(); - } -}; - -ResponsiveLayout.prototype.showColumn = function(column){ - var index; - - column.show(false, true); - //set column width to prevent calculation loops on uninitialized columns - column.setWidth(column.getWidth()); - - if(this.mode === "collapse"){ - index = this.hiddenColumns.indexOf(column); - - if(index > -1){ - this.hiddenColumns.splice(index, 1); - } - - this.generateCollapsedContent(); - } -}; - -//redraw columns to fit space -ResponsiveLayout.prototype.update = function(){ - var self = this, - working = true; - - while(working){ - - let width = self.table.modules.layout.getMode() == "fitColumns" ? self.table.columnManager.getFlexBaseWidth() : self.table.columnManager.getWidth(); - - let diff = self.table.columnManager.element.clientWidth - width; - - if(diff < 0){ - //table is too wide - let column = self.columns[self.index]; - - if(column){ - self.hideColumn(column); - self.index ++; - }else{ - working = false; - } - - }else{ - - //table has spare space - let column = self.columns[self.index -1]; - - if(column){ - if(diff > 0){ - if(diff >= column.getWidth()){ - self.showColumn(column); - self.index --; - }else{ - working = false; - } - }else{ - working = false; - } - }else{ - working = false; - } - } - - if(!self.table.rowManager.activeRowsCount){ - self.table.rowManager.renderEmptyScroll(); - } - } -}; - -ResponsiveLayout.prototype.generateCollapsedContent = function(){ - var self = this, - rows = this.table.rowManager.getDisplayRows(); - - rows.forEach(function(row){ - self.generateCollapsedRowContent(row); - }); -}; - -ResponsiveLayout.prototype.generateCollapsedRowContent = function(row){ - var el, contents; - - if(row.modules.responsiveLayout){ - el = row.modules.responsiveLayout.element; - - while(el.firstChild) el.removeChild(el.firstChild); - - contents = this.collapseFormatter(this.generateCollapsedRowData(row)); - - if(contents){ - el.appendChild(contents); - } - } -}; - -ResponsiveLayout.prototype.generateCollapsedRowData = function(row){ - var self = this, - data = row.getData(), - output = {}, - mockCellComponent; - - this.hiddenColumns.forEach(function(column){ - var value = column.getFieldValue(data); - - if(column.definition.title && column.field){ - if(column.modules.format && self.table.options.responsiveLayoutCollapseUseFormatters){ - - mockCellComponent = { - value:false, - data:{}, - getValue:function(){ - return value; - }, - getData:function(){ - return data; - }, - getElement:function(){ - return document.createElement("div"); - }, - getRow:function(){ - return row.getComponent(); - }, - getColumn:function(){ - return column.getComponent(); - }, - }; - - output[column.definition.title] = column.modules.format.formatter.call(self.table.modules.format, mockCellComponent, column.modules.format.params); - }else{ - output[column.definition.title] = value; - } - } - }); - - return output; -}; - -ResponsiveLayout.prototype.formatCollapsedData = function(data){ - var list = document.createElement("table"), - listContents = ""; - - for(var key in data){ - listContents += "" + key + "" + data[key] + ""; - } - - list.innerHTML = listContents; - - return Object.keys(data).length ? list : ""; -}; - -Tabulator.prototype.registerModule("responsiveLayout", ResponsiveLayout); diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/select_row.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/select_row.js deleted file mode 100644 index 29002faebc..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/select_row.js +++ /dev/null @@ -1,293 +0,0 @@ -var SelectRow = function(table){ - this.table = table; //hold Tabulator object - this.selecting = false; //flag selecting in progress - this.lastClickedRow = false; //last clicked row - this.selectPrev = []; //hold previously selected element for drag drop selection - this.selectedRows = []; //hold selected rows -}; - -SelectRow.prototype.clearSelectionData = function(silent){ - this.selecting = false; - this.lastClickedRow = false; - this.selectPrev = []; - this.selectedRows = []; - - if(!silent){ - this._rowSelectionChanged(); - } -}; - -SelectRow.prototype.initializeRow = function(row){ - var self = this, - element = row.getElement(); - - // trigger end of row selection - var endSelect = function(){ - - setTimeout(function(){ - self.selecting = false; - }, 50); - - document.body.removeEventListener("mouseup", endSelect); - }; - - - row.modules.select = {selected:false}; - - //set row selection class - if(self.table.options.selectableCheck.call(this.table, row.getComponent())){ - element.classList.add("tabulator-selectable"); - element.classList.remove("tabulator-unselectable"); - - if(self.table.options.selectable && self.table.options.selectable != "highlight"){ - if(self.table.options.selectableRangeMode && self.table.options.selectableRangeMode === "click"){ - element.addEventListener("click", function(e){ - if(e.shiftKey){ - self.lastClickedRow = self.lastClickedRow || row; - - var lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow); - var rowIdx = self.table.rowManager.getDisplayRowIndex(row); - - var fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx; - var toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx; - - var rows = self.table.rowManager.getDisplayRows().slice(0); - var toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1); - - if(e.ctrlKey){ - toggledRows.forEach(function(toggledRow){ - if(toggledRow !== self.lastClickedRow){ - self.toggleRow(toggledRow) - } - }); - self.lastClickedRow = row; - }else{ - self.deselectRows(); - self.selectRows(toggledRows); - } - } - else if(e.ctrlKey){ - self.toggleRow(row); - self.lastClickedRow = row; - }else{ - self.deselectRows(); - self.selectRows(row); - self.lastClickedRow = row; - } - }); - }else{ - element.addEventListener("click", function(e){ - if(!self.selecting){ - self.toggleRow(row); - } - }); - - element.addEventListener("mousedown", function(e){ - if(e.shiftKey){ - self.selecting = true; - - self.selectPrev = []; - - document.body.addEventListener("mouseup", endSelect); - document.body.addEventListener("keyup", endSelect); - - self.toggleRow(row); - - return false; - } - }); - - element.addEventListener("mouseenter", function(e){ - if(self.selecting){ - self.toggleRow(row); - - if(self.selectPrev[1] == row){ - self.toggleRow(self.selectPrev[0]); - } - } - }); - - element.addEventListener("mouseout", function(e){ - if(self.selecting){ - self.selectPrev.unshift(row); - } - }); - } - } - - }else{ - element.classList.add("tabulator-unselectable"); - element.classList.remove("tabulator-selectable"); - } -}; - -//toggle row selection -SelectRow.prototype.toggleRow = function(row){ - if(this.table.options.selectableCheck.call(this.table, row.getComponent())){ - if(row.modules.select.selected){ - this._deselectRow(row); - }else{ - this._selectRow(row); - } - } -}; - -//select a number of rows -SelectRow.prototype.selectRows = function(rows){ - var self = this; - - switch(typeof rows){ - case "undefined": - self.table.rowManager.rows.forEach(function(row){ - self._selectRow(row, false, true); - }); - - self._rowSelectionChanged(); - break; - - case "boolean": - if(rows === true){ - self.table.rowManager.activeRows.forEach(function(row){ - self._selectRow(row, false, true); - }); - - self._rowSelectionChanged(); - } - break; - - default: - if(Array.isArray(rows)){ - rows.forEach(function(row){ - self._selectRow(row); - }); - - self._rowSelectionChanged(); - }else{ - self._selectRow(rows); - } - break; - } -}; - -//select an individual row -SelectRow.prototype._selectRow = function(rowInfo, silent, force){ - var index; - - //handle max row count - if(!isNaN(this.table.options.selectable) && this.table.options.selectable !== true && !force){ - if(this.selectedRows.length >= this.table.options.selectable){ - if(this.table.options.selectableRollingSelection){ - this._deselectRow(this.selectedRows[0]); - }else{ - return false; - } - } - } - - var row = this.table.rowManager.findRow(rowInfo); - - if(row){ - if(this.selectedRows.indexOf(row) == -1){ - row.modules.select.selected = true; - row.getElement().classList.add("tabulator-selected"); - - this.selectedRows.push(row); - - if(!silent){ - this.table.options.rowSelected.call(this.table, row.getComponent()); - this._rowSelectionChanged(); - } - } - }else{ - if(!silent){ - console.warn("Selection Error - No such row found, ignoring selection:" + rowInfo); - } - } -}; - -SelectRow.prototype.isRowSelected = function(row){ - return this.selectedRows.indexOf(row) !== -1; -}; - -//deselect a number of rows -SelectRow.prototype.deselectRows = function(rows){ - var self = this, - rowCount; - - if(typeof rows == "undefined"){ - - rowCount = self.selectedRows.length; - - for(let i = 0; i < rowCount; i++){ - self._deselectRow(self.selectedRows[0], false); - } - - self._rowSelectionChanged(); - }else{ - if(Array.isArray(rows)){ - rows.forEach(function(row){ - self._deselectRow(row); - }); - - self._rowSelectionChanged(); - }else{ - self._deselectRow(rows); - } - } -}; - -//deselect an individual row -SelectRow.prototype._deselectRow = function(rowInfo, silent){ - var self = this, - row = self.table.rowManager.findRow(rowInfo), - index; - - if(row){ - index = self.selectedRows.findIndex(function(selectedRow){ - return selectedRow == row; - }); - - if(index > -1){ - - row.modules.select.selected = false; - row.getElement().classList.remove("tabulator-selected"); - self.selectedRows.splice(index, 1); - - if(!silent){ - self.table.options.rowDeselected.call(this.table, row.getComponent()); - self._rowSelectionChanged(); - } - } - }else{ - if(!silent){ - console.warn("Deselection Error - No such row found, ignoring selection:" + rowInfo); - } - } -}; - -SelectRow.prototype.getSelectedData = function(){ - var data = []; - - this.selectedRows.forEach(function(row){ - data.push(row.getData()); - }); - - return data; -}; - -SelectRow.prototype.getSelectedRows = function(){ - - var rows = []; - - this.selectedRows.forEach(function(row){ - rows.push(row.getComponent()); - }); - - return rows; -}; - -SelectRow.prototype._rowSelectionChanged = function(){ - this.table.options.rowSelectionChanged.call(this.table, this.getSelectedData(), this.getSelectedRows()); -}; - -Tabulator.prototype.registerModule("selectRow", SelectRow); diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/sort.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/sort.js deleted file mode 100644 index 3d36374e41..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/sort.js +++ /dev/null @@ -1,522 +0,0 @@ -var Sort = function(table){ - this.table = table; //hold Tabulator object - this.sortList = []; //holder current sort - this.changed = false; //has the sort changed since last render - }; - -//initialize column header for sorting -Sort.prototype.initializeColumn = function(column, content){ - var self = this, - sorter = false, - colEl, - arrowEl; - - - switch(typeof column.definition.sorter){ - case "string": - if(self.sorters[column.definition.sorter]){ - sorter = self.sorters[column.definition.sorter]; - }else{ - console.warn("Sort Error - No such sorter found: ", column.definition.sorter); - } - break; - - case "function": - sorter = column.definition.sorter; - break; - } - - column.modules.sort = { - sorter:sorter, dir:"none", - params:column.definition.sorterParams || {}, - startingDir:column.definition.headerSortStartingDir || "asc", - }; - - if(column.definition.headerSort !== false){ - - colEl = column.getElement(); - - colEl.classList.add("tabulator-sortable"); - - - arrowEl = document.createElement("div"); - arrowEl.classList.add("tabulator-arrow"); - //create sorter arrow - content.appendChild(arrowEl); - - //sort on click - colEl.addEventListener("click", function(e){ - var dir = "", - sorters=[], - match = false; - - if(column.modules.sort){ - dir = column.modules.sort.dir == "asc" ? "desc" : (column.modules.sort.dir == "desc" ? "asc" : column.modules.sort.startingDir); - - if (self.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) { - sorters = self.getSort(); - - - match = sorters.findIndex(function(sorter){ - return sorter.field === column.getField(); - }); - - if(match > -1){ - sorters[match].dir = sorters[match].dir == "asc" ? "desc" : "asc"; - - if(match != sorters.length -1){ - sorters.push(sorters.splice(match, 1)[0]); - } - }else{ - sorters.push({column:column, dir:dir}); - } - - //add to existing sort - self.setSort(sorters); - }else{ - //sort by column only - self.setSort(column, dir); - } - - self.table.rowManager.sorterRefresh(); - } - }); - } -}; - -//check if the sorters have changed since last use -Sort.prototype.hasChanged = function(){ - var changed = this.changed; - this.changed = false; - return changed; -}; - -//return current sorters -Sort.prototype.getSort = function(){ - var self = this, - sorters = []; - - self.sortList.forEach(function(item){ - if(item.column){ - sorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir}); - } - }); - - return sorters; -}; - -//change sort list and trigger sort -Sort.prototype.setSort = function(sortList, dir){ - var self = this, - newSortList = []; - - if(!Array.isArray(sortList)){ - sortList = [{column: sortList, dir:dir}]; - } - - sortList.forEach(function(item){ - var column; - - column = self.table.columnManager.findColumn(item.column); - - if(column){ - item.column = column; - newSortList.push(item); - self.changed = true; - }else{ - console.warn("Sort Warning - Sort field does not exist and is being ignored: ", item.column); - } - - }); - - self.sortList = newSortList; - - if(this.table.options.persistentSort && this.table.modExists("persistence", true)){ - this.table.modules.persistence.save("sort"); - } -}; - -//clear sorters -Sort.prototype.clear = function(){ - this.setSort([]); -}; - -//find appropriate sorter for column -Sort.prototype.findSorter = function(column){ - var row = this.table.rowManager.activeRows[0], - sorter = "string", - field, value; - - if(row){ - row = row.getData(); - field = column.getField(); - - if(field){ - - value = column.getFieldValue(row); - - switch(typeof value){ - case "undefined": - sorter = "string"; - break; - - case "boolean": - sorter = "boolean"; - break; - - default: - if(!isNaN(value) && value !== ""){ - sorter = "number"; - }else{ - if(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){ - sorter = "alphanum"; - } - } - break; - } - } - } - - return this.sorters[sorter]; -}; - -//work through sort list sorting data -Sort.prototype.sort = function(){ - var self = this, lastSort, sortList; - - sortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList; - - if(self.table.options.dataSorting){ - self.table.options.dataSorting.call(self.table, self.getSort()); - } - - self.clearColumnHeaders(); - - if(!self.table.options.ajaxSorting){ - - sortList.forEach(function(item, i){ - - if(item.column && item.column.modules.sort){ - - //if no sorter has been defined, take a guess - if(!item.column.modules.sort.sorter){ - item.column.modules.sort.sorter = self.findSorter(item.column); - } - - self._sortItem(item.column, item.dir, sortList, i); - } - - self.setColumnHeader(item.column, item.dir); - }); - }else{ - sortList.forEach(function(item, i){ - self.setColumnHeader(item.column, item.dir); - }); - } - - if(self.table.options.dataSorted){ - self.table.options.dataSorted.call(self.table, self.getSort(), self.table.rowManager.getComponents(true)); - } - -}; - -//clear sort arrows on columns -Sort.prototype.clearColumnHeaders = function(){ - this.table.columnManager.getRealColumns().forEach(function(column){ - if(column.modules.sort){ - column.modules.sort.dir = "none"; - column.getElement().setAttribute("aria-sort", "none"); - } - }); -}; - -//set the column header sort direction -Sort.prototype.setColumnHeader = function(column, dir){ - column.modules.sort.dir = dir; - column.getElement().setAttribute("aria-sort", dir); -}; - -//sort each item in sort list -Sort.prototype._sortItem = function(column, dir, sortList, i){ - var self = this; - - var activeRows = self.table.rowManager.activeRows; - - var params = typeof column.modules.sort.params === "function" ? column.modules.sort.params(column.getComponent(), dir) : column.modules.sort.params; - - activeRows.sort(function(a, b){ - - var result = self._sortRow(a, b, column, dir, params); - - //if results match recurse through previous searchs to be sure - if(result === 0 && i){ - for(var j = i-1; j>= 0; j--){ - result = self._sortRow(a, b, sortList[j].column, sortList[j].dir, params); - - if(result !== 0){ - break; - } - } - } - - return result; - }); -}; - -//process individual rows for a sort function on active data -Sort.prototype._sortRow = function(a, b, column, dir, params){ - var el1Comp, el2Comp, colComp; - - //switch elements depending on search direction - var el1 = dir == "asc" ? a : b; - var el2 = dir == "asc" ? b : a; - - a = column.getFieldValue(el1.getData()); - b = column.getFieldValue(el2.getData()); - - a = typeof a !== "undefined" ? a : ""; - b = typeof b !== "undefined" ? b : ""; - - el1Comp = el1.getComponent(); - el2Comp = el2.getComponent(); - - return column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params); -}; - - -//default data sorters -Sort.prototype.sorters = { - - //sort numbers - number:function(a, b, aRow, bRow, column, dir, params){ - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - a = parseFloat(String(a).replace(",","")); - b = parseFloat(String(b).replace(",","")); - - //handle non numeric values - if(isNaN(a)){ - emptyAlign = isNaN(b) ? 0 : -1; - }else if(isNaN(b)){ - emptyAlign = 1; - }else{ - //compare valid values - return a - b; - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort strings - string:function(a, b, aRow, bRow, column, dir, params){ - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - var locale; - - //handle empty values - if(!a){ - emptyAlign = !b ? 0 : -1; - }else if(!b){ - emptyAlign = 1; - }else{ - //compare valid values - switch(typeof params.locale){ - case "boolean": - if(params.locale){ - locale = this.table.modules.localize.getLocale(); - } - break; - case "string": - locale = params.locale; - break; - } - - return String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale); - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; - }, - - //sort date - date:function(a, b, aRow, bRow, column, dir, params){ - if(!params.format){ - params.format = "DD/MM/YYYY"; - } - - return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params); - }, - - //sort hh:mm formatted times - time:function(a, b, aRow, bRow, column, dir, params){ - if(!params.format){ - params.format = "hh:mm"; - } - - return this.sorters.datetime.call(this, a, b, aRow, bRow, column, dir, params); - }, - - //sort datetime - datetime:function(a, b, aRow, bRow, column, dir, params){ - var format = params.format || "DD/MM/YYYY hh:mm:ss", - alignEmptyValues = params.alignEmptyValues, - emptyAlign = 0; - - if(typeof moment != "undefined"){ - a = moment(a, format); - b = moment(b, format); - - if(!a.isValid()){ - emptyAlign = !b.isValid() ? 0 : -1; - }else if(!b.isValid()){ - emptyAlign = 1; - }else{ - //compare valid values - return a - b; - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; - - }else{ - console.error("Sort Error - 'datetime' sorter is dependant on moment.js"); - } - }, - - //sort booleans - boolean:function(a, b, aRow, bRow, column, dir, params){ - var el1 = a === true || a === "true" || a === "True" || a === 1 ? 1 : 0; - var el2 = b === true || b === "true" || b === "True" || b === 1 ? 1 : 0; - - return el1 - el2; - }, - - //sort if element contains any data - array:function(a, b, aRow, bRow, column, dir, params){ - var el1 = 0; - var el2 = 0; - var type = params.type || "length"; - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - function calc(value){ - - switch(type){ - case "length": - return value.length; - break; - - case "sum": - return value.reduce(function(c, d){ - return c + d; - }); - break; - - case "max": - return Math.max.apply(null, value) ; - break; - - case "min": - return Math.min.apply(null, value) ; - break; - - case "avg": - return value.reduce(function(c, d){ - return c + d; - }) / value.length; - break; - } - } - - //handle non array values - if(!Array.isArray(a)){ - alignEmptyValues = !Array.isArray(b) ? 0 : -1; - }else if(!Array.isArray(b)){ - alignEmptyValues = 1; - }else{ - - //compare valid values - el1 = a ? calc(a) : 0; - el2 = b ? calc(b) : 0; - - return el1 - el2; - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; - }, - - - //sort if element contains any data - exists:function(a, b, aRow, bRow, column, dir, params){ - var el1 = typeof a == "undefined" ? 0 : 1; - var el2 = typeof b == "undefined" ? 0 : 1; - - return el1 - el2; - }, - - //sort alpha numeric strings - alphanum:function(as, bs, aRow, bRow, column, dir, params){ - var a, b, a1, b1, i= 0, L, rx = /(\d+)|(\D+)/g, rd = /\d/; - var alignEmptyValues = params.alignEmptyValues; - var emptyAlign = 0; - - //handle empty values - if(!as && as!== 0){ - emptyAlign = !bs && bs!== 0 ? 0 : -1; - }else if(!bs && bs!== 0){ - emptyAlign = 1; - }else{ - - if(isFinite(as) && isFinite(bs)) return as - bs; - a = String(as).toLowerCase(); - b = String(bs).toLowerCase(); - if(a === b) return 0; - if(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1; - a = a.match(rx); - b = b.match(rx); - L = a.length > b.length ? b.length : a.length; - while(i < L){ - a1= a[i]; - b1= b[i++]; - if(a1 !== b1){ - if(isFinite(a1) && isFinite(b1)){ - if(a1.charAt(0) === "0") a1 = "." + a1; - if(b1.charAt(0) === "0") b1 = "." + b1; - return a1 - b1; - } - else return a1 > b1 ? 1 : -1; - } - } - - return a.length > b.length; - } - - //fix empty values in position - if((alignEmptyValues === "top" && dir === "desc") || (alignEmptyValues === "bottom" && dir === "asc")){ - emptyAlign *= -1; - } - - return emptyAlign; - }, -}; - -Tabulator.prototype.registerModule("sort", Sort); diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/validate.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/validate.js deleted file mode 100644 index 5276ba3680..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules/validate.js +++ /dev/null @@ -1,211 +0,0 @@ -var Validate = function(table){ - this.table = table; -}; - -//validate -Validate.prototype.initializeColumn = function(column){ - var self = this, - config = [], - validator; - - if(column.definition.validator){ - - if(Array.isArray(column.definition.validator)){ - column.definition.validator.forEach(function(item){ - validator = self._extractValidator(item); - - if(validator){ - config.push(validator); - } - }); - - }else{ - validator = this._extractValidator(column.definition.validator); - - if(validator){ - config.push(validator); - } - } - - column.modules.validate = config.length ? config : false; - } -}; - -Validate.prototype._extractValidator = function(value){ - var parts, type, params; - - switch(typeof value){ - case "string": - parts = value.split(":",2); - type = parts.shift(); - params = parts[0]; - - return this._buildValidator(type, params); - break; - - case "function": - return this._buildValidator(value); - break; - - case "object": - return this._buildValidator(value.type, value.parameters); - break; - } -}; - -Validate.prototype._buildValidator = function(type, params){ - - var func = typeof type == "function" ? type : this.validators[type]; - - if(!func){ - console.warn("Validator Setup Error - No matching validator found:", type); - return false; - }else{ - return { - type:typeof type == "function" ? "function" : type, - func:func, - params:params, - }; - } -}; - - -Validate.prototype.validate = function(validators, cell, value){ - var self = this, - valid = []; - - if(validators){ - validators.forEach(function(item){ - if(!item.func.call(self, cell, value, item.params)){ - valid.push({ - type:item.type, - parameters:item.params - }); - } - }); - } - - return valid.length ? valid : true; -}; - -Validate.prototype.validators = { - - //is integer - integer: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - value = Number(value); - return typeof value === 'number' && isFinite(value) && Math.floor(value) === value; - }, - - //is float - float: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - value = Number(value); - return typeof value === 'number' && isFinite(value) && value % 1 !== 0; - }, - - //must be a number - numeric: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return !isNaN(value); - }, - - //must be a string - string: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return isNaN(value); - }, - - //maximum value - max: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return parseFloat(value) <= parameters; - }, - - //minimum value - min: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return parseFloat(value) >= parameters; - }, - - //minimum string length - minLength: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).length >= parameters; - }, - - //maximum string length - maxLength: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - return String(value).length <= parameters; - }, - - //in provided value list - in: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - if(typeof parameters == "string"){ - parameters = parameters.split("|"); - } - - return value === "" || parameters.indexOf(value) > -1; - }, - - //must match provided regex - regex: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - var reg = new RegExp(parameters); - - return reg.test(value); - }, - - //value must be unique in this column - unique: function(cell, value, parameters){ - if(value === "" || value === null || typeof value === "undefined"){ - return true; - } - var unique = true; - - var cellData = cell.getData(); - var column = cell.getColumn()._getSelf(); - - this.table.rowManager.rows.forEach(function(row){ - var data = row.getData(); - - if(data !== cellData){ - if(value == column.getFieldValue(data)){ - unique = false; - } - } - }); - - return unique; - }, - - //must have a value - required:function(cell, value, parameters){ - return value !== "" & value !== null && typeof value !== "undefined"; - }, -}; - - -Tabulator.prototype.registerModule("validate", Validate); diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules_enabled.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules_enabled.js deleted file mode 100644 index a83a22a56b..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/modules_enabled.js +++ /dev/null @@ -1,27 +0,0 @@ -/*=include modules/accessor.js */ -/*=include modules/ajax.js */ -/*=include modules/calculation_colums.js */ -/*=include modules/clipboard.js */ -/*=include modules/data_tree.js */ -/*=include modules/download.js */ -/*=include modules/edit.js */ -/*=include modules/filter.js */ -/*=include modules/format.js */ -/*=include modules/frozen_columns.js */ -/*=include modules/frozen_rows.js */ -/*=include modules/group_rows.js */ -/*=include modules/history.js */ -/*=include modules/html_table_import.js */ -/*=include modules/keybindings.js */ -/*=include modules/moveable_columns.js */ -/*=include modules/moveable_rows.js */ -/*=include modules/mutator.js */ -/*=include modules/page.js */ -/*=include modules/persistence.js */ -/*=include modules/resize_columns.js */ -/*=include modules/resize_rows.js */ -/*=include modules/resize_table.js */ -/*=include modules/responsive_layout.js */ -/*=include modules/select_row.js */ -/*=include modules/sort.js */ -/*=include modules/validate.js */ \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/polyfills.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/polyfills.js deleted file mode 100644 index 965d6a4c12..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/polyfills.js +++ /dev/null @@ -1,92 +0,0 @@ - - - -// https://tc39.github.io/ecma262/#sec-array.prototype.findIndex -if (!Array.prototype.findIndex) { - Object.defineProperty(Array.prototype, 'findIndex', { - value: function(predicate) { - // 1. Let O be ? ToObject(this value). - if (this == null) { - throw new TypeError('"this" is null or not defined'); - } - - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - var len = o.length >>> 0; - - // 3. If IsCallable(predicate) is false, throw a TypeError exception. - if (typeof predicate !== 'function') { - throw new TypeError('predicate must be a function'); - } - - // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. - var thisArg = arguments[1]; - - // 5. Let k be 0. - var k = 0; - - // 6. Repeat, while k < len - while (k < len) { - // a. Let Pk be ! ToString(k). - // b. Let kValue be ? Get(O, Pk). - // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). - // d. If testResult is true, return k. - var kValue = o[k]; - if (predicate.call(thisArg, kValue, k, o)) { - return k; - } - // e. Increase k by 1. - k++; - } - - // 7. Return -1. - return -1; - } - }); -} - -// https://tc39.github.io/ecma262/#sec-array.prototype.find -if (!Array.prototype.find) { - Object.defineProperty(Array.prototype, 'find', { - value: function(predicate) { - // 1. Let O be ? ToObject(this value). - if (this == null) { - throw new TypeError('"this" is null or not defined'); - } - - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - var len = o.length >>> 0; - - // 3. If IsCallable(predicate) is false, throw a TypeError exception. - if (typeof predicate !== 'function') { - throw new TypeError('predicate must be a function'); - } - - // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. - var thisArg = arguments[1]; - - // 5. Let k be 0. - var k = 0; - - // 6. Repeat, while k < len - while (k < len) { - // a. Let Pk be ! ToString(k). - // b. Let kValue be ? Get(O, Pk). - // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). - // d. If testResult is true, return kValue. - var kValue = o[k]; - if (predicate.call(thisArg, kValue, k, o)) { - return kValue; - } - // e. Increase k by 1. - k++; - } - - // 7. Return undefined. - return undefined; - } - }); -} \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/row.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/row.js deleted file mode 100644 index 1d8e401a6f..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/row.js +++ /dev/null @@ -1,681 +0,0 @@ - -//public row object -var RowComponent = function (row){ - this._row = row; -}; - -RowComponent.prototype.getData = function(transform){ - return this._row.getData(transform); -}; - -RowComponent.prototype.getElement = function(){ - return this._row.getElement(); -}; - -RowComponent.prototype.getCells = function(){ - var cells = []; - - this._row.getCells().forEach(function(cell){ - cells.push(cell.getComponent()); - }); - - return cells; -}; - -RowComponent.prototype.getCell = function(column){ - var cell = this._row.getCell(column); - return cell ? cell.getComponent() : false; -}; - -RowComponent.prototype.getIndex = function(){ - return this._row.getData("data")[this._row.table.options.index]; -}; - -RowComponent.prototype.getPosition = function(active){ - return this._row.table.rowManager.getRowPosition(this._row, active); -}; - -RowComponent.prototype.delete = function(){ - return this._row.delete(); -}; - -RowComponent.prototype.scrollTo = function(){ - return this._row.table.rowManager.scrollToRow(this._row); -}; - -RowComponent.prototype.update = function(data){ - return this._row.updateData(data); -}; - -RowComponent.prototype.normalizeHeight = function(){ - this._row.normalizeHeight(true); -}; - -RowComponent.prototype.select = function(){ - this._row.table.modules.selectRow.selectRows(this._row); -}; - -RowComponent.prototype.deselect = function(){ - this._row.table.modules.selectRow.deselectRows(this._row); -}; - -RowComponent.prototype.toggleSelect = function(){ - this._row.table.modules.selectRow.toggleRow(this._row); -}; - -RowComponent.prototype.isSelected = function(){ - return this._row.table.modules.selectRow.isRowSelected(this._row); -}; - -RowComponent.prototype._getSelf = function(){ - return this._row; -}; - -RowComponent.prototype.freeze = function(){ - if(this._row.table.modExists("frozenRows", true)){ - this._row.table.modules.frozenRows.freezeRow(this._row); - } -}; - -RowComponent.prototype.unfreeze = function(){ - if(this._row.table.modExists("frozenRows", true)){ - this._row.table.modules.frozenRows.unfreezeRow(this._row); - } -}; - -RowComponent.prototype.treeCollapse = function(){ - if(this._row.table.modExists("dataTree", true)){ - this._row.table.modules.dataTree.collapseRow(this._row); - } -}; - -RowComponent.prototype.treeExpand = function(){ - if(this._row.table.modExists("dataTree", true)){ - this._row.table.modules.dataTree.expandRow(this._row); - } -}; - -RowComponent.prototype.treeToggle = function(){ - if(this._row.table.modExists("dataTree", true)){ - this._row.table.modules.dataTree.toggleRow(this._row); - } -}; - -RowComponent.prototype.getTreeParent = function(){ - if(this._row.table.modExists("dataTree", true)){ - return this._row.table.modules.dataTree.getTreeParent(this._row); - } - - return false; -}; - -RowComponent.prototype.getTreeChildren = function(){ - if(this._row.table.modExists("dataTree", true)){ - return this._row.table.modules.dataTree.getTreeChildren(this._row); - } - - return false; -}; - -RowComponent.prototype.reformat = function(){ - return this._row.reinitialize(); -}; - -RowComponent.prototype.getGroup = function(){ - return this._row.getGroup().getComponent(); -}; - -RowComponent.prototype.getTable = function(){ - return this._row.table; -}; - -RowComponent.prototype.getNextRow = function(){ - return this._row.nextRow(); -}; - -RowComponent.prototype.getPrevRow = function(){ - return this._row.prevRow(); -}; - - -var Row = function(data, parent){ - this.table = parent.table; - this.parent = parent; - this.data = {}; - this.type = "row"; //type of element - this.element = this.createElement(); - this.modules = {}; //hold module variables; - this.cells = []; - this.height = 0; //hold element height - this.outerHeight = 0; //holde lements outer height - this.initialized = false; //element has been rendered - this.heightInitialized = false; //element has resized cells to fit - - this.setData(data); - this.generateElement(); -}; - -Row.prototype.createElement = function (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-row"); - el.setAttribute("role", "row"); - - return el; -}; - -Row.prototype.getElement = function(){ - return this.element; -}; - - -Row.prototype.generateElement = function(){ - var self = this, - dblTap, tapHold, tap; - - //set row selection characteristics - if(self.table.options.selectable !== false && self.table.modExists("selectRow")){ - self.table.modules.selectRow.initializeRow(this); - } - - //setup movable rows - if(self.table.options.movableRows !== false && self.table.modExists("moveRow")){ - self.table.modules.moveRow.initializeRow(this); - } - - //setup data tree - if(self.table.options.dataTree !== false && self.table.modExists("dataTree")){ - self.table.modules.dataTree.initializeRow(this); - } - - //handle row click events - if (self.table.options.rowClick){ - self.element.addEventListener("click", function(e){ - self.table.options.rowClick(e, self.getComponent()); - }); - } - - if (self.table.options.rowDblClick){ - self.element.addEventListener("dblclick", function(e){ - self.table.options.rowDblClick(e, self.getComponent()); - }); - } - - if (self.table.options.rowContext){ - self.element.addEventListener("contextmenu", function(e){ - self.table.options.rowContext(e, self.getComponent()); - }); - } - - if (self.table.options.rowTap){ - - tap = false; - - self.element.addEventListener("touchstart", function(e){ - tap = true; - }); - - self.element.addEventListener("touchend", function(e){ - if(tap){ - self.table.options.rowTap(e, self.getComponent()); - } - - tap = false; - }); - } - - if (self.table.options.rowDblTap){ - - dblTap = null; - - self.element.addEventListener("touchend", function(e){ - - if(dblTap){ - clearTimeout(dblTap); - dblTap = null; - - self.table.options.rowDblTap(e, self.getComponent()); - }else{ - - dblTap = setTimeout(function(){ - clearTimeout(dblTap); - dblTap = null; - }, 300); - } - - }); - } - - - if (self.table.options.rowTapHold){ - - tapHold = null; - - self.element.addEventListener("touchstart", function(e){ - clearTimeout(tapHold); - - tapHold = setTimeout(function(){ - clearTimeout(tapHold); - tapHold = null; - tap = false; - self.table.options.rowTapHold(e, self.getComponent()); - }, 1000); - - }); - - self.element.addEventListener("touchend", function(e){ - clearTimeout(tapHold); - tapHold = null; - }); - } -}; - -Row.prototype.generateCells = function(){ - this.cells = this.table.columnManager.generateCells(this); -}; - -//functions to setup on first render -Row.prototype.initialize = function(force){ - var self = this; - - if(!self.initialized || force){ - - self.deleteCells(); - - while(self.element.firstChild) self.element.removeChild(self.element.firstChild); - - //handle frozen cells - if(this.table.modExists("frozenColumns")){ - this.table.modules.frozenColumns.layoutRow(this); - } - - this.generateCells(); - - self.cells.forEach(function(cell){ - self.element.appendChild(cell.getElement()); - cell.cellRendered(); - }); - - if(force){ - self.normalizeHeight(); - } - - //setup movable rows - if(self.table.options.dataTree && self.table.modExists("dataTree")){ - self.table.modules.dataTree.layoutRow(this); - } - - //setup movable rows - if(self.table.options.responsiveLayout === "collapse" && self.table.modExists("responsiveLayout")){ - self.table.modules.responsiveLayout.layoutRow(this); - } - - if(self.table.options.rowFormatter){ - self.table.options.rowFormatter(self.getComponent()); - } - - //set resizable handles - if(self.table.options.resizableRows && self.table.modExists("resizeRows")){ - self.table.modules.resizeRows.initializeRow(self); - } - - self.initialized = true; - } -}; - -Row.prototype.reinitializeHeight = function(){ - this.heightInitialized = false; - - if(this.element.offsetParent !== null){ - this.normalizeHeight(true); - } -}; - - -Row.prototype.reinitialize = function(){ - this.initialized = false; - this.heightInitialized = false; - this.height = 0; - - if(this.element.offsetParent !== null){ - this.initialize(true); - } -}; - -//get heights when doing bulk row style calcs in virtual DOM -Row.prototype.calcHeight = function(){ - - var maxHeight = 0, - minHeight = this.table.options.resizableRows ? this.element.clientHeight : 0; - - this.cells.forEach(function(cell){ - var height = cell.getHeight(); - if(height > maxHeight){ - maxHeight = height; - } - }); - - this.height = Math.max(maxHeight, minHeight); - this.outerHeight = this.element.offsetHeight; -}; - -//set of cells -Row.prototype.setCellHeight = function(){ - var height = this.height; - - this.cells.forEach(function(cell){ - cell.setHeight(height); - }); - - this.heightInitialized = true; -}; - -Row.prototype.clearCellHeight = function(){ - this.cells.forEach(function(cell){ - - cell.clearHeight(); - }); -}; - -//normalize the height of elements in the row -Row.prototype.normalizeHeight = function(force){ - - if(force){ - this.clearCellHeight(); - } - - this.calcHeight(); - - this.setCellHeight(); -}; - -Row.prototype.setHeight = function(height){ - this.height = height; - - this.setCellHeight(); -}; - -//set height of rows -Row.prototype.setHeight = function(height, force){ - if(this.height != height || force){ - - this.height = height; - - this.setCellHeight(); - - // this.outerHeight = this.element.outerHeight(); - this.outerHeight = this.element.offsetHeight; - } -}; - -//return rows outer height -Row.prototype.getHeight = function(){ - return this.outerHeight; -}; - -//return rows outer Width -Row.prototype.getWidth = function(){ - return this.element.offsetWidth; -}; - - -//////////////// Cell Management ///////////////// - -Row.prototype.deleteCell = function(cell){ - var index = this.cells.indexOf(cell); - - if(index > -1){ - this.cells.splice(index, 1); - } -}; - -//////////////// Data Management ///////////////// - -Row.prototype.setData = function(data){ - var self = this; - - if(self.table.modExists("mutator")){ - self.data = self.table.modules.mutator.transformRow(data, "data"); - }else{ - self.data = data; - } -}; - -//update the rows data -Row.prototype.updateData = function(data){ - var self = this; - - return new Promise((resolve, reject) => { - - if(typeof data === "string"){ - data = JSON.parse(data); - } - - //mutate incomming data if needed - if(self.table.modExists("mutator")){ - data = self.table.modules.mutator.transformRow(data, "data", true); - } - - //set data - for (var attrname in data) { - self.data[attrname] = data[attrname]; - } - - //update affected cells only - for (var attrname in data) { - let cell = this.getCell(attrname); - - if(cell){ - if(cell.getValue() != data[attrname]){ - cell.setValueProcessData(data[attrname]); - } - } - } - - //Partial reinitialization if visible - if(Tabulator.prototype.helpers.elVisible(this.element)){ - self.normalizeHeight(); - - if(self.table.options.rowFormatter){ - self.table.options.rowFormatter(self.getComponent()); - } - }else{ - this.initialized = false; - this.height = 0; - } - - //self.reinitialize(); - - self.table.options.rowUpdated.call(this.table, self.getComponent()); - - resolve(); - }); -}; - -Row.prototype.getData = function(transform){ - var self = this; - - if(transform){ - if(self.table.modExists("accessor")){ - return self.table.modules.accessor.transformRow(self.data, transform); - } - }else{ - return this.data; - } - -}; - -Row.prototype.getCell = function(column){ - var match = false; - - column = this.table.columnManager.findColumn(column); - - match = this.cells.find(function(cell){ - return cell.column === column; - }); - - return match; -}; - -Row.prototype.getCellIndex = function(findCell){ - return this.cells.findIndex(function(cell){ - return cell === findCell; - }); -}; - - -Row.prototype.findNextEditableCell = function(index){ - var nextCell = false; - - if(index < this.cells.length-1){ - for(var i = index+1; i < this.cells.length; i++){ - let cell = this.cells[i]; - - if(cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())){ - let allowEdit = true; - - if(typeof cell.column.modules.edit.check == "function"){ - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - } - - if(allowEdit){ - nextCell = cell; - break; - } - } - } - } - - return nextCell; -}; - -Row.prototype.findPrevEditableCell = function(index){ - var prevCell = false; - - if(index > 0){ - for(var i = index-1; i >= 0; i--){ - let cell = this.cells[i], - allowEdit = true; - - if(cell.column.modules.edit && Tabulator.prototype.helpers.elVisible(cell.getElement())){ - if(typeof cell.column.modules.edit.check == "function"){ - allowEdit = cell.column.modules.edit.check(cell.getComponent()); - } - - if(allowEdit){ - prevCell = cell; - break; - } - } - } - } - - return prevCell; -}; - - -Row.prototype.getCells = function(){ - return this.cells; -}; - -Row.prototype.nextRow = function(){ - var row = this.table.rowManager.nextDisplayRow(this, true); - return row ? row.getComponent() : false; -}; - -Row.prototype.prevRow = function(){ - var row = this.table.rowManager.prevDisplayRow(this, true); - return row ? row.getComponent() : false; -}; - -///////////////////// Actions ///////////////////// - -Row.prototype.delete = function(){ - return new Promise((resolve, reject) => { - var index = this.table.rowManager.getRowIndex(this); - - this.deleteActual(); - - if(this.table.options.history && this.table.modExists("history")){ - - if(index){ - index = this.table.rowManager.rows[index-1]; - } - - this.table.modules.history.action("rowDelete", this, {data:this.getData(), pos:!index, index:index}); - } - - resolve(); - }); -}; - - -Row.prototype.deleteActual = function(){ - - var index = this.table.rowManager.getRowIndex(this); - - //deselect row if it is selected - if(this.table.modExists("selectRow")){ - this.table.modules.selectRow._deselectRow(this, true); - } - - // if(this.table.options.dataTree && this.table.modExists("dataTree")){ - // this.table.modules.dataTree.collapseRow(this, true); - // } - - this.table.rowManager.deleteRow(this); - - this.deleteCells(); - - this.initialized = false; - this.heightInitialized = false; - - //remove from group - if(this.modules.group){ - this.modules.group.removeRow(this); - } - - //recalc column calculations if present - if(this.table.modExists("columnCalcs")){ - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - this.table.modules.columnCalcs.recalcRowGroup(this); - }else{ - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - } -}; - - -Row.prototype.deleteCells = function(){ - var cellCount = this.cells.length; - - for(let i = 0; i < cellCount; i++){ - this.cells[0].delete(); - } -}; - -Row.prototype.wipe = function(){ - this.deleteCells(); - - // this.element.children().each(function(){ - // $(this).remove(); - // }) - // this.element.empty(); - - while(this.element.firstChild) this.element.removeChild(this.element.firstChild); - // this.element.remove(); - if(this.element.parentNode){ - this.element.parentNode.removeChild(this.element); - } -}; - - -Row.prototype.getGroup = function(){ - return this.modules.group || false; -}; - - -//////////////// Object Generation ///////////////// -Row.prototype.getComponent = function(){ - return new RowComponent(this); -}; diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/row_manager.js b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/row_manager.js deleted file mode 100644 index 38f73a94dd..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/js/row_manager.js +++ /dev/null @@ -1,1637 +0,0 @@ -var RowManager = function(table){ - - this.table = table; - this.element = this.createHolderElement(); //containing element - this.tableElement = this.createTableElement(); //table element - this.columnManager = null; //hold column manager object - this.height = 0; //hold height of table element - - this.firstRender = false; //handle first render - this.renderMode = "classic"; //current rendering mode - - this.rows = []; //hold row data objects - this.activeRows = []; //rows currently available to on display in the table - this.activeRowsCount = 0; //count of active rows - - this.displayRows = []; //rows currently on display in the table - this.displayRowsCount = 0; //count of display rows - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.vDomRowHeight = 20; //approximation of row heights for padding - - this.vDomTop = 0; //hold position for first rendered row in the virtual DOM - this.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM - - this.vDomScrollPosTop = 0; //last scroll position of the vDom top; - this.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom; - - this.vDomTopPad = 0; //hold value of padding for top of virtual DOM - this.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM - - this.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go - - this.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling - - this.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows) - this.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin - - this.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed - this.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed -}; - -//////////////// Setup Functions ///////////////// - -RowManager.prototype.createHolderElement = function (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-tableHolder"); - el.setAttribute("tabindex", 0); - - return el; -}; - -RowManager.prototype.createTableElement = function (){ - var el = document.createElement("div"); - - el.classList.add("tabulator-table"); - - return el; -}; - -//return containing element -RowManager.prototype.getElement = function(){ - return this.element; -}; - -//return table element -RowManager.prototype.getTableElement = function(){ - return this.tableElement; -}; - -//return position of row in table -RowManager.prototype.getRowPosition = function(row, active){ - if(active){ - return this.activeRows.indexOf(row); - }else{ - return this.rows.indexOf(row); - } -}; - - -//link to column manager -RowManager.prototype.setColumnManager = function(manager){ - this.columnManager = manager; -}; - -RowManager.prototype.initialize = function(){ - var self = this; - - self.setRenderMode(); - - //initialize manager - self.element.appendChild(self.tableElement); - - self.firstRender = true; - - //scroll header along with table body - self.element.addEventListener("scroll", function(){ - var left = self.element.scrollLeft; - - //handle horizontal scrolling - if(self.scrollLeft != left){ - self.columnManager.scrollHorizontal(left); - - if(self.table.options.groupBy){ - self.table.modules.groupRows.scrollHeaders(left); - } - - if(self.table.modExists("columnCalcs")){ - self.table.modules.columnCalcs.scrollHorizontal(left); - } - } - - self.scrollLeft = left; - }); - - //handle virtual dom scrolling - if(this.renderMode === "virtual"){ - - self.element.addEventListener("scroll", function(){ - var top = self.element.scrollTop; - var dir = self.scrollTop > top; - - //handle verical scrolling - if(self.scrollTop != top){ - self.scrollTop = top; - self.scrollVertical(dir); - - if(self.table.options.ajaxProgressiveLoad == "scroll"){ - self.table.modules.ajax.nextPage(self.element.scrollHeight - self.element.clientHeight - top); - } - }else{ - self.scrollTop = top; - } - - }); - } -}; - - -////////////////// Row Manipulation ////////////////// - -RowManager.prototype.findRow = function(subject){ - var self = this; - - if(typeof subject == "object"){ - - if(subject instanceof Row){ - //subject is row element - return subject; - }else if(subject instanceof RowComponent){ - //subject is public row component - return subject._getSelf() || false; - }else if(subject instanceof HTMLElement){ - //subject is a HTML element of the row - let match = self.rows.find(function(row){ - return row.element === subject; - }); - - return match || false; - } - - }else if(typeof subject == "undefined" || subject === null){ - return false; - }else{ - //subject should be treated as the index of the row - let match = self.rows.find(function(row){ - return row.data[self.table.options.index] == subject; - }); - - return match || false; - } - - //catch all for any other type of input - - return false; -}; - -RowManager.prototype.getRowFromPosition = function(position, active){ - if(active){ - return this.activeRows[position]; - }else{ - return this.rows[position]; - } -}; - -RowManager.prototype.scrollToRow = function(row, position, ifVisible){ - var rowIndex = this.getDisplayRows().indexOf(row), - rowEl = row.getElement(), - rowTop, - offset = 0; - - return new Promise((resolve, reject) => { - if(rowIndex > -1){ - - if(typeof position === "undefined"){ - position = this.table.options.scrollToRowPosition; - } - - if(typeof ifVisible === "undefined"){ - ifVisible = this.table.options.scrollToRowIfVisible; - } - - - if(position === "nearest"){ - switch(this.renderMode){ - case"classic": - rowTop = Tabulator.prototype.helpers.elOffset(rowEl).top; - position = Math.abs(this.element.scrollTop - rowTop) > Math.abs(this.element.scrollTop + this.element.clientHeight - rowTop) ? "bottom" : "top"; - break; - case"virtual": - position = Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex) ? "bottom" : "top"; - break; - } - } - - //check row visibility - if(!ifVisible){ - if(Tabulator.prototype.helpers.elVisible(rowEl)){ - offset = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(this.element).top; - - if(offset > 0 && offset < this.element.clientHeight - rowEl.offsetHeight){ - return false; - } - } - } - - //scroll to row - switch(this.renderMode){ - case"classic": - this.element.scrollTop = Tabulator.prototype.helpers.elOffset(rowEl).top - Tabulator.prototype.helpers.elOffset(this.element).top + this.element.scrollTop; - break; - case"virtual": - this._virtualRenderFill(rowIndex, true); - break; - } - - //align to correct position - switch(position){ - case "middle": - case "center": - this.element.scrollTop = this.element.scrollTop - (this.element.clientHeight / 2); - break; - - case "bottom": - this.element.scrollTop = this.element.scrollTop - this.element.clientHeight + rowEl.offsetHeight; - break; - } - - resolve(); - - }else{ - console.warn("Scroll Error - Row not visible"); - reject("Scroll Error - Row not visible"); - } - }); -}; - - -////////////////// Data Handling ////////////////// - -RowManager.prototype.setData = function(data, renderInPosition){ - var self = this; - - return new Promise((resolve, reject)=>{ - if(renderInPosition && this.getDisplayRows().length){ - if(self.table.options.pagination){ - self._setDataActual(data, true); - }else{ - this.reRenderInPosition(function(){ - self._setDataActual(data); - }); - } - }else{ - this.resetScroll(); - this._setDataActual(data); - } - - resolve(); - }); -}; - -RowManager.prototype._setDataActual = function(data, renderInPosition){ - var self = this; - - self.table.options.dataLoading.call(this.table, data); - - self.rows.forEach(function(row){ - row.wipe(); - }); - - self.rows = []; - - if(this.table.options.history && this.table.modExists("history")){ - this.table.modules.history.clear(); - } - - if(Array.isArray(data)){ - - if(this.table.modExists("selectRow")){ - this.table.modules.selectRow.clearSelectionData(); - } - - data.forEach(function(def, i){ - if(def && typeof def === "object"){ - var row = new Row(def, self); - self.rows.push(row); - }else{ - console.warn("Data Loading Warning - Invalid row data detected and ignored, expecting object but received:", def); - } - }); - - self.table.options.dataLoaded.call(this.table, data); - - self.refreshActiveData(false, false, renderInPosition); - }else{ - console.error("Data Loading Error - Unable to process data due to invalid data type \nExpecting: array \nReceived: ", typeof data, "\nData: ", data); - } -}; - -RowManager.prototype.deleteRow = function(row){ - var allIndex = this.rows.indexOf(row), - activeIndex = this.activeRows.indexOf(row); - - if(activeIndex > -1){ - this.activeRows.splice(activeIndex, 1); - } - - if(allIndex > -1){ - this.rows.splice(allIndex, 1); - } - - this.setActiveRows(this.activeRows); - - this.displayRowIterator(function(rows){ - var displayIndex = rows.indexOf(row); - - if(displayIndex > -1){ - rows.splice(displayIndex, 1); - } - }); - - this.reRenderInPosition(); - - this.table.options.rowDeleted.call(this.table, row.getComponent()); - - this.table.options.dataEdited.call(this.table, this.getData()); - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - this.table.modules.groupRows.updateGroupRows(true); - }else if(this.table.options.pagination && this.table.modExists("page")){ - this.refreshActiveData(false, false, true); - }else{ - if(this.table.options.pagination && this.table.modExists("page")){ - this.refreshActiveData("page"); - } - } - -}; - -RowManager.prototype.addRow = function(data, pos, index, blockRedraw){ - - var row = this.addRowActual(data, pos, index, blockRedraw); - - if(this.table.options.history && this.table.modExists("history")){ - this.table.modules.history.action("rowAdd", row, {data:data, pos:pos, index:index}); - } - - return row; -}; - -//add multiple rows -RowManager.prototype.addRows = function(data, pos, index){ - var self = this, - length = 0, - rows = []; - - return new Promise((resolve, reject) => { - pos = this.findAddRowPos(pos); - - if(!Array.isArray(data)){ - data = [data]; - } - - length = data.length - 1; - - if((typeof index == "undefined" && pos) || (typeof index !== "undefined" && !pos)){ - data.reverse(); - } - - data.forEach(function(item, i){ - var row = self.addRow(item, pos, index, true); - rows.push(row); - }); - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - this.table.modules.groupRows.updateGroupRows(true); - }else if(this.table.options.pagination && this.table.modExists("page")){ - this.refreshActiveData(false, false, true); - }else{ - this.reRenderInPosition(); - } - - //recalc column calculations if present - if(this.table.modExists("columnCalcs")){ - this.table.modules.columnCalcs.recalc(this.table.rowManager.activeRows); - } - - resolve(rows); - }); -}; - -RowManager.prototype.findAddRowPos = function(pos){ - if(typeof pos === "undefined"){ - pos = this.table.options.addRowPos; - } - - if(pos === "pos"){ - pos = true; - } - - if(pos === "bottom"){ - pos = false; - } - - return pos; -}; - - -RowManager.prototype.addRowActual = function(data, pos, index, blockRedraw){ - var row = data instanceof Row ? data : new Row(data || {}, this), - top = this.findAddRowPos(pos), - dispRows; - - if(!index && this.table.options.pagination && this.table.options.paginationAddRow == "page"){ - dispRows = this.getDisplayRows(); - - if(top){ - if(dispRows.length){ - index = dispRows[0]; - }else{ - if(this.activeRows.length){ - index = this.activeRows[this.activeRows.length-1]; - top = false; - } - } - }else{ - if(dispRows.length){ - index = dispRows[dispRows.length - 1]; - top = dispRows.length < this.table.modules.page.getPageSize() ? false : true; - } - } - } - - if(index){ - index = this.findRow(index); - } - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - this.table.modules.groupRows.assignRowToGroup(row); - - var groupRows = row.getGroup().rows; - - if(groupRows.length > 1){ - - if(!index || (index && groupRows.indexOf(index) == -1)){ - if(top){ - if(groupRows[0] !== row){ - index = groupRows[0]; - this._moveRowInArray(row.getGroup().rows, row, index, top); - } - }else{ - if(groupRows[groupRows.length -1] !== row){ - index = groupRows[groupRows.length -1]; - this._moveRowInArray(row.getGroup().rows, row, index, top); - } - } - }else{ - this._moveRowInArray(row.getGroup().rows, row, index, top); - } - } - } - - if(index){ - let allIndex = this.rows.indexOf(index), - activeIndex = this.activeRows.indexOf(index); - - this.displayRowIterator(function(rows){ - var displayIndex = rows.indexOf(index); - - if(displayIndex > -1){ - rows.splice((top ? displayIndex : displayIndex + 1), 0, row); - } - }); - - if(activeIndex > -1){ - this.activeRows.splice((top ? activeIndex : activeIndex + 1), 0, row); - } - - if(allIndex > -1){ - this.rows.splice((top ? allIndex : allIndex + 1), 0, row); - } - - }else{ - - if(top){ - - this.displayRowIterator(function(rows){ - rows.unshift(row); - }); - - this.activeRows.unshift(row); - this.rows.unshift(row); - }else{ - this.displayRowIterator(function(rows){ - rows.push(row); - }); - - this.activeRows.push(row); - this.rows.push(row); - } - } - - this.setActiveRows(this.activeRows); - - this.table.options.rowAdded.call(this.table, row.getComponent()); - - this.table.options.dataEdited.call(this.table, this.getData()); - - if(!blockRedraw){ - this.reRenderInPosition(); - } - - return row; -}; - -RowManager.prototype.moveRow = function(from, to, after){ - if(this.table.options.history && this.table.modExists("history")){ - this.table.modules.history.action("rowMove", from, {pos:this.getRowPosition(from), to:to, after:after}); - } - - this.moveRowActual(from, to, after); - - this.table.options.rowMoved.call(this.table, from.getComponent()); -}; - - -RowManager.prototype.moveRowActual = function(from, to, after){ - var self = this; - this._moveRowInArray(this.rows, from, to, after); - this._moveRowInArray(this.activeRows, from, to, after); - - this.displayRowIterator(function(rows){ - self._moveRowInArray(rows, from, to, after); - }); - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - var toGroup = to.getGroup(); - var fromGroup = from.getGroup(); - - if(toGroup === fromGroup){ - this._moveRowInArray(toGroup.rows, from, to, after); - }else{ - if(fromGroup){ - fromGroup.removeRow(from); - } - - toGroup.insertRow(from, to, after); - } - } -}; - - -RowManager.prototype._moveRowInArray = function(rows, from, to, after){ - var fromIndex, toIndex, start, end; - - if(from !== to){ - - fromIndex = rows.indexOf(from); - - if (fromIndex > -1) { - - rows.splice(fromIndex, 1); - - toIndex = rows.indexOf(to); - - if (toIndex > -1) { - - if(after){ - rows.splice(toIndex+1, 0, from); - }else{ - rows.splice(toIndex, 0, from); - } - - }else{ - rows.splice(fromIndex, 0, from); - } - } - - //restyle rows - if(rows === this.getDisplayRows()){ - - start = fromIndex < toIndex ? fromIndex : toIndex; - end = toIndex > fromIndex ? toIndex : fromIndex +1; - - for(let i = start; i <= end; i++){ - if(rows[i]){ - this.styleRow(rows[i], i); - } - } - } - } -}; - -RowManager.prototype.clearData = function(){ - this.setData([]); -}; - -RowManager.prototype.getRowIndex = function(row){ - return this.findRowIndex(row, this.rows); -}; - - -RowManager.prototype.getDisplayRowIndex = function(row){ - var index = this.getDisplayRows().indexOf(row); - return index > -1 ? index : false; -}; - -RowManager.prototype.nextDisplayRow = function(row, rowOnly){ - var index = this.getDisplayRowIndex(row), - nextRow = false; - - - if(index !== false && index < this.displayRowsCount -1){ - nextRow = this.getDisplayRows()[index+1]; - } - - if(nextRow && (!(nextRow instanceof Row) || nextRow.type != "row")){ - return this.nextDisplayRow(nextRow, rowOnly); - } - - return nextRow; -}; - -RowManager.prototype.prevDisplayRow = function(row, rowOnly){ - var index = this.getDisplayRowIndex(row), - prevRow = false; - - if(index){ - prevRow = this.getDisplayRows()[index-1]; - } - - if(prevRow && (!(prevRow instanceof Row) || prevRow.type != "row")){ - return this.prevDisplayRow(prevRow, rowOnly); - } - - return prevRow; -}; - -RowManager.prototype.findRowIndex = function(row, list){ - var rowIndex; - - row = this.findRow(row); - - if(row){ - rowIndex = list.indexOf(row); - - if(rowIndex > -1){ - return rowIndex; - } - } - - return false; -}; - - -RowManager.prototype.getData = function(active, transform){ - var self = this, - output = []; - - var rows = active ? self.activeRows : self.rows; - - rows.forEach(function(row){ - output.push(row.getData(transform || "data")); - }); - - return output; -}; - -RowManager.prototype.getHtml = function(active){ - var data = this.getData(active), - columns = [], - header = "", - body = "", - table = ""; - - //build header row - this.table.columnManager.getColumns().forEach(function(column){ - var def = column.getDefinition(); - - if(column.visible && !def.hideInHtml){ - header += `${(def.title || "")}`; - columns.push(column); - } - }); - - //build body rows - data.forEach(function(rowData){ - var row = ""; - - columns.forEach(function(column){ - var value = column.getFieldValue(rowData); - - if(typeof value === "undefined" || value === null){ - value = ":"; - } - - row += `${value}`; - }); - - body += `${row}`; - }); - - //build table - table = ` - - ${header} - - ${body} -
`; - - return table; - }; - - RowManager.prototype.getComponents = function(active){ - var self = this, - output = []; - - var rows = active ? self.activeRows : self.rows; - - rows.forEach(function(row){ - output.push(row.getComponent()); - }); - - return output; - } - - RowManager.prototype.getDataCount = function(active){ - return active ? this.rows.length : this.activeRows.length; - }; - - RowManager.prototype._genRemoteRequest = function(){ - var self = this, - table = self.table, - options = table.options, - params = {}; - - if(table.modExists("page")){ - //set sort data if defined - if(options.ajaxSorting){ - let sorters = self.table.modules.sort.getSort(); - - sorters.forEach(function(item){ - delete item.column; - }); - - params[self.table.modules.page.paginationDataSentNames.sorters] = sorters; - } - - //set filter data if defined - if(options.ajaxFiltering){ - let filters = self.table.modules.filter.getFilters(true, true); - - params[self.table.modules.page.paginationDataSentNames.filters] = filters; - } - - - self.table.modules.ajax.setParams(params, true); - } - - table.modules.ajax.sendRequest() - .then((data)=>{ - self.setData(data); - }) - .catch((e)=>{}); - -}; - -//choose the path to refresh data after a filter update -RowManager.prototype.filterRefresh = function(){ - var table = this.table, - options = table.options, - left = this.scrollLeft; - - - if(options.ajaxFiltering){ - if(options.pagination == "remote" && table.modExists("page")){ - table.modules.page.reset(true); - table.modules.page.setPage(1); - }else if(options.ajaxProgressiveLoad){ - table.modules.ajax.loadData(); - }else{ - //assume data is url, make ajax call to url to get data - this._genRemoteRequest(); - } - }else{ - this.refreshActiveData("filter"); - } - - this.scrollHorizontal(left); -}; - -//choose the path to refresh data after a sorter update -RowManager.prototype.sorterRefresh = function(){ - var table = this.table, - options = this.table.options, - left = this.scrollLeft; - - if(options.ajaxSorting){ - if((options.pagination == "remote" || options.progressiveLoad) && table.modExists("page")){ - table.modules.page.reset(true); - table.modules.page.setPage(1); - }else if(options.ajaxProgressiveLoad){ - table.modules.ajax.loadData(); - }else{ - //assume data is url, make ajax call to url to get data - this._genRemoteRequest(); - } - }else{ - this.refreshActiveData("sort"); - } - - this.scrollHorizontal(left); -}; - -RowManager.prototype.scrollHorizontal = function(left){ - this.scrollLeft = left; - this.element.scrollLeft = left; - - if(this.table.options.groupBy){ - this.table.modules.groupRows.scrollHeaders(left); - } - - if(this.table.modExists("columnCalcs")){ - this.table.modules.columnCalcs.scrollHorizontal(left); - } -}; - -//set active data set -RowManager.prototype.refreshActiveData = function(stage, skipStage, renderInPosition){ - var self = this, - table = this.table, - displayIndex; - - if(!stage){ - stage = "all"; - } - - if(table.options.selectable && !table.options.selectablePersistence && table.modExists("selectRow")){ - table.modules.selectRow.deselectRows(); - } - - //cascade through data refresh stages - switch(stage){ - case "all": - - case "filter": - if(!skipStage){ - if(table.modExists("filter")){ - self.setActiveRows(table.modules.filter.filter(self.rows)); - }else{ - self.setActiveRows(self.rows.slice(0)); - } - }else{ - skipStage = false; - } - - case "sort": - if(!skipStage){ - if(table.modExists("sort")){ - table.modules.sort.sort(); - } - }else{ - skipStage = false; - } - - //generic stage to allow for pipeline trigger after the data manipulation stage - case "display": - this.resetDisplayRows(); - - case "freeze": - if(!skipStage){ - if(this.table.modExists("frozenRows")){ - if(table.modules.frozenRows.isFrozen()){ - if(!table.modules.frozenRows.getDisplayIndex()){ - table.modules.frozenRows.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.frozenRows.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.frozenRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if(displayIndex !== true){ - table.modules.frozenRows.setDisplayIndex(displayIndex); - } - } - } - }else{ - skipStage = false; - } - - case "group": - if(!skipStage){ - if(table.options.groupBy && table.modExists("groupRows")){ - - if(!table.modules.groupRows.getDisplayIndex()){ - table.modules.groupRows.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.groupRows.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.groupRows.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if(displayIndex !== true){ - table.modules.groupRows.setDisplayIndex(displayIndex); - } - } - }else{ - skipStage = false; - } - - - - case "tree": - - if(!skipStage){ - if(table.options.dataTree && table.modExists("dataTree")){ - if(!table.modules.dataTree.getDisplayIndex()){ - table.modules.dataTree.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.dataTree.getDisplayIndex(); - - displayIndex = self.setDisplayRows(table.modules.dataTree.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if(displayIndex !== true){ - table.modules.dataTree.setDisplayIndex(displayIndex); - } - } - }else{ - skipStage = false; - } - - if(table.options.pagination && table.modExists("page") && !renderInPosition){ - if(table.modules.page.getMode() == "local"){ - table.modules.page.reset(); - } - } - - case "page": - if(!skipStage){ - if(table.options.pagination && table.modExists("page")){ - - if(!table.modules.page.getDisplayIndex()){ - table.modules.page.setDisplayIndex(this.getNextDisplayIndex()); - } - - displayIndex = table.modules.page.getDisplayIndex(); - - if(table.modules.page.getMode() == "local"){ - table.modules.page.setMaxRows(this.getDisplayRows(displayIndex - 1).length); - } - - - displayIndex = self.setDisplayRows(table.modules.page.getRows(this.getDisplayRows(displayIndex - 1)), displayIndex); - - if(displayIndex !== true){ - table.modules.page.setDisplayIndex(displayIndex); - } - } - }else{ - skipStage = false; - } - } - - - if(Tabulator.prototype.helpers.elVisible(self.element)){ - if(renderInPosition){ - self.reRenderInPosition(); - }else{ - self.renderTable(); - if(table.options.layoutColumnsOnNewData){ - self.table.columnManager.redraw(true); - } - } - } - - if(table.modExists("columnCalcs")){ - table.modules.columnCalcs.recalc(this.activeRows); - } -}; - -RowManager.prototype.setActiveRows = function(activeRows){ - this.activeRows = activeRows; - this.activeRowsCount = this.activeRows.length; -}; - -//reset display rows array -RowManager.prototype.resetDisplayRows = function(){ - this.displayRows = []; - - this.displayRows.push(this.activeRows.slice(0)); - - this.displayRowsCount = this.displayRows[0].length; - - if(this.table.modExists("frozenRows")){ - this.table.modules.frozenRows.setDisplayIndex(0); - } - - if(this.table.options.groupBy && this.table.modExists("groupRows")){ - this.table.modules.groupRows.setDisplayIndex(0); - } - - if(this.table.options.pagination && this.table.modExists("page")){ - this.table.modules.page.setDisplayIndex(0); - } -}; - - -RowManager.prototype.getNextDisplayIndex = function(){ - return this.displayRows.length; -}; - -//set display row pipeline data -RowManager.prototype.setDisplayRows = function(displayRows, index){ - - var output = true; - - if(index && typeof this.displayRows[index] != "undefined"){ - this.displayRows[index] = displayRows; - output = true; - }else{ - this.displayRows.push(displayRows); - output = index = this.displayRows.length -1; - } - - if(index == this.displayRows.length -1){ - this.displayRowsCount = this.displayRows[this.displayRows.length -1].length; - } - - return output; -}; - -RowManager.prototype.getDisplayRows = function(index){ - if(typeof index == "undefined"){ - return this.displayRows.length ? this.displayRows[this.displayRows.length -1] : []; - }else{ - return this.displayRows[index] || []; - } - -}; - -//repeat action accross display rows -RowManager.prototype.displayRowIterator = function(callback){ - this.displayRows.forEach(callback); - - this.displayRowsCount = this.displayRows[this.displayRows.length -1].length; -}; - -//return only actual rows (not group headers etc) -RowManager.prototype.getRows = function(){ - return this.rows; -}; - -///////////////// Table Rendering ///////////////// - -//trigger rerender of table in current position -RowManager.prototype.reRenderInPosition = function(callback){ - if(this.getRenderMode() == "virtual"){ - - var scrollTop = this.element.scrollTop; - var topRow = false; - var topOffset = false; - - var left = this.scrollLeft; - - var rows = this.getDisplayRows(); - - for(var i = this.vDomTop; i <= this.vDomBottom; i++){ - - if(rows[i]){ - var diff = scrollTop - rows[i].getElement().offsetTop; - - if(topOffset === false || Math.abs(diff) < topOffset){ - topOffset = diff; - topRow = i; - }else{ - break; - } - } - } - - if(callback){ - callback(); - } - - this._virtualRenderFill((topRow === false ? this.displayRowsCount - 1 : topRow), true, topOffset || 0); - - this.scrollHorizontal(left); - }else{ - this.renderTable(); - } -}; - -RowManager.prototype.setRenderMode = function(){ - if((this.table.element.clientHeight || this.table.options.height) && this.table.options.virtualDom){ - this.renderMode = "virtual"; - }else{ - this.renderMode = "classic"; - } -}; - - -RowManager.prototype.getRenderMode = function(){ - return this.renderMode; -}; - -RowManager.prototype.renderTable = function(){ - var self = this; - - self.table.options.renderStarted.call(this.table); - - self.element.scrollTop = 0; - - switch(self.renderMode){ - case "classic": - self._simpleRender(); - break; - - case "virtual": - self._virtualRenderFill(); - break; - } - - if(self.firstRender){ - if(self.displayRowsCount){ - self.firstRender = false; - self.table.modules.layout.layout(); - }else{ - self.renderEmptyScroll(); - } - } - - if(self.table.modExists("frozenColumns")){ - self.table.modules.frozenColumns.layout(); - } - - - if(!self.displayRowsCount){ - if(self.table.options.placeholder){ - - if(this.renderMode){ - self.table.options.placeholder.setAttribute("tabulator-render-mode", this.renderMode); - } - - self.getElement().appendChild(self.table.options.placeholder); - } - } - - self.table.options.renderComplete.call(this.table); -}; - -//simple render on heightless table -RowManager.prototype._simpleRender = function(){ - var self = this, - element = this.tableElement; - - self._clearVirtualDom(); - - if(self.displayRowsCount){ - - var onlyGroupHeaders = true; - - self.getDisplayRows().forEach(function(row, index){ - self.styleRow(row, index); - element.appendChild(row.getElement()); - row.initialize(true); - - if(row.type !== "group"){ - onlyGroupHeaders = false; - } - }); - - if(onlyGroupHeaders){ - element.style.minWidth = self.table.columnManager.getWidth() + "px"; - } - }else{ - self.renderEmptyScroll(); - } -}; - -//show scrollbars on empty table div -RowManager.prototype.renderEmptyScroll = function(){ - this.tableElement.style.minWidth = this.table.columnManager.getWidth(); - this.tableElement.style.minHeight = "1px"; - // this.tableElement.style.visibility = "hidden"; -}; - -RowManager.prototype._clearVirtualDom = function(){ - var element = this.tableElement; - - if(this.table.options.placeholder && this.table.options.placeholder.parentNode){ - this.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder); - } - - // element.children.detach(); - while(element.firstChild) element.removeChild(element.firstChild); - - element.style.paddingTop = ""; - element.style.paddingBottom = ""; - element.style.minWidth = ""; - element.style.minHeight = ""; - element.style.visibility = ""; - - this.scrollTop = 0; - this.scrollLeft = 0; - this.vDomTop = 0; - this.vDomBottom = 0; - this.vDomTopPad = 0; - this.vDomBottomPad = 0; -}; - -RowManager.prototype.styleRow = function(row, index){ - var rowEl = row.getElement(); - - if(index % 2){ - rowEl.classList.add("tabulator-row-even"); - rowEl.classList.remove("tabulator-row-odd"); - }else{ - rowEl.classList.add("tabulator-row-odd"); - rowEl.classList.remove("tabulator-row-even"); - } -}; - -//full virtual render -RowManager.prototype._virtualRenderFill = function(position, forceMove, offset){ - var self = this, - element = self.tableElement, - holder = self.element, - topPad = 0, - rowsHeight = 0, - topPadHeight = 0, - i = 0, - onlyGroupHeaders = true, - rows = self.getDisplayRows(); - - position = position || 0; - - offset = offset || 0; - - if(!position){ - self._clearVirtualDom(); - }else{ - // element.children().detach(); - while(element.firstChild) element.removeChild(element.firstChild); - - //check if position is too close to bottom of table - let heightOccpied = (self.displayRowsCount - position + 1) * self.vDomRowHeight; - - if(heightOccpied < self.height){ - position -= Math.ceil((self.height - heightOccpied) / self.vDomRowHeight); - - if(position < 0){ - position = 0; - } - } - - //calculate initial pad - topPad = Math.min(Math.max(Math.floor(self.vDomWindowBuffer / self.vDomRowHeight), self.vDomWindowMinMarginRows), position); - position -= topPad; - } - - if(self.displayRowsCount && Tabulator.prototype.helpers.elVisible(self.element)){ - - self.vDomTop = position; - - self.vDomBottom = position -1; - - while ((rowsHeight <= self.height + self.vDomWindowBuffer || i < self.vDomWindowMinTotalRows) && self.vDomBottom < self.displayRowsCount -1){ - var index = self.vDomBottom + 1, - row = rows[index]; - - self.styleRow(row, index); - - element.appendChild(row.getElement()); - if(!row.initialized){ - row.initialize(true); - }else{ - if(!row.heightInitialized){ - row.normalizeHeight(true); - } - } - - if(i < topPad){ - topPadHeight += row.getHeight(); - }else{ - rowsHeight += row.getHeight(); - } - - if(row.type !== "group"){ - onlyGroupHeaders = false; - } - - self.vDomBottom ++; - i++; - } - - if(!position){ - this.vDomTopPad = 0; - //adjust rowheight to match average of rendered elements - self.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i); - self.vDomBottomPad = self.vDomRowHeight * (self.displayRowsCount - self.vDomBottom -1); - - self.vDomScrollHeight = topPadHeight + rowsHeight + self.vDomBottomPad - self.height; - }else{ - self.vDomTopPad = !forceMove ? self.scrollTop - topPadHeight : (self.vDomRowHeight * this.vDomTop) + offset; - self.vDomBottomPad = self.vDomBottom == self.displayRowsCount-1 ? 0 : Math.max(self.vDomScrollHeight - self.vDomTopPad - rowsHeight - topPadHeight, 0); - } - - element.style.paddingTop = self.vDomTopPad + "px"; - element.style.paddingBottom = self.vDomBottomPad + "px"; - - if(forceMove){ - this.scrollTop = self.vDomTopPad + (topPadHeight) + offset - (this.element.scrollWidth > this.element.clientWidth ? this.element.offsetHeight - this.element.clientHeight : 0); - } - - this.scrollTop = Math.min(this.scrollTop, this.element.scrollHeight - this.height); - - //adjust for horizontal scrollbar if present - if(this.element.scrollWidth > this.element.offsetWidth){ - this.scrollTop += this.element.offsetHeight - this.element.clientHeight; - } - - this.vDomScrollPosTop = this.scrollTop; - this.vDomScrollPosBottom = this.scrollTop; - - holder.scrollTop = this.scrollTop; - - element.style.minWidth = onlyGroupHeaders ? self.table.columnManager.getWidth() + "px" : ""; - - if(self.table.options.groupBy){ - if(self.table.modules.layout.getMode() != "fitDataFill" && self.displayRowsCount == self.table.modules.groupRows.countGroups()){ - self.tableElement.style.minWidth = self.table.columnManager.getWidth(); - } - } - - }else{ - this.renderEmptyScroll(); - } -}; - -//handle vertical scrolling -RowManager.prototype.scrollVertical = function(dir){ - var topDiff = this.scrollTop - this.vDomScrollPosTop; - var bottomDiff = this.scrollTop - this.vDomScrollPosBottom; - var margin = this.vDomWindowBuffer * 2; - - if(-topDiff > margin || bottomDiff > margin){ - //if big scroll redraw table; - var left = this.scrollLeft; - this._virtualRenderFill(Math.floor((this.element.scrollTop / this.element.scrollHeight) * this.displayRowsCount)); - this.scrollHorizontal(left); - }else{ - - if(dir){ - //scrolling up - if(topDiff < 0){ - this._addTopRow(-topDiff); - } - - if(topDiff < 0){ - - //hide bottom row if needed - if(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){ - this._removeBottomRow(-bottomDiff); - } - } - }else{ - //scrolling down - if(topDiff >= 0){ - - //hide top row if needed - if(this.scrollTop > this.vDomWindowBuffer){ - this._removeTopRow(topDiff); - } - } - - if(bottomDiff >= 0){ - this._addBottomRow(bottomDiff); - } - } - } -}; - -RowManager.prototype._addTopRow = function(topDiff, i=0){ - var table = this.tableElement, - rows = this.getDisplayRows(); - - if(this.vDomTop){ - let index = this.vDomTop -1, - topRow = rows[index], - topRowHeight = topRow.getHeight() || this.vDomRowHeight; - - //hide top row if needed - if(topDiff >= topRowHeight){ - this.styleRow(topRow, index); - table.insertBefore(topRow.getElement(), table.firstChild); - if(!topRow.initialized || !topRow.heightInitialized){ - this.vDomTopNewRows.push(topRow); - - if(!topRow.heightInitialized){ - topRow.clearCellHeight(); - } - } - topRow.initialize(); - - this.vDomTopPad -= topRowHeight; - - if(this.vDomTopPad < 0){ - this.vDomTopPad = index * this.vDomRowHeight; - } - - if(!index){ - this.vDomTopPad = 0; - } - - table.style.paddingTop = this.vDomTopPad + "px"; - this.vDomScrollPosTop -= topRowHeight; - this.vDomTop--; - } - - topDiff = -(this.scrollTop - this.vDomScrollPosTop); - - if(i < this.vDomMaxRenderChain && this.vDomTop && topDiff >= (rows[this.vDomTop -1].getHeight() || this.vDomRowHeight)){ - this._addTopRow(topDiff, i+1); - }else{ - this._quickNormalizeRowHeight(this.vDomTopNewRows); - } - - } - -}; - -RowManager.prototype._removeTopRow = function(topDiff){ - var table = this.tableElement, - topRow = this.getDisplayRows()[this.vDomTop], - topRowHeight = topRow.getHeight() || this.vDomRowHeight; - - if(topDiff >= topRowHeight){ - - var rowEl = topRow.getElement(); - rowEl.parentNode.removeChild(rowEl); - - this.vDomTopPad += topRowHeight; - table.style.paddingTop = this.vDomTopPad + "px"; - this.vDomScrollPosTop += this.vDomTop ? topRowHeight : topRowHeight + this.vDomWindowBuffer; - this.vDomTop++; - - topDiff = this.scrollTop - this.vDomScrollPosTop; - - this._removeTopRow(topDiff); - } - -}; - -RowManager.prototype._addBottomRow = function(bottomDiff, i=0){ - var table = this.tableElement, - rows = this.getDisplayRows(); - - if(this.vDomBottom < this.displayRowsCount -1){ - let index = this.vDomBottom + 1, - bottomRow = rows[index], - bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight; - - //hide bottom row if needed - if(bottomDiff >= bottomRowHeight){ - this.styleRow(bottomRow, index); - table.appendChild(bottomRow.getElement()); - - if(!bottomRow.initialized || !bottomRow.heightInitialized){ - this.vDomBottomNewRows.push(bottomRow); - - if(!bottomRow.heightInitialized){ - bottomRow.clearCellHeight(); - } - } - - bottomRow.initialize(); - - this.vDomBottomPad -= bottomRowHeight; - - if(this.vDomBottomPad < 0 || index == this.displayRowsCount -1){ - this.vDomBottomPad = 0; - } - - table.style.paddingBottom = this.vDomBottomPad + "px"; - this.vDomScrollPosBottom += bottomRowHeight; - this.vDomBottom++; - } - - bottomDiff = this.scrollTop - this.vDomScrollPosBottom; - - if(i < this.vDomMaxRenderChain && this.vDomBottom < this.displayRowsCount -1 && bottomDiff >= (rows[this.vDomBottom + 1].getHeight() || this.vDomRowHeight)){ - this._addBottomRow(bottomDiff, i+1); - }else{ - this._quickNormalizeRowHeight(this.vDomBottomNewRows); - } - } -}; - -RowManager.prototype._removeBottomRow = function(bottomDiff){ - var table = this.tableElement, - bottomRow = this.getDisplayRows()[this.vDomBottom], - bottomRowHeight = bottomRow.getHeight() || this.vDomRowHeight; - - if(bottomDiff >= bottomRowHeight){ - - var rowEl = bottomRow.getElement(); - - if(rowEl.parentNode){ - rowEl.parentNode.removeChild(rowEl); - } - - this.vDomBottomPad += bottomRowHeight; - - if(this.vDomBottomPad < 0){ - this.vDomBottomPad = 0; - } - - table.style.paddingBottom = this.vDomBottomPad + "px"; - this.vDomScrollPosBottom -= bottomRowHeight; - this.vDomBottom--; - - bottomDiff = -(this.scrollTop - this.vDomScrollPosBottom); - - this._removeBottomRow(bottomDiff); - } -}; - -RowManager.prototype._quickNormalizeRowHeight = function(rows){ - rows.forEach(function(row){ - row.calcHeight(); - }); - - rows.forEach(function(row){ - row.setCellHeight(); - }); - - rows.length = 0; -}; - -//normalize height of active rows -RowManager.prototype.normalizeHeight = function(){ - this.activeRows.forEach(function(row){ - row.normalizeHeight(); - }); -}; - -//adjust the height of the table holder to fit in the Tabulator element -RowManager.prototype.adjustTableSize = function(){ - - if(this.renderMode === "virtual"){ - this.height = this.element.clientHeight; - this.vDomWindowBuffer = this.table.options.virtualDomBuffer || this.height; - - let otherHeight = this.columnManager.getElement().offsetHeight + (this.table.footerManager && !this.table.footerManager.external ? this.table.footerManager.getElement().offsetHeight : 0); - - this.element.style.minHeight = "calc(100% - " + otherHeight + "px)"; - this.element.style.height = "calc(100% - " + otherHeight + "px)"; - this.element.style.maxHeight = "calc(100% - " + otherHeight + "px)"; - } -}; - -//renitialize all rows -RowManager.prototype.reinitialize = function(){ - this.rows.forEach(function(row){ - row.reinitialize(); - }); -}; - - -//redraw table -RowManager.prototype.redraw = function (force){ - var pos = 0, - left = this.scrollLeft; - - this.adjustTableSize(); - - if(!force){ - - if(self.renderMode == "classic"){ - - if(self.table.options.groupBy){ - self.refreshActiveData("group", false, false); - }else{ - this._simpleRender(); - } - - }else{ - this.reRenderInPosition(); - this.scrollHorizontal(left); - } - - if(!this.displayRowsCount){ - if(this.table.options.placeholder){ - this.getElement().appendChild(this.table.options.placeholder); - } - } - - }else{ - this.renderTable(); - } -}; - -RowManager.prototype.resetScroll = function(){ - this.element.scrollLeft = 0; - this.element.scrollTop = 0; - - if(this.table.browser === "ie"){ - var event = document.createEvent("Event"); - event.initEvent("scroll", false, true); - this.element.dispatchEvent(event); - }else{ - this.element.dispatchEvent(new Event('scroll')); - } -}; diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/functions4.scss b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/functions4.scss deleted file mode 100644 index ca2dea30d6..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/functions4.scss +++ /dev/null @@ -1,118 +0,0 @@ -// Bootstrap functions -// -// Utility mixins and functions for evalutating source code across our variables, maps, and mixins. - -// Ascending -// Used to evaluate Sass maps like our grid breakpoints. -@mixin _assert-ascending($map, $map-name) { - $prev-key: null; - $prev-num: null; - @each $key, $num in $map { - @if $prev-num == null { - // Do nothing - } @else if not comparable($prev-num, $num) { - @warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !"; - } @else if $prev-num >= $num { - @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !"; - } - $prev-key: $key; - $prev-num: $num; - } -} - -// Starts at zero -// Another grid mixin that ensures the min-width of the lowest breakpoint starts at 0. -@mixin _assert-starts-at-zero($map) { - $values: map-values($map); - $first-value: nth($values, 1); - @if $first-value != 0 { - @warn "First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}."; - } -} - -// Replace `$search` with `$replace` in `$string` -// Used on our SVG icon backgrounds for custom forms. -// -// @author Hugo Giraudel -// @param {String} $string - Initial string -// @param {String} $search - Substring to replace -// @param {String} $replace ('') - New value -// @return {String} - Updated string -@function str-replace($string, $search, $replace: "") { - $index: str-index($string, $search); - - @if $index { - @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); - } - - @return $string; -} - -// Color contrast -@function color-yiq($color) { - $r: red($color); - $g: green($color); - $b: blue($color); - - $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000; - - @if ($yiq >= $yiq-contrasted-threshold) { - @return $yiq-text-dark; - } @else { - @return $yiq-text-light; - } -} - -// Retrieve color Sass maps -@function color($key: "blue") { - @return map-get($colors, $key); -} - -@function theme-color($key: "primary") { - @return map-get($theme-colors, $key); -} - -@function gray($key: "100") { - @return map-get($grays, $key); -} - -// Request a theme color level -@function theme-color-level($color-name: "primary", $level: 0) { - $color: theme-color($color-name); - $color-base: if($level > 0, $black, $white); - $level: abs($level); - - @return mix($color-base, $color, $level * $theme-color-interval); -} - - -// Tables - -@mixin table-row-variant($state, $background) { - // Exact selectors below required to override `.table-striped` and prevent - // inheritance to nested tables. - .table-#{$state} { - &, - > th, - > td { - background-color: $background; - } - } - - // Hover states for `.table-hover` - // Note: this is not available for cells or rows within `thead` or `tfoot`. - .table-hover { - $hover-background: darken($background, 5%); - - .table-#{$state} { - @include hover { - background-color: $hover-background; - - > td, - > th { - background-color: $hover-background; - } - } - } - } -} diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/tabulator_bootstrap.scss b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/tabulator_bootstrap.scss deleted file mode 100644 index afacfee1c7..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/tabulator_bootstrap.scss +++ /dev/null @@ -1,1021 +0,0 @@ -@import "variables.scss"; - -// Style conversion file, bootstrap to tabulator - -//Main Theme Variables -$backgroundColor: $table-bg !default; //background color of tabulator -$borderColor:$table-border-color !default; //border to tabulator -$textSize:$font-size-base !default; //table text size - -//header themeing -$headerBackgroundColor:#fff !default; //border to tabulator -$headerSeperatorColor:$table-border-color !default; //header bottom seperator color - -$cellPadding:$table-cell-padding !default; //padding round header -$cellPaddingCondensed:$table-condensed-cell-padding !default; //padding round header - -//column header arrows -$sortArrowActive: #666 !default; -$sortArrowInactive: #bbb !default; - -//row themeing -$rowBackgroundColor:$backgroundColor !default; //table row background color -$rowAltBackgroundColor:$table-bg-accent !default; //table row background color -$rowBorderColor:$table-border-color !default; //table border color -$rowHoverBackground:$table-bg-hover !default; //row background color on hover - -$rowSelectedBackground: #9ABCEA !default; //row background color when selected -$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered - - -$editBoxColor:#1D68CD !default; //border color for edit boxes -$errorColor:#dd0000 !default; //error indication - -//footer themeing -$footerBorderColor:$table-border-color !default; //footer border color -$footerSeperatorColor:$table-border-color !default; //footer bottom seperator color -$footerActiveColor:#d00 !default; //footer bottom active text color - - -//Tabulator Containing Element -.tabulator{ - position: relative; - background-color: $backgroundColor; - overflow:hidden; - font-size:$textSize; - text-align: left; - width: 100%; - max-width: 100%; - margin-bottom: $line-height-computed; - - -webkit-transform: translatez(0); - -moz-transform: translatez(0); - -ms-transform: translatez(0); - -o-transform: translatez(0); - transform: translatez(0); - - &[tabulator-layout="fitDataFill"]{ - .tabulator-tableHolder{ - .tabulator-table{ - min-width:100%; - } - } - } - - &.tabulator-block-select{ - user-select: none; - } - - //column header containing element - .tabulator-header{ - position:relative; - box-sizing: border-box; - - width:100%; - - border-bottom:2px solid $headerSeperatorColor; - background-color: $headerBackgroundColor; - font-weight:bold; - - white-space: nowrap; - overflow:hidden; - - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - - //individual column header element - .tabulator-col{ - display:inline-block; - position:relative; - box-sizing:border-box; - background-color: $headerBackgroundColor; - text-align:left; - vertical-align: bottom; - overflow: hidden; - - &.tabulator-moving{ - position: absolute; - border:1px solid $headerSeperatorColor; - background:darken($headerBackgroundColor, 10%); - pointer-events: none; - } - - //hold content of column header - .tabulator-col-content{ - box-sizing:border-box; - position: relative; - padding:$cellPadding; - - //hold title of column header - .tabulator-col-title{ - box-sizing:border-box; - width: 100%; - - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align:bottom; - - //element to hold title editor - .tabulator-title-editor{ - box-sizing: border-box; - width: 100%; - - border:1px solid #999; - - padding:1px; - - background: #fff; - } - } - - //column sorter arrow - .tabulator-arrow{ - display: inline-block; - position: absolute; - top:14px; - right:8px; - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid $sortArrowInactive; - } - - } - - //complex header column group - &.tabulator-col-group{ - - //gelement to hold sub columns in column group - .tabulator-col-group-cols{ - position:relative; - display: flex; - - border-top:1px solid $borderColor; - overflow: hidden; - - .tabulator-col:last-child{ - margin-right:-1px; - } - } - } - - - //hide left resize handle on first column - &:first-child{ - .tabulator-col-resize-handle.prev{ - display: none; - } - } - - //placeholder element for sortable columns - &.ui-sortable-helper{ - position: absolute; - background-color:darken($headerBackgroundColor, 10%) !important; - border:1px solid $borderColor; - } - - //header filter containing element - .tabulator-header-filter{ - position: relative; - box-sizing: border-box; - margin-top:2px; - width:100%; - text-align: center; - - //styling adjustment for inbuilt editors - textarea{ - height:auto !important; - } - - svg{ - margin-top: 3px; - } - - input{ - &::-ms-clear { - width : 0; - height: 0; - } - } - } - - - //styling child elements for sortable columns - &.tabulator-sortable{ - .tabulator-col-title{ - padding-right:25px; - } - - &:hover{ - cursor:pointer; - background-color:darken($headerBackgroundColor, 10%); - } - - &[aria-sort="none"]{ - .tabulator-col-content .tabulator-arrow{ - border-top: none; - border-bottom: 6px solid $sortArrowInactive; - } - } - - &[aria-sort="asc"]{ - .tabulator-col-content .tabulator-arrow{ - border-top: none; - border-bottom: 6px solid $sortArrowActive; - } - } - - &[aria-sort="desc"]{ - .tabulator-col-content .tabulator-arrow{ - border-top: 6px solid $sortArrowActive; - border-bottom: none; - } - } - } - - &.tabulator-col-vertical{ - .tabulator-col-content{ - .tabulator-col-title{ - writing-mode: vertical-rl; - text-orientation: mixed; - - display:flex; - align-items:center; - justify-content:center; - } - } - - &.tabulator-col-vertical-flip{ - .tabulator-col-title{ - transform: rotate(180deg); - } - } - - &.tabulator-sortable{ - .tabulator-col-title{ - padding-right:0; - padding-top:20px; - } - - &.tabulator-col-vertical-flip{ - .tabulator-col-title{ - padding-right:0; - padding-bottom:20px; - } - - } - - .tabulator-arrow{ - right:calc(50% - 6px); - } - } - } - - } - - .tabulator-frozen{ - display: inline-block; - position: absolute; - - // background-color: inherit; - - z-index: 10; - - &.tabulator-frozen-left{ - border-right:2px solid $rowBorderColor; - } - - &.tabulator-frozen-right{ - border-left:2px solid $rowBorderColor; - } - } - - .tabulator-calcs-holder{ - box-sizing:border-box; - width:100%; - - background:lighten($headerBackgroundColor, 5%) !important; - - .tabulator-row{ - background:lighten($headerBackgroundColor, 5%) !important; - - .tabulator-col-resize-handle{ - display: none; - } - } - - border-top:1px solid $rowBorderColor; - border-bottom:1px solid $headerSeperatorColor; - - overflow: hidden; - } - - .tabulator-frozen-rows-holder{ - min-width:400%; - - &:empty{ - display: none; - } - } - } - - - - //scrolling element to hold table - .tabulator-tableHolder{ - position:relative; - width:100%; - white-space: nowrap; - overflow:auto; - -webkit-overflow-scrolling: touch; - - &:focus{ - outline: none; - } - - //default placeholder element - .tabulator-placeholder{ - box-sizing:border-box; - display: flex; - align-items:center; - - &[tabulator-render-mode="virtual"]{ - position: absolute; - top:0; - left:0; - height:100%; - } - - width:100%; - - span{ - display: inline-block; - - margin:0 auto; - padding:10px; - - color:#000; - font-weight: bold; - font-size: 20px; - } - } - - //element to hold table rows - .tabulator-table{ - position:relative; - display:inline-block; - background-color:$rowBackgroundColor; - white-space: nowrap; - overflow:visible; - - .tabulator-row{ - &.tabulator-calcs{ - font-weight: bold; - background:darken($rowAltBackgroundColor, 5%) !important; - - &.tabulator-calcs-top{ - border-bottom:2px solid $rowBorderColor; - } - - &.tabulator-calcs-bottom{ - border-top:2px solid $rowBorderColor; - } - } - } - } - } - - - //column resize handles - .tabulator-col-resize-handle{ - position:absolute; - right:0; - top:0; - bottom:0; - width:5px; - - &.prev{ - left:0; - right:auto; - } - - &:hover{ - cursor:ew-resize; - } - } - - - //footer element - .tabulator-footer{ - padding:5px 10px; - border-top:2px solid $footerSeperatorColor; - text-align:right; - font-weight:bold; - white-space:nowrap; - user-select:none; - - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - - .tabulator-calcs-holder{ - box-sizing:border-box; - width:calc(100% + 20px); - margin:-5px -10px 5px -10px; - - text-align: left; - - background:lighten($backgroundColor, 5%) !important; - - .tabulator-row{ - background:lighten($backgroundColor, 5%) !important; - - .tabulator-col-resize-handle{ - display: none; - } - } - - border-bottom:1px solid $rowBorderColor; - border-top:1px solid $rowBorderColor; - - overflow: hidden; - - &:only-child{ - margin-bottom:-5px; - border-bottom:none; - } - } - - //pagination container element - .tabulator-pages{ - margin:0 7px; - } - - //pagination button - .tabulator-page{ - display:inline-block; - margin:0 2px; - border:1px solid $footerBorderColor; - border-radius:3px; - padding:2px 5px; - background:rgba(255,255,255,.2); - font-family:inherit; - font-weight:inherit; - font-size:inherit; - - - &.active{ - color:$footerActiveColor; - } - - &:disabled{ - opacity:.5; - } - - &:not(.disabled){ - &:hover{ - cursor:pointer; - background:rgba(0,0,0,.2); - color:#fff; - } - } - } - } - - //holding div that contains loader and covers tabulator element to prevent interaction - .tabulator-loader{ - position:absolute; - display: flex; - align-items:center; - - top:0; - left:0; - z-index:100; - - height:100%; - width:100%; - background:rgba(0,0,0,.4); - text-align:center; - - //loading message element - .tabulator-loader-msg{ - display:inline-block; - - margin:0 auto; - padding:10px 20px; - - border-radius:10px; - - background:#fff; - font-weight:bold; - font-size:16px; - - //loading message - &.tabulator-loading{ - border:4px solid #333; - color:#000; - } - - //error message - &.tabulator-error{ - border:4px solid #D00; - color:#590000; - } - } - } - - - - //Bootstrap theming classes - - &.table-striped{ - .tabulator-row{ - &:nth-child(even){ - background-color: $rowAltBackgroundColor; - } - } - } - - &.table-bordered{ - border:1px solid $borderColor; - - .tabulator-header{ - .tabulator-col{ - border-right:1px solid $borderColor; - } - } - - .tabulator-tableHolder{ - .tabulator-table{ - .tabulator-row{ - .tabulator-cell{ - border-right:1px solid $borderColor; - } - } - } - } - - } - - &.table-condensed{ - .tabulator-header{ - .tabulator-col{ - .tabulator-col-content{ - padding:$cellPaddingCondensed; - } - } - } - - .tabulator-tableHolder{ - .tabulator-table{ - .tabulator-row{ - min-height:$textSize + ($cellPaddingCondensed * 2); - - .tabulator-cell{ - padding:$cellPaddingCondensed; - } - } - } - } - } - - - //row colors - .tabulator-tableHolder{ - .tabulator-table{ - .tabulator-row{ - &.active{ - background:$table-bg-active!important; - } - &.success{ - background:$state-success-bg!important; - } - &.info{ - background: $state-info-bg!important; - } - &.warning{ - background:$state-warning-bg!important; - } - &.danger{ - background:$state-danger-bg!important; - } - } - } - } - -} - -//row element -.tabulator-row{ - position: relative; - box-sizing: border-box; - - min-height:$textSize + ($cellPadding * 2); - background-color: $rowBackgroundColor; - border-bottom:1px solid $rowBorderColor; - - &.tabulator-selectable:hover{ - background-color:$rowHoverBackground !important; - cursor: pointer; - } - - &.tabulator-selected{ - background-color:$rowSelectedBackground; - } - - &.tabulator-selected:hover{ - background-color:$rowSelectedBackgroundHover; - cursor: pointer; - } - - &.tabulator-moving{ - position: absolute; - - border-top:1px solid $rowBorderColor; - border-bottom:1px solid $rowBorderColor; - - pointer-events: none !important; - z-index:15; - } - - //row resize handles - .tabulator-row-resize-handle{ - position:absolute; - right:0; - bottom:0; - left:0; - height:5px; - - &.prev{ - top:0; - bottom:auto; - } - - &:hover{ - cursor:ns-resize; - } - } - - .tabulator-frozen{ - display: inline-block; - position: absolute; - - background-color: inherit; - - z-index: 10; - - &.tabulator-frozen-left{ - border-right:2px solid $rowBorderColor; - } - - &.tabulator-frozen-right{ - border-left:2px solid $rowBorderColor; - } - } - - - .tabulator-responsive-collapse{ - box-sizing:border-box; - - padding:5px; - - border-top:1px solid $rowBorderColor; - border-bottom:1px solid $rowBorderColor; - - &:empty{ - display:none; - } - - table{ - font-size:$textSize; - - tr{ - td{ - position: relative; - - &:first-of-type{ - padding-right:10px; - } - } - } - } - } - - - //cell element - .tabulator-cell{ - display:inline-block; - position: relative; - box-sizing:border-box; - padding:$cellPadding; - vertical-align:middle; - white-space:nowrap; - overflow:hidden; - text-overflow:ellipsis; - - &:last-of-type{ - border-right: none; - } - - &.tabulator-editing{ - border:1px solid $editBoxColor; - padding: 0; - - input, select{ - border:1px; - background:transparent; - } - } - - &.tabulator-validation-fail{ - border:1px solid $errorColor; - input, select{ - border:1px; - background:transparent; - - color: $errorColor; - } - } - - //hide left resize handle on first column - &:first-child{ - .tabulator-col-resize-handle.prev{ - display: none; - } - } - - //movable row handle - &.tabulator-row-handle{ - - display: inline-flex; - align-items:center; - - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - - //handle holder - .tabulator-row-handle-box{ - width:80%; - - //Hamburger element - .tabulator-row-handle-bar{ - width:100%; - height:3px; - margin-top:2px; - background:#666; - } - } - } - - .tabulator-data-tree-branch{ - display:inline-block; - vertical-align:middle; - - height:9px; - width:7px; - - margin-top:-9px; - margin-right:5px; - - border-bottom-left-radius:1px; - - border-left:2px solid $rowBorderColor; - border-bottom:2px solid $rowBorderColor; - } - - .tabulator-data-tree-control{ - - display:inline-flex; - justify-content:center; - align-items:center; - vertical-align:middle; - - height:11px; - width:11px; - - margin-right:5px; - - border:1px solid #333; - border-radius:2px; - background:rgba(0, 0, 0, .1); - - overflow:hidden; - - &:hover{ - cursor:pointer; - background:rgba(0, 0, 0, .2); - } - - .tabulator-data-tree-control-collapse{ - display:inline-block; - position: relative; - - height: 7px; - width: 1px; - - background: transparent; - - &:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - - height: 1px; - width: 7px; - - background: #333; - } - } - - .tabulator-data-tree-control-expand{ - display:inline-block; - position: relative; - - height: 7px; - width: 1px; - - background: #333; - - &:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - - height: 1px; - width: 7px; - - background: #333; - } - } - - } - - .tabulator-responsive-collapse-toggle{ - display: inline-flex; - align-items:center; - justify-content:center; - - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - - height:15px; - width:15px; - - border-radius:20px; - background:#666; - - color:$rowBackgroundColor; - font-weight:bold; - font-size:1.1em; - - &:hover{ - opacity:.7; - } - - &.open{ - .tabulator-responsive-collapse-toggle-close{ - display:initial; - } - - .tabulator-responsive-collapse-toggle-open{ - display:none; - } - } - - .tabulator-responsive-collapse-toggle-close{ - display:none; - } - } - } - //row grouping element - &.tabulator-group{ - - box-sizing:border-box; - border-bottom:1px solid #999; - border-right:1px solid $rowBorderColor; - border-top:1px solid #999; - padding:5px; - padding-left:10px; - background:#fafafa; - font-weight:bold; - - min-width: 100%; - - &:hover{ - cursor:pointer; - background-color:rgba(0,0,0,.1); - } - - &.tabulator-group-visible{ - .tabulator-arrow{ - margin-right:10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid $sortArrowActive; - border-bottom: 0; - } - } - - &.tabulator-group-level-1{ - .tabulator-arrow{ - margin-left:20px; - } - } - - &.tabulator-group-level-2{ - .tabulator-arrow{ - margin-left:40px; - } - } - - &.tabulator-group-level-3{ - .tabulator-arrow{ - margin-left:60px; - } - } - - &.tabulator-group-level-4{ - .tabulator-arrow{ - margin-left:80px; - } - } - - &.tabulator-group-level-5{ - .tabulator-arrow{ - margin-left:100px; - } - } - - //sorting arrow - .tabulator-arrow{ - display: inline-block; - width: 0; - height: 0; - margin-right:16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid $sortArrowActive; - vertical-align:middle; - } - - span{ - margin-left:10px; - color:#666; - } - } -} - -.tabulator-edit-select-list{ - position: absolute; - display:inline-block; - box-sizing:border-box; - - max-height:200px; - - background:$rowBackgroundColor; - border:1px solid $rowBorderColor; - - font-size:$textSize; - - overflow-y:auto; - -webkit-overflow-scrolling: touch; - - z-index: 10000; - - .tabulator-edit-select-list-item{ - padding:4px; - - &.active{ - color:$rowBackgroundColor; - background:$editBoxColor; - } - - &:hover{ - cursor:pointer; - - color:$rowBackgroundColor; - background:$editBoxColor; - } - } - - .tabulator-edit-select-list-group{ - border-bottom:1px solid $rowBorderColor; - - padding:4px; - padding-top:6px; - - font-weight:bold; - } -} \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/tabulator_bootstrap4.scss b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/tabulator_bootstrap4.scss deleted file mode 100644 index 93823a2f56..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/tabulator_bootstrap4.scss +++ /dev/null @@ -1,1215 +0,0 @@ -@import "functions4.scss"; -@import "variables4.scss"; - -// Style conversion file, bootstrap to tabulator - -//Main Theme Variables -$backgroundColor: $table-bg !default; //background color of tabulator -$borderColor:$table-border-color !default; //border to tabulator -$textSize:$font-size-base !default; //table text size - -//header themeing -$headerBackgroundColor:#fff !default; //border to tabulator -$headerSeperatorColor:$table-border-color !default; //header bottom seperator color - -$cellPadding:$table-cell-padding !default; //padding round header - -//column header arrows -$sortArrowActive: #666 !default; -$sortArrowInactive: #bbb !default; - -//row themeing -$rowBackgroundColor:$backgroundColor !default; //table row background color -$rowAltBackgroundColor: $table-accent-bg !default; //table row background color -$rowBorderColor:$table-border-color !default; //table border color -$rowHoverBackground:$table-hover-bg !default; //row background color on hover - -$rowSelectedBackground: #9ABCEA !default; //row background color when selected -$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered - - -$editBoxColor:#1D68CD !default; //border color for edit boxes -$errorColor:#dd0000 !default; //error indication - -//footer themeing -$footerBorderColor:$pagination-border-color !default; //footer border color -$footerSeperatorColor:$table-border-color !default; //footer bottom seperator color -$footerActiveColor:$pagination-active-color !default; //footer bottom active text color - - -//Tabulator Containing Element -.tabulator{ - position: relative; - background-color: $backgroundColor; - overflow:hidden; - font-size:$textSize; - text-align: left; - width: 100%; - max-width: 100%; - // margin-bottom: $line-height-computed; - - -webkit-transform: translatez(0); - -moz-transform: translatez(0); - -ms-transform: translatez(0); - -o-transform: translatez(0); - transform: translatez(0); - - &[tabulator-layout="fitDataFill"]{ - .tabulator-tableHolder{ - .tabulator-table{ - min-width:100%; - } - } - } - - &.tabulator-block-select{ - user-select: none; - } - - //column header containing element - .tabulator-header{ - position:relative; - box-sizing: border-box; - - width:100%; - - border-top:1px solid $headerSeperatorColor; - border-bottom:2px solid $headerSeperatorColor; - background-color: $headerBackgroundColor; - font-weight:bold; - - white-space: nowrap; - overflow:hidden; - - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - - //individual column header element - .tabulator-col{ - display:inline-block; - position:relative; - box-sizing:border-box; - background-color: $headerBackgroundColor; - text-align:left; - vertical-align: bottom; - overflow: hidden; - - &.tabulator-moving{ - position: absolute; - border:1px solid $headerSeperatorColor; - background:darken($headerBackgroundColor, 10%); - pointer-events: none; - } - - //hold content of column header - .tabulator-col-content{ - box-sizing:border-box; - position: relative; - padding:$cellPadding; - - //hold title of column header - .tabulator-col-title{ - box-sizing:border-box; - width: 100%; - - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - vertical-align:bottom; - - //element to hold title editor - .tabulator-title-editor{ - box-sizing: border-box; - width: 100%; - - border:1px solid #999; - - padding:1px; - - background: #fff; - } - } - - //column sorter arrow - .tabulator-arrow{ - display: inline-block; - position: absolute; - top:14px; - right:8px; - width: 0; - height: 0; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid $sortArrowInactive; - } - - } - - //complex header column group - &.tabulator-col-group{ - - //gelement to hold sub columns in column group - .tabulator-col-group-cols{ - position:relative; - display: flex; - - border-top:1px solid $borderColor; - overflow: hidden; - - .tabulator-col:last-child{ - margin-right:-1px; - } - } - } - - - //hide left resize handle on first column - &:first-child{ - .tabulator-col-resize-handle.prev{ - display: none; - } - } - - //placeholder element for sortable columns - &.ui-sortable-helper{ - position: absolute; - background-color:darken($headerBackgroundColor, 10%) !important; - border:1px solid $borderColor; - } - - //header filter containing element - .tabulator-header-filter{ - position: relative; - box-sizing: border-box; - margin-top:2px; - width:100%; - text-align: center; - - //styling adjustment for inbuilt editors - textarea{ - height:auto !important; - } - - svg{ - margin-top: 3px; - } - - input{ - &::-ms-clear { - width : 0; - height: 0; - } - } - } - - - //styling child elements for sortable columns - &.tabulator-sortable{ - .tabulator-col-title{ - padding-right:25px; - } - - &:hover{ - cursor:pointer; - background-color:darken($headerBackgroundColor, 10%); - } - - &[aria-sort="none"]{ - .tabulator-col-content .tabulator-arrow{ - border-top: none; - border-bottom: 6px solid $sortArrowInactive; - } - } - - &[aria-sort="asc"]{ - .tabulator-col-content .tabulator-arrow{ - border-top: none; - border-bottom: 6px solid $sortArrowActive; - } - } - - &[aria-sort="desc"]{ - .tabulator-col-content .tabulator-arrow{ - border-top: 6px solid $sortArrowActive; - border-bottom: none; - } - } - } - - &.tabulator-col-vertical{ - .tabulator-col-content{ - .tabulator-col-title{ - writing-mode: vertical-rl; - text-orientation: mixed; - - display:flex; - align-items:center; - justify-content:center; - } - } - - &.tabulator-col-vertical-flip{ - .tabulator-col-title{ - transform: rotate(180deg); - } - } - - &.tabulator-sortable{ - .tabulator-col-title{ - padding-right:0; - padding-top:20px; - } - - &.tabulator-col-vertical-flip{ - .tabulator-col-title{ - padding-right:0; - padding-bottom:20px; - } - - } - - .tabulator-arrow{ - right:calc(50% - 6px); - } - } - } - - } - - .tabulator-frozen{ - display: inline-block; - position: absolute; - - // background-color: inherit; - - z-index: 10; - - &.tabulator-frozen-left{ - border-right:2px solid $rowBorderColor; - } - - &.tabulator-frozen-right{ - border-left:2px solid $rowBorderColor; - } - } - - .tabulator-calcs-holder{ - box-sizing:border-box; - width:100%; - - background:lighten($headerBackgroundColor, 5%) !important; - - .tabulator-row{ - background:lighten($headerBackgroundColor, 5%) !important; - - .tabulator-col-resize-handle{ - display: none; - } - } - - border-top:1px solid $rowBorderColor; - border-bottom:1px solid $headerSeperatorColor; - - overflow: hidden; - } - - .tabulator-frozen-rows-holder{ - min-width:400%; - - &:empty{ - display: none; - } - } - } - - - - //scrolling element to hold table - .tabulator-tableHolder{ - position:relative; - width:100%; - white-space: nowrap; - overflow:auto; - -webkit-overflow-scrolling: touch; - - &:focus{ - outline: none; - } - - //default placeholder element - .tabulator-placeholder{ - box-sizing:border-box; - display: flex; - align-items:center; - - &[tabulator-render-mode="virtual"]{ - position: absolute; - top:0; - left:0; - height:100%; - } - - width:100%; - - span{ - display: inline-block; - - margin:0 auto; - padding:10px; - - color:#000; - font-weight: bold; - font-size: 20px; - } - } - - //element to hold table rows - .tabulator-table{ - position:relative; - display:inline-block; - background-color:$rowBackgroundColor; - white-space: nowrap; - overflow:visible; - - .tabulator-row{ - &.tabulator-calcs{ - font-weight: bold; - background:darken($rowAltBackgroundColor, 5%) !important; - - &.tabulator-calcs-top{ - border-bottom:2px solid $rowBorderColor; - } - - &.tabulator-calcs-bottom{ - border-top:2px solid $rowBorderColor; - } - } - } - } - } - - - //column resize handles - .tabulator-col-resize-handle{ - position:absolute; - right:0; - top:0; - bottom:0; - width:5px; - - &.prev{ - left:0; - right:auto; - } - - &:hover{ - cursor:ew-resize; - } - } - - - //footer element - .tabulator-footer{ - padding:5px 10px; - border-top:2px solid $footerSeperatorColor; - text-align:right; - font-weight:bold; - white-space:nowrap; - user-select:none; - - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - - .tabulator-calcs-holder{ - box-sizing:border-box; - width:calc(100% + 20px); - margin:-5px -10px 5px -10px; - - text-align: left; - - background:lighten($backgroundColor, 5%) !important; - - .tabulator-row{ - background:lighten($backgroundColor, 5%) !important; - - .tabulator-col-resize-handle{ - display: none; - } - } - - border-bottom:1px solid $rowBorderColor; - border-top:1px solid $rowBorderColor; - - overflow: hidden; - - &:only-child{ - margin-bottom:-5px; - border-bottom:none; - } - } - - //pagination container element - .tabulator-pages{ - // margin:0 7px; - } - - //pagination button - .tabulator-page{ - display:inline-block; - - margin:0; - margin-top:5px; - padding:8px 12px; - - border:1px solid $footerBorderColor; - border-right:none; - - background:rgba(255,255,255,.2); - - color: $pagination-color; - font-family:inherit; - font-weight:normal; - font-size:inherit; - - &[data-page="first"]{ - border-top-left-radius:4px; - border-bottom-left-radius:4px; - } - - &[data-page="last"]{ - border:1px solid $footerBorderColor; - border-top-right-radius:4px; - border-bottom-right-radius:4px; - } - - &.active{ - border-color:$pagination-active-border-color; - background-color:$pagination-active-bg; - color:$footerActiveColor; - } - - &:disabled{ - border-color:$pagination-disabled-border-color; - background:$pagination-disabled-bg; - color:$pagination-disabled-color; - } - - &:not(.disabled){ - &:hover{ - cursor:pointer; - border-color:$pagination-hover-border-color; - background:$pagination-hover-bg; - color:$pagination-hover-color; - } - } - } - } - - //holding div that contains loader and covers tabulator element to prevent interaction - .tabulator-loader{ - position:absolute; - display: flex; - align-items:center; - - top:0; - left:0; - z-index:100; - - height:100%; - width:100%; - background:rgba(0,0,0,.4); - text-align:center; - - //loading message element - .tabulator-loader-msg{ - display:inline-block; - - margin:0 auto; - padding:10px 20px; - - border-radius:10px; - - background:#fff; - font-weight:bold; - font-size:16px; - - //loading message - &.tabulator-loading{ - border:4px solid #333; - color:#000; - } - - //error message - &.tabulator-error{ - border:4px solid #D00; - color:#590000; - } - } - } - - - - //Bootstrap theming classes - - &.thead-dark{ - .tabulator-header{ - border-color: $table-dark-border-color; - background-color: $table-dark-bg; - color: $table-dark-color; - - .tabulator-col{ - border-color: $table-dark-border-color; - background-color: $table-dark-bg; - color: $table-dark-color; - } - } - } - - &.table-dark{ - background-color: $table-dark-bg; - - &:not(.thead-light) .tabulator-header{ - border-color: $table-dark-border-color; - background-color: $table-dark-bg; - color: $table-dark-color; - - .tabulator-col{ - border-color: $table-dark-border-color; - background-color: $table-dark-bg; - color: $table-dark-color; - } - } - - .tabulator-tableHolder{ - color: $table-dark-color; - } - - - .tabulator-row{ - border-color: $table-dark-border-color; - - &:hover{ - background-color: $table-dark-hover-bg !important; - } - } - } - - &.table-striped{ - .tabulator-row{ - &:nth-child(even){ - background-color: $rowAltBackgroundColor; - - &.tabulator-selected{ - background-color:$rowSelectedBackground; - } - - &.tabulator-selectable:hover{ - background-color:$rowHoverBackground; - cursor: pointer; - } - - &.tabulator-selected:hover{ - background-color:$rowSelectedBackgroundHover; - cursor: pointer; - } - } - } - - &.table-dark{ - .tabulator-row{ - &:nth-child(even){ - background-color: $table-dark-accent-bg; - } - } - } - } - - &.table-bordered{ - border:1px solid $borderColor; - - .tabulator-header{ - .tabulator-col{ - border-right:1px solid $borderColor; - } - } - - .tabulator-tableHolder{ - .tabulator-table{ - .tabulator-row{ - .tabulator-cell{ - border-right:1px solid $borderColor; - } - } - } - } - } - - - &.table-borderless{ - .tabulator-header{ - border:none; - } - - .tabulator-row{ - border:none; - } - } - - &.table-sm{ - .tabulator-header{ - .tabulator-col{ - .tabulator-col-content{ - padding:$table-cell-padding-sm !important; - } - } - } - - .tabulator-tableHolder{ - .tabulator-table{ - .tabulator-row{ - min-height:$textSize + ($table-cell-padding-sm * 2); - - .tabulator-cell{ - padding:$table-cell-padding-sm !important; - } - } - } - } - } - - - //row colors - .tabulator-tableHolder{ - .tabulator-table{ - .tabulator-row{ - &.table-primary{ - background:theme-color-level("primary", -9) !important; - } - &.table-secondary{ - background:theme-color-level("secondary", -9) !important; - } - &.table-success{ - background:theme-color-level("success", -9) !important; - } - &.table-info{ - background:theme-color-level("info", -9) !important; - } - &.table-warning{ - background:theme-color-level("warning", -9) !important; - } - &.table-danger{ - background:theme-color-level("danger", -9) !important; - } - &.table-light{ - background:theme-color-level("light", -9) !important; - } - &.table-dark{ - background:theme-color-level("dark", -9) !important; - } - &.table-active{ - background:$table-active-bg !important; - } - - &.bg-primary{ - background:theme-color-level("primary", 0) !important; - } - &.bg-secondary{ - background:theme-color-level("secondary", 0) !important; - } - &.bg-success{ - background:theme-color-level("success", 0) !important; - } - &.bg-info{ - background:theme-color-level("info", 0) !important; - } - &.bg-warning{ - background:theme-color-level("warning", 0) !important; - } - &.bg-danger{ - background:theme-color-level("danger", 0) !important; - } - &.bg-light{ - background:theme-color-level("light", 0) !important; - } - &.bg-dark{ - background:theme-color-level("dark", 0) !important; - } - &.bg-active{ - background:$table-active-bg !important; - } - - .tabulator-cell{ - &.table-primary{ - background:theme-color-level("primary", -9) !important; - } - &.table-secondary{ - background:theme-color-level("secondary", -9) !important; - } - &.table-success{ - background:theme-color-level("success", -9) !important; - } - &.table-info{ - background:theme-color-level("info", -9) !important; - } - &.table-warning{ - background:theme-color-level("warning", -9) !important; - } - &.table-danger{ - background:theme-color-level("danger", -9) !important; - } - &.table-light{ - background:theme-color-level("light", -9) !important; - } - &.table-dark{ - background:theme-color-level("dark", -9) !important; - } - &.table-active{ - background:$table-active-bg !important; - } - - &.bg-primary{ - background:theme-color-level("primary", 0) !important; - } - &.bg-secondary{ - background:theme-color-level("secondary", 0) !important; - } - &.bg-success{ - background:theme-color-level("success", 0) !important; - } - &.bg-info{ - background:theme-color-level("info", 0) !important; - } - &.bg-warning{ - background:theme-color-level("warning", 0) !important; - } - &.bg-danger{ - background:theme-color-level("danger", 0) !important; - } - &.bg-light{ - background:theme-color-level("light", 0) !important; - } - &.bg-dark{ - background:theme-color-level("dark", 0) !important; - } - &.bg-active{ - background:$table-active-bg !important; - } - } - } - } - } - -} - -//row element -.tabulator-row{ - position: relative; - box-sizing: border-box; - - min-height:$textSize + ($cellPadding * 2); - background-color: $rowBackgroundColor; - border-bottom:1px solid $rowBorderColor; - - &.tabulator-selectable:hover{ - background-color:$rowHoverBackground; - cursor: pointer; - } - - &.tabulator-selected{ - background-color:$rowSelectedBackground; - } - - &.tabulator-selected:hover{ - background-color:$rowSelectedBackgroundHover; - cursor: pointer; - } - - &.tabulator-moving{ - position: absolute; - - border-top:1px solid $rowBorderColor; - border-bottom:1px solid $rowBorderColor; - - pointer-events: none !important; - z-index:15; - } - - //row resize handles - .tabulator-row-resize-handle{ - position:absolute; - right:0; - bottom:0; - left:0; - height:5px; - - &.prev{ - top:0; - bottom:auto; - } - - &:hover{ - cursor:ns-resize; - } - } - - .tabulator-frozen{ - display: inline-block; - position: absolute; - - background-color: inherit; - - z-index: 10; - - &.tabulator-frozen-left{ - border-right:2px solid $rowBorderColor; - } - - &.tabulator-frozen-right{ - border-left:2px solid $rowBorderColor; - } - } - - .tabulator-responsive-collapse{ - box-sizing:border-box; - - padding:5px; - - border-top:1px solid $rowBorderColor; - border-bottom:1px solid $rowBorderColor; - - &:empty{ - display:none; - } - - table{ - font-size:$textSize; - - tr{ - td{ - position: relative; - - &:first-of-type{ - padding-right:10px; - } - } - } - } - } - - //cell element - .tabulator-cell{ - display:inline-block; - position: relative; - box-sizing:border-box; - padding:$cellPadding; - vertical-align:middle; - white-space:nowrap; - overflow:hidden; - text-overflow:ellipsis; - - &:last-of-type{ - border-right: none; - } - - &.tabulator-editing{ - border:1px solid $editBoxColor; - padding: 0; - - input, select{ - border:1px; - background:transparent; - } - } - - &.tabulator-validation-fail{ - border:1px solid $errorColor; - input, select{ - border:1px; - background:transparent; - - color: $errorColor; - } - } - - //hide left resize handle on first column - &:first-child{ - .tabulator-col-resize-handle.prev{ - display: none; - } - } - - //movable row handle - &.tabulator-row-handle{ - - display: inline-flex; - align-items:center; - - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - - //handle holder - .tabulator-row-handle-box{ - width:80%; - - //Hamburger element - .tabulator-row-handle-bar{ - width:100%; - height:3px; - margin-top:2px; - background:#666; - } - } - } - - .tabulator-data-tree-branch{ - display:inline-block; - vertical-align:middle; - - height:9px; - width:7px; - - margin-top:-9px; - margin-right:5px; - - border-bottom-left-radius:1px; - - border-left:2px solid $rowBorderColor; - border-bottom:2px solid $rowBorderColor; - } - - .tabulator-data-tree-control{ - - display:inline-flex; - justify-content:center; - align-items:center; - vertical-align:middle; - - height:11px; - width:11px; - - margin-right:5px; - - border:1px solid #ccc; - border-radius:2px; - background:rgba(0, 0, 0, .1); - - overflow:hidden; - - &:hover{ - cursor:pointer; - background:rgba(0, 0, 0, .2); - } - - .tabulator-data-tree-control-collapse{ - display:inline-block; - position: relative; - - height: 7px; - width: 1px; - - background: transparent; - - &:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - - height: 1px; - width: 7px; - - background: #ccc; - } - } - - .tabulator-data-tree-control-expand{ - display:inline-block; - position: relative; - - height: 7px; - width: 1px; - - background: #ccc; - - &:after { - position: absolute; - content: ""; - left: -3px; - top: 3px; - - height: 1px; - width: 7px; - - background: #ccc; - } - } - - } - - .tabulator-responsive-collapse-toggle{ - display: inline-flex; - align-items:center; - justify-content:center; - - -moz-user-select: none; - -khtml-user-select: none; - -webkit-user-select: none; - -o-user-select: none; - - height:15px; - width:15px; - - border-radius:20px; - background:#666; - - color:$rowBackgroundColor; - font-weight:bold; - font-size:1.1em; - - &:hover{ - opacity:.7; - } - - &.open{ - .tabulator-responsive-collapse-toggle-close{ - display:initial; - } - - .tabulator-responsive-collapse-toggle-open{ - display:none; - } - } - - .tabulator-responsive-collapse-toggle-close{ - display:none; - } - } - } - - //row grouping element - &.tabulator-group{ - - box-sizing:border-box; - border-bottom:1px solid #999; - border-right:1px solid $rowBorderColor; - border-top:1px solid #999; - padding:5px; - padding-left:10px; - background:#fafafa; - font-weight:bold; - - min-width: 100%; - - &:hover{ - cursor:pointer; - background-color:rgba(0,0,0,.1); - } - - &.tabulator-group-visible{ - .tabulator-arrow{ - margin-right:10px; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-top: 6px solid $sortArrowActive; - border-bottom: 0; - } - } - - &.tabulator-group-level-1{ - .tabulator-arrow{ - margin-left:20px; - } - } - - &.tabulator-group-level-2{ - .tabulator-arrow{ - margin-left:40px; - } - } - - &.tabulator-group-level-3{ - .tabulator-arrow{ - margin-left:60px; - } - } - - &.tabulator-group-level-4{ - .tabulator-arrow{ - margin-left:80px; - } - } - - &.tabulator-group-level-5{ - .tabulator-arrow{ - margin-left:100px; - } - } - - //sorting arrow - .tabulator-arrow{ - display: inline-block; - width: 0; - height: 0; - margin-right:16px; - border-top: 6px solid transparent; - border-bottom: 6px solid transparent; - border-right: 0; - border-left: 6px solid $sortArrowActive; - vertical-align:middle; - } - - span{ - margin-left:10px; - color:#666; - } - } -} - -.tabulator-edit-select-list{ - position: absolute; - display:inline-block; - box-sizing:border-box; - - max-height:200px; - - background:$rowBackgroundColor; - border:1px solid $rowBorderColor; - - font-size:$textSize; - - overflow-y:auto; - -webkit-overflow-scrolling: touch; - - z-index: 10000; - - .tabulator-edit-select-list-item{ - padding:4px; - - &.active{ - color:$rowBackgroundColor; - background:$editBoxColor; - } - - &:hover{ - cursor:pointer; - - color:$rowBackgroundColor; - background:$editBoxColor; - } - } - - .tabulator-edit-select-list-group{ - border-bottom:1px solid $rowBorderColor; - - padding:4px; - padding-top:6px; - - font-weight:bold; - } -} \ No newline at end of file diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/variables.scss b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/variables.scss deleted file mode 100644 index 572c983d08..0000000000 --- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/variables.scss +++ /dev/null @@ -1,870 +0,0 @@ -// -// Variables -// -------------------------------------------------- - - -//== Colors -// -//## Gray and brand colors for use across Bootstrap. - -$gray-base: #000 !default; -$gray-darker: lighten($gray-base, 13.5%) !default; // #222 -$gray-dark: lighten($gray-base, 20%) !default; // #333 -$gray: lighten($gray-base, 33.5%) !default; // #555 -$gray-light: lighten($gray-base, 46.7%) !default; // #777 -$gray-lighter: lighten($gray-base, 93.5%) !default; // #eee - -$brand-primary: darken(#428bca, 6.5%) !default; // #337ab7 -$brand-success: #5cb85c !default; -$brand-info: #5bc0de !default; -$brand-warning: #f0ad4e !default; -$brand-danger: #d9534f !default; - - -//== Scaffolding -// -//## Settings for some of the most global styles. - -//** Background color for ``. -$body-bg: #fff !default; -//** Global text color on ``. -$text-color: $gray-dark !default; - -//** Global textual link color. -$link-color: $brand-primary !default; -//** Link hover color set via `darken()` function. -$link-hover-color: darken($link-color, 15%) !default; -//** Link hover decoration. -$link-hover-decoration: underline !default; - - -//== Typography -// -//## Font, line-height, and color for body text, headings, and more. - -$font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif !default; -$font-family-serif: Georgia, "Times New Roman", Times, serif !default; -//** Default monospace fonts for ``, ``, and `
`.
-$font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace !default;
-$font-family-base:        $font-family-sans-serif !default;
-
-$font-size-base:          14px !default;
-$font-size-large:         ceil(($font-size-base * 1.25)) !default; // ~18px
-$font-size-small:         ceil(($font-size-base * 0.85)) !default; // ~12px
-
-$font-size-h1:            floor(($font-size-base * 2.6)) !default; // ~36px
-$font-size-h2:            floor(($font-size-base * 2.15)) !default; // ~30px
-$font-size-h3:            ceil(($font-size-base * 1.7)) !default; // ~24px
-$font-size-h4:            ceil(($font-size-base * 1.25)) !default; // ~18px
-$font-size-h5:            $font-size-base !default;
-$font-size-h6:            ceil(($font-size-base * 0.85)) !default; // ~12px
-
-//** Unit-less `line-height` for use in components like buttons.
-$line-height-base:        1.428571429 !default; // 20/14
-//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
-$line-height-computed:    floor(($font-size-base * $line-height-base)) !default; // ~20px
-
-//** By default, this inherits from the ``.
-$headings-font-family:    inherit !default;
-$headings-font-weight:    500 !default;
-$headings-line-height:    1.1 !default;
-$headings-color:          inherit !default;
-
-
-//== Iconography
-//
-//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
-
-//** Load fonts from this directory.
-$icon-font-path:          "../fonts/" !default;
-//** File name for all font files.
-$icon-font-name:          "glyphicons-halflings-regular" !default;
-//** Element ID within SVG icon file.
-$icon-font-svg-id:        "glyphicons_halflingsregular" !default;
-
-
-//== Components
-//
-//## Define common padding and border radius sizes and more. Values based on 14px text and 1@mixin 428 line-height (~20px to start).
-
-$padding-base-vertical:     6px !default;
-$padding-base-horizontal:   12px !default;
-
-$padding-large-vertical:    10px !default;
-$padding-large-horizontal:  16px !default;
-
-$padding-small-vertical:    5px !default;
-$padding-small-horizontal:  10px !default;
-
-$padding-xs-vertical:       1px !default;
-$padding-xs-horizontal:     5px !default;
-
-$line-height-large:         1.3333333 !default; // extra decimals for Win 8.1 Chrome
-$line-height-small:         1.5 !default;
-
-$border-radius-base:        4px !default;
-$border-radius-large:       6px !default;
-$border-radius-small:       3px !default;
-
-//** Global color for active items (e.g., navs or dropdowns).
-$component-active-color:    #fff !default;
-//** Global background color for active items (e.g., navs or dropdowns).
-$component-active-bg:       $brand-primary !default;
-
-//** Width of the `border` for generating carets that indicator dropdowns.
-$caret-width-base:          4px !default;
-//** Carets increase slightly in size for larger components.
-$caret-width-large:         5px !default;
-
-
-//== Tables
-//
-//## Customizes the `.table` component with basic values, each used across all table variations.
-
-//** Padding for ``s and ``s.
-$table-cell-padding:            8px !default;
-//** Padding for cells in `.table-condensed`.
-$table-condensed-cell-padding:  5px !default;
-
-//** Default background color used for all tables.
-// $table-bg:                      transparent !default;
-$table-bg:                      #fff !default;
-//** Background color used for `.table-striped`.
-$table-bg-accent:               #f9f9f9 !default;
-//** Background color used for `.table-hover`.
-$table-bg-hover:                #f5f5f5 !default;
-$table-bg-active:               $table-bg-hover !default;
-
-//** Border color for table and cell borders.
-$table-border-color:            #ddd !default;
-
-
-//== Buttons
-//
-//## For each of Bootstrap's buttons, define text, background and border color.
-
-$btn-font-weight:                normal !default;
-
-$btn-default-color:              #333 !default;
-$btn-default-bg:                 #fff !default;
-$btn-default-border:             #ccc !default;
-
-$btn-primary-color:              #fff !default;
-$btn-primary-bg:                 $brand-primary !default;
-$btn-primary-border:             darken($btn-primary-bg, 5%) !default;
-
-$btn-success-color:              #fff !default;
-$btn-success-bg:                 $brand-success !default;
-$btn-success-border:             darken($btn-success-bg, 5%) !default;
-
-$btn-info-color:                 #fff !default;
-$btn-info-bg:                    $brand-info !default;
-$btn-info-border:                darken($btn-info-bg, 5%) !default;
-
-$btn-warning-color:              #fff !default;
-$btn-warning-bg:                 $brand-warning !default;
-$btn-warning-border:             darken($btn-warning-bg, 5%) !default;
-
-$btn-danger-color:               #fff !default;
-$btn-danger-bg:                  $brand-danger !default;
-$btn-danger-border:              darken($btn-danger-bg, 5%) !default;
-
-$btn-link-disabled-color:        $gray-light !default;
-
-// Allows for customizing button radius independently from global border radius
-$btn-border-radius-base:         $border-radius-base !default;
-$btn-border-radius-large:        $border-radius-large !default;
-$btn-border-radius-small:        $border-radius-small !default;
-
-
-//== Forms
-//
-//##
-
-//** `` background color
-$input-bg:                       #fff !default;
-//** `` background color
-$input-bg-disabled:              $gray-lighter !default;
-
-//** Text color for ``s
-$input-color:                    $gray !default;
-//** `` border color
-$input-border:                   #ccc !default;
-
-// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
-//** Default `.form-control` border radius
-// This has no effect on ``s in CSS.
-$input-border-radius:            $border-radius-base !default;
-//** Large `.form-control` border radius
-$input-border-radius-large:      $border-radius-large !default;
-//** Small `.form-control` border radius
-$input-border-radius-small:      $border-radius-small !default;
-
-//** Border color for inputs on focus
-$input-border-focus:             #66afe9 !default;
-
-//** Placeholder text color
-$input-color-placeholder:        #999 !default;
-
-//** Default `.form-control` height
-$input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2) !default;
-//** Large `.form-control` height
-$input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2) !default;
-//** Small `.form-control` height
-$input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2) !default;
-
-//** `.form-group` margin
-$form-group-margin-bottom:       15px !default;
-
-$legend-color:                   $gray-dark !default;
-$legend-border-color:            #e5e5e5 !default;
-
-//** Background color for textual input addons
-$input-group-addon-bg:           $gray-lighter !default;
-//** Border color for textual input addons
-$input-group-addon-border-color: $input-border !default;
-
-//** Disabled cursor for form controls and buttons.
-$cursor-disabled:                not-allowed !default;
-
-
-//== Dropdowns
-//
-//## Dropdown menu container and contents.
-
-//** Background for the dropdown menu.
-$dropdown-bg:                    #fff !default;
-//** Dropdown menu `border-color`.
-$dropdown-border:                rgba(0,0,0,.15) !default;
-//** Dropdown menu `border-color` **for IE8**.
-$dropdown-fallback-border:       #ccc !default;
-//** Divider color for between dropdown items.
-$dropdown-divider-bg:            #e5e5e5 !default;
-
-//** Dropdown link text color.
-$dropdown-link-color:            $gray-dark !default;
-//** Hover color for dropdown links.
-$dropdown-link-hover-color:      darken($gray-dark, 5%) !default;
-//** Hover background for dropdown links.
-$dropdown-link-hover-bg:         #f5f5f5 !default;
-
-//** Active dropdown menu item text color.
-$dropdown-link-active-color:     $component-active-color !default;
-//** Active dropdown menu item background color.
-$dropdown-link-active-bg:        $component-active-bg !default;
-
-//** Disabled dropdown menu item background color.
-$dropdown-link-disabled-color:   $gray-light !default;
-
-//** Text color for headers within dropdown menus.
-$dropdown-header-color:          $gray-light !default;
-
-//** Deprecated `$dropdown-caret-color` as of v3.1.0
-$dropdown-caret-color:           #000 !default;
-
-
-//-- Z-index master list
-//
-// Warning: Avoid customizing these values. They're used for a bird's eye view
-// of components dependent on the z-axis and are designed to all work together.
-//
-// Note: These variables are not generated into the Customizer.
-
-$zindex-navbar:            1000 !default;
-$zindex-dropdown:          1000 !default;
-$zindex-popover:           1060 !default;
-$zindex-tooltip:           1070 !default;
-$zindex-navbar-fixed:      1030 !default;
-$zindex-modal-background:  1040 !default;
-$zindex-modal:             1050 !default;
-
-
-//== Media queries breakpoints
-//
-//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
-
-// Extra small screen / phone
-//** Deprecated `$screen-xs` as of v3.0.1
-$screen-xs:                  480px !default;
-//** Deprecated `$screen-xs-min` as of v3.2.0
-$screen-xs-min:              $screen-xs !default;
-//** Deprecated `$screen-phone` as of v3.0.1
-$screen-phone:               $screen-xs-min !default;
-
-// Small screen / tablet
-//** Deprecated `$screen-sm` as of v3.0.1
-$screen-sm:                  768px !default;
-$screen-sm-min:              $screen-sm !default;
-//** Deprecated `$screen-tablet` as of v3.0.1
-$screen-tablet:              $screen-sm-min !default;
-
-// Medium screen / desktop
-//** Deprecated `$screen-md` as of v3.0.1
-$screen-md:                  992px !default;
-$screen-md-min:              $screen-md !default;
-//** Deprecated `$screen-desktop` as of v3.0.1
-$screen-desktop:             $screen-md-min !default;
-
-// Large screen / wide desktop
-//** Deprecated `$screen-lg` as of v3.0.1
-$screen-lg:                  1200px !default;
-$screen-lg-min:              $screen-lg !default;
-//** Deprecated `$screen-lg-desktop` as of v3.0.1
-$screen-lg-desktop:          $screen-lg-min !default;
-
-// So media queries don't overlap when required, provide a maximum
-$screen-xs-max:              ($screen-sm-min - 1) !default;
-$screen-sm-max:              ($screen-md-min - 1) !default;
-$screen-md-max:              ($screen-lg-min - 1) !default;
-
-
-//== Grid system
-//
-//## Define your custom responsive grid.
-
-//** Number of columns in the grid.
-$grid-columns:              12 !default;
-//** Padding between columns. Gets divided in half for the left and right.
-$grid-gutter-width:         30px !default;
-// Navbar collapse
-//** Point at which the navbar becomes uncollapsed.
-$grid-float-breakpoint:     $screen-sm-min !default;
-//** Point at which the navbar begins collapsing.
-$grid-float-breakpoint-max: ($grid-float-breakpoint - 1) !default;
-
-
-//== Container sizes
-//
-//## Define the maximum width of `.container` for different screen sizes.
-
-// Small screen / tablet
-$container-tablet:             (720px + $grid-gutter-width) !default;
-//** For `$screen-sm-min` and up.
-$container-sm:                 $container-tablet !default;
-
-// Medium screen / desktop
-$container-desktop:            (940px + $grid-gutter-width) !default;
-//** For `$screen-md-min` and up.
-$container-md:                 $container-desktop !default;
-
-// Large screen / wide desktop
-$container-large-desktop:      (1140px + $grid-gutter-width) !default;
-//** For `$screen-lg-min` and up.
-$container-lg:                 $container-large-desktop !default;
-
-
-//== Navbar
-//
-//##
-
-// Basics of a navbar
-$navbar-height:                    50px !default;
-$navbar-margin-bottom:             $line-height-computed !default;
-$navbar-border-radius:             $border-radius-base !default;
-$navbar-padding-horizontal:        floor(($grid-gutter-width / 2)) !default;
-$navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2) !default;
-$navbar-collapse-max-height:       340px !default;
-
-$navbar-default-color:             #777 !default;
-$navbar-default-bg:                #f8f8f8 !default;
-$navbar-default-border:            darken($navbar-default-bg, 6.5%) !default;
-
-// Navbar links
-$navbar-default-link-color:                #777 !default;
-$navbar-default-link-hover-color:          #333 !default;
-$navbar-default-link-hover-bg:             transparent !default;
-$navbar-default-link-active-color:         #555 !default;
-$navbar-default-link-active-bg:            darken($navbar-default-bg, 6.5%) !default;
-$navbar-default-link-disabled-color:       #ccc !default;
-$navbar-default-link-disabled-bg:          transparent !default;
-
-// Navbar brand label
-$navbar-default-brand-color:               $navbar-default-link-color !default;
-$navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%) !default;
-$navbar-default-brand-hover-bg:            transparent !default;
-
-// Navbar toggle
-$navbar-default-toggle-hover-bg:           #ddd !default;
-$navbar-default-toggle-icon-bar-bg:        #888 !default;
-$navbar-default-toggle-border-color:       #ddd !default;
-
-
-//=== Inverted navbar
-// Reset inverted navbar basics
-$navbar-inverse-color:                      lighten($gray-light, 15%) !default;
-$navbar-inverse-bg:                         #222 !default;
-$navbar-inverse-border:                     darken($navbar-inverse-bg, 10%) !default;
-
-// Inverted navbar links
-$navbar-inverse-link-color:                 lighten($gray-light, 15%) !default;
-$navbar-inverse-link-hover-color:           #fff !default;
-$navbar-inverse-link-hover-bg:              transparent !default;
-$navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color !default;
-$navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%) !default;
-$navbar-inverse-link-disabled-color:        #444 !default;
-$navbar-inverse-link-disabled-bg:           transparent !default;
-
-// Inverted navbar brand label
-$navbar-inverse-brand-color:                $navbar-inverse-link-color !default;
-$navbar-inverse-brand-hover-color:          #fff !default;
-$navbar-inverse-brand-hover-bg:             transparent !default;
-
-// Inverted navbar toggle
-$navbar-inverse-toggle-hover-bg:            #333 !default;
-$navbar-inverse-toggle-icon-bar-bg:         #fff !default;
-$navbar-inverse-toggle-border-color:        #333 !default;
-
-
-//== Navs
-//
-//##
-
-//=== Shared nav styles
-$nav-link-padding:                          10px 15px !default;
-$nav-link-hover-bg:                         $gray-lighter !default;
-
-$nav-disabled-link-color:                   $gray-light !default;
-$nav-disabled-link-hover-color:             $gray-light !default;
-
-//== Tabs
-$nav-tabs-border-color:                     #ddd !default;
-
-$nav-tabs-link-hover-border-color:          $gray-lighter !default;
-
-$nav-tabs-active-link-hover-bg:             $body-bg !default;
-$nav-tabs-active-link-hover-color:          $gray !default;
-$nav-tabs-active-link-hover-border-color:   #ddd !default;
-
-$nav-tabs-justified-link-border-color:            #ddd !default;
-$nav-tabs-justified-active-link-border-color:     $body-bg !default;
-
-//== Pills
-$nav-pills-border-radius:                   $border-radius-base !default;
-$nav-pills-active-link-hover-bg:            $component-active-bg !default;
-$nav-pills-active-link-hover-color:         $component-active-color !default;
-
-
-//== Pagination
-//
-//##
-
-$pagination-color:                     $link-color !default;
-$pagination-bg:                        #fff !default;
-$pagination-border:                    #ddd !default;
-
-$pagination-hover-color:               $link-hover-color !default;
-$pagination-hover-bg:                  $gray-lighter !default;
-$pagination-hover-border:              #ddd !default;
-
-$pagination-active-color:              #fff !default;
-$pagination-active-bg:                 $brand-primary !default;
-$pagination-active-border:             $brand-primary !default;
-
-$pagination-disabled-color:            $gray-light !default;
-$pagination-disabled-bg:               #fff !default;
-$pagination-disabled-border:           #ddd !default;
-
-
-//== Pager
-//
-//##
-
-$pager-bg:                             $pagination-bg !default;
-$pager-border:                         $pagination-border !default;
-$pager-border-radius:                  15px !default;
-
-$pager-hover-bg:                       $pagination-hover-bg !default;
-
-$pager-active-bg:                      $pagination-active-bg !default;
-$pager-active-color:                   $pagination-active-color !default;
-
-$pager-disabled-color:                 $pagination-disabled-color !default;
-
-
-//== Jumbotron
-//
-//##
-
-$jumbotron-padding:              30px !default;
-$jumbotron-color:                inherit !default;
-$jumbotron-bg:                   $gray-lighter !default;
-$jumbotron-heading-color:        inherit !default;
-$jumbotron-font-size:            ceil(($font-size-base * 1.5)) !default;
-$jumbotron-heading-font-size:    ceil(($font-size-base * 4.5)) !default;
-
-
-//== Form states and alerts
-//
-//## Define colors for form feedback states and, by default, alerts.
-
-$state-success-text:             #3c763d !default;
-$state-success-bg:               #dff0d8 !default;
-$state-success-border:           darken(adjust-hue($state-success-bg, -10%), 5%) !default;
-
-$state-info-text:                #31708f !default;
-$state-info-bg:                  #d9edf7 !default;
-$state-info-border:              darken(adjust-hue($state-info-bg, -10%), 7%) !default;
-
-$state-warning-text:             #8a6d3b !default;
-$state-warning-bg:               #fcf8e3 !default;
-$state-warning-border:           darken(adjust-hue($state-warning-bg, -10%), 5%) !default;
-
-$state-danger-text:              #a94442 !default;
-$state-danger-bg:                #f2dede !default;
-$state-danger-border:            darken(adjust-hue($state-danger-bg, -10%), 5%) !default;
-
-
-//== Tooltips
-//
-//##
-
-//** Tooltip max width
-$tooltip-max-width:           200px !default;
-//** Tooltip text color
-$tooltip-color:               #fff !default;
-//** Tooltip background color
-$tooltip-bg:                  #000 !default;
-$tooltip-opacity:             .9 !default;
-
-//** Tooltip arrow width
-$tooltip-arrow-width:         5px !default;
-//** Tooltip arrow color
-$tooltip-arrow-color:         $tooltip-bg !default;
-
-
-//== Popovers
-//
-//##
-
-//** Popover body background color
-$popover-bg:                          #fff !default;
-//** Popover maximum width
-$popover-max-width:                   276px !default;
-//** Popover border color
-$popover-border-color:                rgba(0,0,0,.2) !default;
-//** Popover fallback border color
-$popover-fallback-border-color:       #ccc !default;
-
-//** Popover title background color
-$popover-title-bg:                    darken($popover-bg, 3%) !default;
-
-//** Popover arrow width
-$popover-arrow-width:                 10px !default;
-//** Popover arrow color
-$popover-arrow-color:                 $popover-bg !default;
-
-//** Popover outer arrow width
-$popover-arrow-outer-width:           ($popover-arrow-width + 1) !default;
-//** Popover outer arrow color
-$popover-arrow-outer-color:           fadein($popover-border-color, 5%) !default;
-//** Popover outer arrow fallback color
-$popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%) !default;
-
-
-//== Labels
-//
-//##
-
-//** Default label background color
-$label-default-bg:            $gray-light !default;
-//** Primary label background color
-$label-primary-bg:            $brand-primary !default;
-//** Success label background color
-$label-success-bg:            $brand-success !default;
-//** Info label background color
-$label-info-bg:               $brand-info !default;
-//** Warning label background color
-$label-warning-bg:            $brand-warning !default;
-//** Danger label background color
-$label-danger-bg:             $brand-danger !default;
-
-//** Default label text color
-$label-color:                 #fff !default;
-//** Default text color of a linked label
-$label-link-hover-color:      #fff !default;
-
-
-//== Modals
-//
-//##
-
-//** Padding applied to the modal body
-$modal-inner-padding:         15px !default;
-
-//** Padding applied to the modal title
-$modal-title-padding:         15px !default;
-//** Modal title line-height
-$modal-title-line-height:     $line-height-base !default;
-
-//** Background color of modal content area
-$modal-content-bg:                             #fff !default;
-//** Modal content border color
-$modal-content-border-color:                   rgba(0,0,0,.2) !default;
-//** Modal content border color **for IE8**
-$modal-content-fallback-border-color:          #999 !default;
-
-//** Modal backdrop background color
-$modal-backdrop-bg:           #000 !default;
-//** Modal backdrop opacity
-$modal-backdrop-opacity:      .5 !default;
-//** Modal header border color
-$modal-header-border-color:   #e5e5e5 !default;
-//** Modal footer border color
-$modal-footer-border-color:   $modal-header-border-color !default;
-
-$modal-lg:                    900px !default;
-$modal-md:                    600px !default;
-$modal-sm:                    300px !default;
-
-
-//== Alerts
-//
-//## Define alert colors, border radius, and padding.
-
-$alert-padding:               15px !default;
-$alert-border-radius:         $border-radius-base !default;
-$alert-link-font-weight:      bold !default;
-
-$alert-success-bg:            $state-success-bg !default;
-$alert-success-text:          $state-success-text !default;
-$alert-success-border:        $state-success-border !default;
-
-$alert-info-bg:               $state-info-bg !default;
-$alert-info-text:             $state-info-text !default;
-$alert-info-border:           $state-info-border !default;
-
-$alert-warning-bg:            $state-warning-bg !default;
-$alert-warning-text:          $state-warning-text !default;
-$alert-warning-border:        $state-warning-border !default;
-
-$alert-danger-bg:             $state-danger-bg !default;
-$alert-danger-text:           $state-danger-text !default;
-$alert-danger-border:         $state-danger-border !default;
-
-
-//== Progress bars
-//
-//##
-
-//** Background color of the whole progress component
-$progress-bg:                 #f5f5f5 !default;
-//** Progress bar text color
-$progress-bar-color:          #fff !default;
-//** Variable for setting rounded corners on progress bar.
-$progress-border-radius:      $border-radius-base !default;
-
-//** Default progress bar color
-$progress-bar-bg:             $brand-primary !default;
-//** Success progress bar color
-$progress-bar-success-bg:     $brand-success !default;
-//** Warning progress bar color
-$progress-bar-warning-bg:     $brand-warning !default;
-//** Danger progress bar color
-$progress-bar-danger-bg:      $brand-danger !default;
-//** Info progress bar color
-$progress-bar-info-bg:        $brand-info !default;
-
-
-//== List group
-//
-//##
-
-//** Background color on `.list-group-item`
-$list-group-bg:                 #fff !default;
-//** `.list-group-item` border color
-$list-group-border:             #ddd !default;
-//** List group border radius
-$list-group-border-radius:      $border-radius-base !default;
-
-//** Background color of single list items on hover
-$list-group-hover-bg:           #f5f5f5 !default;
-//** Text color of active list items
-$list-group-active-color:       $component-active-color !default;
-//** Background color of active list items
-$list-group-active-bg:          $component-active-bg !default;
-//** Border color of active list elements
-$list-group-active-border:      $list-group-active-bg !default;
-//** Text color for content within active list items
-$list-group-active-text-color:  lighten($list-group-active-bg, 40%) !default;
-
-//** Text color of disabled list items
-$list-group-disabled-color:      $gray-light !default;
-//** Background color of disabled list items
-$list-group-disabled-bg:         $gray-lighter !default;
-//** Text color for content within disabled list items
-$list-group-disabled-text-color: $list-group-disabled-color !default;
-
-$list-group-link-color:         #555 !default;
-$list-group-link-hover-color:   $list-group-link-color !default;
-$list-group-link-heading-color: #333 !default;
-
-
-//== Panels
-//
-//##
-
-$panel-bg:                    #fff !default;
-$panel-body-padding:          15px !default;
-$panel-heading-padding:       10px 15px !default;
-$panel-footer-padding:        $panel-heading-padding !default;
-$panel-border-radius:         $border-radius-base !default;
-
-//** Border color for elements within panels
-$panel-inner-border:          #ddd !default;
-$panel-footer-bg:             #f5f5f5 !default;
-
-$panel-default-text:          $gray-dark !default;
-$panel-default-border:        #ddd !default;
-$panel-default-heading-bg:    #f5f5f5 !default;
-
-$panel-primary-text:          #fff !default;
-$panel-primary-border:        $brand-primary !default;
-$panel-primary-heading-bg:    $brand-primary !default;
-
-$panel-success-text:          $state-success-text !default;
-$panel-success-border:        $state-success-border !default;
-$panel-success-heading-bg:    $state-success-bg !default;
-
-$panel-info-text:             $state-info-text !default;
-$panel-info-border:           $state-info-border !default;
-$panel-info-heading-bg:       $state-info-bg !default;
-
-$panel-warning-text:          $state-warning-text !default;
-$panel-warning-border:        $state-warning-border !default;
-$panel-warning-heading-bg:    $state-warning-bg !default;
-
-$panel-danger-text:           $state-danger-text !default;
-$panel-danger-border:         $state-danger-border !default;
-$panel-danger-heading-bg:     $state-danger-bg !default;
-
-
-//== Thumbnails
-//
-//##
-
-//** Padding around the thumbnail image
-$thumbnail-padding:           4px !default;
-//** Thumbnail background color
-$thumbnail-bg:                $body-bg !default;
-//** Thumbnail border color
-$thumbnail-border:            #ddd !default;
-//** Thumbnail border radius
-$thumbnail-border-radius:     $border-radius-base !default;
-
-//** Custom text color for thumbnail captions
-$thumbnail-caption-color:     $text-color !default;
-//** Padding around the thumbnail caption
-$thumbnail-caption-padding:   9px !default;
-
-
-//== Wells
-//
-//##
-
-$well-bg:                     #f5f5f5 !default;
-$well-border:                 darken($well-bg, 7%) !default;
-
-
-//== Badges
-//
-//##
-
-$badge-color:                 #fff !default;
-//** Linked badge text color on hover
-$badge-link-hover-color:      #fff !default;
-$badge-bg:                    $gray-light !default;
-
-//** Badge text color in active nav link
-$badge-active-color:          $link-color !default;
-//** Badge background color in active nav link
-$badge-active-bg:             #fff !default;
-
-$badge-font-weight:           bold !default;
-$badge-line-height:           1 !default;
-$badge-border-radius:         10px !default;
-
-
-//== Breadcrumbs
-//
-//##
-
-$breadcrumb-padding-vertical:   8px !default;
-$breadcrumb-padding-horizontal: 15px !default;
-//** Breadcrumb background color
-$breadcrumb-bg:                 #f5f5f5 !default;
-//** Breadcrumb text color
-$breadcrumb-color:              #ccc !default;
-//** Text color of current page in the breadcrumb
-$breadcrumb-active-color:       $gray-light !default;
-//** Textual separator for between breadcrumb elements
-$breadcrumb-separator:          "/" !default;
-
-
-//== Carousel
-//
-//##
-
-$carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6) !default;
-
-$carousel-control-color:                      #fff !default;
-$carousel-control-width:                      15% !default;
-$carousel-control-opacity:                    .5 !default;
-$carousel-control-font-size:                  20px !default;
-
-$carousel-indicator-active-bg:                #fff !default;
-$carousel-indicator-border-color:             #fff !default;
-
-$carousel-caption-color:                      #fff !default;
-
-
-//== Close
-//
-//##
-
-$close-font-weight:           bold !default;
-$close-color:                 #000 !default;
-$close-text-shadow:           0 1px 0 #fff !default;
-
-
-//== Code
-//
-//##
-
-$code-color:                  #c7254e !default;
-$code-bg:                     #f9f2f4 !default;
-
-$kbd-color:                   #fff !default;
-$kbd-bg:                      #333 !default;
-
-$pre-bg:                      #f5f5f5 !default;
-$pre-color:                   $gray-dark !default;
-$pre-border-color:            #ccc !default;
-$pre-scrollable-max-height:   340px !default;
-
-
-//== Type
-//
-//##
-
-//** Horizontal offset for forms and lists.
-$component-offset-horizontal: 180px !default;
-//** Text muted color
-$text-muted:                  $gray-light !default;
-//** Abbreviations and acronyms border color
-$abbr-border-color:           $gray-light !default;
-//** Headings small color
-$headings-small-color:        $gray-light !default;
-//** Blockquote small color
-$blockquote-small-color:      $gray-light !default;
-//** Blockquote font size
-$blockquote-font-size:        ($font-size-base * 1.25) !default;
-//** Blockquote border color
-$blockquote-border-color:     $gray-lighter !default;
-//** Page header border color
-$page-header-border-color:    $gray-lighter !default;
-//** Width of horizontal description list titles
-$dl-horizontal-offset:        $component-offset-horizontal !default;
-//** Point at which .dl-horizontal becomes horizontal
-$dl-horizontal-breakpoint:    $grid-float-breakpoint !default;
-//** Horizontal line color.
-$hr-border:                   $gray-lighter !default;
diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/variables4.scss b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/variables4.scss
deleted file mode 100644
index 9a1d9485ab..0000000000
--- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/bootstrap/variables4.scss
+++ /dev/null
@@ -1,930 +0,0 @@
-
-
-// Variables
-//
-// Variables should follow the `$component-state-property-size` formula for
-// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.
-
-
-//
-// Color system
-//
-
-// stylelint-disable
-$white:    #fff !default;
-$gray-100: #f8f9fa !default;
-$gray-200: #e9ecef !default;
-$gray-300: #dee2e6 !default;
-$gray-400: #ced4da !default;
-$gray-500: #adb5bd !default;
-$gray-600: #6c757d !default;
-$gray-700: #495057 !default;
-$gray-800: #343a40 !default;
-$gray-900: #212529 !default;
-$black:    #000 !default;
-
-$grays: () !default;
-$grays: map-merge((
-  "100": $gray-100,
-  "200": $gray-200,
-  "300": $gray-300,
-  "400": $gray-400,
-  "500": $gray-500,
-  "600": $gray-600,
-  "700": $gray-700,
-  "800": $gray-800,
-  "900": $gray-900
-), $grays);
-
-$blue:    #007bff !default;
-$indigo:  #6610f2 !default;
-$purple:  #6f42c1 !default;
-$pink:    #e83e8c !default;
-$red:     #dc3545 !default;
-$orange:  #fd7e14 !default;
-$yellow:  #ffc107 !default;
-$green:   #28a745 !default;
-$teal:    #20c997 !default;
-$cyan:    #17a2b8 !default;
-
-$colors: () !default;
-$colors: map-merge((
-  "blue":       $blue,
-  "indigo":     $indigo,
-  "purple":     $purple,
-  "pink":       $pink,
-  "red":        $red,
-  "orange":     $orange,
-  "yellow":     $yellow,
-  "green":      $green,
-  "teal":       $teal,
-  "cyan":       $cyan,
-  "white":      $white,
-  "gray":       $gray-600,
-  "gray-dark":  $gray-800
-), $colors);
-
-$primary:       $blue !default;
-$secondary:     $gray-600 !default;
-$success:       $green !default;
-$info:          $cyan !default;
-$warning:       $yellow !default;
-$danger:        $red !default;
-$light:         $gray-100 !default;
-$dark:          $gray-800 !default;
-
-$theme-colors: () !default;
-$theme-colors: map-merge((
-  "primary":    $primary,
-  "secondary":  $secondary,
-  "success":    $success,
-  "info":       $info,
-  "warning":    $warning,
-  "danger":     $danger,
-  "light":      $light,
-  "dark":       $dark
-), $theme-colors);
-// stylelint-enable
-
-// Set a specific jump point for requesting color jumps
-$theme-color-interval:      8% !default;
-
-// The yiq lightness value that determines when the lightness of color changes from "dark" to "light". Acceptable values are between 0 and 255.
-$yiq-contrasted-threshold:  150 !default;
-
-// Customize the light and dark text colors for use in our YIQ color contrast function.
-$yiq-text-dark:             $gray-900 !default;
-$yiq-text-light:            $white !default;
-
-// Options
-//
-// Quickly modify global styling by enabling or disabling optional features.
-
-$enable-caret:              true !default;
-$enable-rounded:            true !default;
-$enable-shadows:            false !default;
-$enable-gradients:          false !default;
-$enable-transitions:        true !default;
-$enable-hover-media-query:  false !default; // Deprecated, no longer affects any compiled CSS
-$enable-grid-classes:       true !default;
-$enable-print-styles:       true !default;
-
-
-// Spacing
-//
-// Control the default styling of most Bootstrap elements by modifying these
-// variables. Mostly focused on spacing.
-// You can add more entries to the $spacers map, should you need more variation.
-
-// stylelint-disable
-$spacer: 1rem !default;
-$spacers: () !default;
-$spacers: map-merge((
-  0: 0,
-  1: ($spacer * .25),
-  2: ($spacer * .5),
-  3: $spacer,
-  4: ($spacer * 1.5),
-  5: ($spacer * 3)
-), $spacers);
-
-// This variable affects the `.h-*` and `.w-*` classes.
-$sizes: () !default;
-$sizes: map-merge((
-  25: 25%,
-  50: 50%,
-  75: 75%,
-  100: 100%,
-  auto: auto
-), $sizes);
-// stylelint-enable
-
-// Body
-//
-// Settings for the `` element.
-
-$body-bg:                   $white !default;
-$body-color:                $gray-900 !default;
-
-// Links
-//
-// Style anchor elements.
-
-$link-color:                theme-color("primary") !default;
-$link-decoration:           none !default;
-$link-hover-color:          darken($link-color, 15%) !default;
-$link-hover-decoration:     underline !default;
-
-// Paragraphs
-//
-// Style p element.
-
-$paragraph-margin-bottom:   1rem !default;
-
-
-// Grid breakpoints
-//
-// Define the minimum dimensions at which your layout will change,
-// adapting to different screen sizes, for use in media queries.
-
-$grid-breakpoints: (
-  xs: 0,
-  sm: 576px,
-  md: 768px,
-  lg: 992px,
-  xl: 1200px
-) !default;
-
-@include _assert-ascending($grid-breakpoints, "$grid-breakpoints");
-@include _assert-starts-at-zero($grid-breakpoints);
-
-
-// Grid containers
-//
-// Define the maximum width of `.container` for different screen sizes.
-
-$container-max-widths: (
-  sm: 540px,
-  md: 720px,
-  lg: 960px,
-  xl: 1140px
-) !default;
-
-@include _assert-ascending($container-max-widths, "$container-max-widths");
-
-
-// Grid columns
-//
-// Set the number of columns and specify the width of the gutters.
-
-$grid-columns:                12 !default;
-$grid-gutter-width:           30px !default;
-
-// Components
-//
-// Define common padding and border radius sizes and more.
-
-$line-height-lg:              1.5 !default;
-$line-height-sm:              1.5 !default;
-
-$border-width:                1px !default;
-$border-color:                $gray-300 !default;
-
-$border-radius:               .25rem !default;
-$border-radius-lg:            .3rem !default;
-$border-radius-sm:            .2rem !default;
-
-$box-shadow-sm:               0 .125rem .25rem rgba($black, .075) !default;
-$box-shadow:                  0 .5rem 1rem rgba($black, .15) !default;
-$box-shadow-lg:               0 1rem 3rem rgba($black, .175) !default;
-
-$component-active-color:      $white !default;
-$component-active-bg:         theme-color("primary") !default;
-
-$caret-width:                 .3em !default;
-
-$transition-base:             all .2s ease-in-out !default;
-$transition-fade:             opacity .15s linear !default;
-$transition-collapse:         height .35s ease !default;
-
-
-// Fonts
-//
-// Font, line-height, and color for body text, headings, and more.
-
-// stylelint-disable value-keyword-case
-$font-family-sans-serif:      -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default;
-$font-family-monospace:       SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;
-$font-family-base:            $font-family-sans-serif !default;
-// stylelint-enable value-keyword-case
-
-$font-size-base:              1rem !default; // Assumes the browser default, typically `16px`
-$font-size-lg:                ($font-size-base * 1.25) !default;
-$font-size-sm:                ($font-size-base * .875) !default;
-
-$font-weight-light:           300 !default;
-$font-weight-normal:          400 !default;
-$font-weight-bold:            700 !default;
-
-$font-weight-base:            $font-weight-normal !default;
-$line-height-base:            1.5 !default;
-
-$h1-font-size:                $font-size-base * 2.5 !default;
-$h2-font-size:                $font-size-base * 2 !default;
-$h3-font-size:                $font-size-base * 1.75 !default;
-$h4-font-size:                $font-size-base * 1.5 !default;
-$h5-font-size:                $font-size-base * 1.25 !default;
-$h6-font-size:                $font-size-base !default;
-
-$headings-margin-bottom:      ($spacer / 2) !default;
-$headings-font-family:        inherit !default;
-$headings-font-weight:        500 !default;
-$headings-line-height:        1.2 !default;
-$headings-color:              inherit !default;
-
-$display1-size:               6rem !default;
-$display2-size:               5.5rem !default;
-$display3-size:               4.5rem !default;
-$display4-size:               3.5rem !default;
-
-$display1-weight:             300 !default;
-$display2-weight:             300 !default;
-$display3-weight:             300 !default;
-$display4-weight:             300 !default;
-$display-line-height:         $headings-line-height !default;
-
-$lead-font-size:              ($font-size-base * 1.25) !default;
-$lead-font-weight:            300 !default;
-
-$small-font-size:             80% !default;
-
-$text-muted:                  $gray-600 !default;
-
-$blockquote-small-color:      $gray-600 !default;
-$blockquote-font-size:        ($font-size-base * 1.25) !default;
-
-$hr-border-color:             rgba($black, .1) !default;
-$hr-border-width:             $border-width !default;
-
-$mark-padding:                .2em !default;
-
-$dt-font-weight:              $font-weight-bold !default;
-
-$kbd-box-shadow:              inset 0 -.1rem 0 rgba($black, .25) !default;
-$nested-kbd-font-weight:      $font-weight-bold !default;
-
-$list-inline-padding:         .5rem !default;
-
-$mark-bg:                     #fcf8e3 !default;
-
-$hr-margin-y:                 $spacer !default;
-
-
-// Tables
-//
-// Customizes the `.table` component with basic values, each used across all table variations.
-
-$table-cell-padding:          .75rem !default;
-$table-cell-padding-sm:       .3rem !default;
-
-$table-bg:                    transparent !default;
-$table-accent-bg:             rgba($black, .05) !default;
-$table-hover-bg:              rgba($black, .075) !default;
-$table-active-bg:             $table-hover-bg !default;
-
-$table-border-width:          $border-width !default;
-$table-border-color:          $gray-300 !default;
-
-$table-head-bg:               $gray-200 !default;
-$table-head-color:            $gray-700 !default;
-
-$table-dark-bg:               $gray-900 !default;
-$table-dark-accent-bg:        rgba($white, .05) !default;
-$table-dark-hover-bg:         rgba($white, .075) !default;
-$table-dark-border-color:     lighten($gray-900, 7.5%) !default;
-$table-dark-color:            $body-bg !default;
-
-$table-striped-order:         odd !default;
-
-$table-caption-color:         $text-muted !default;
-
-// Buttons + Forms
-//
-// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.
-
-$input-btn-padding-y:         .375rem !default;
-$input-btn-padding-x:         .75rem !default;
-$input-btn-line-height:       $line-height-base !default;
-
-$input-btn-focus-width:       .2rem !default;
-$input-btn-focus-color:       rgba($component-active-bg, .25) !default;
-$input-btn-focus-box-shadow:  0 0 0 $input-btn-focus-width $input-btn-focus-color !default;
-
-$input-btn-padding-y-sm:      .25rem !default;
-$input-btn-padding-x-sm:      .5rem !default;
-$input-btn-line-height-sm:    $line-height-sm !default;
-
-$input-btn-padding-y-lg:      .5rem !default;
-$input-btn-padding-x-lg:      1rem !default;
-$input-btn-line-height-lg:    $line-height-lg !default;
-
-$input-btn-border-width:      $border-width !default;
-
-
-// Buttons
-//
-// For each of Bootstrap's buttons, define text, background, and border color.
-
-$btn-padding-y:               $input-btn-padding-y !default;
-$btn-padding-x:               $input-btn-padding-x !default;
-$btn-line-height:             $input-btn-line-height !default;
-
-$btn-padding-y-sm:            $input-btn-padding-y-sm !default;
-$btn-padding-x-sm:            $input-btn-padding-x-sm !default;
-$btn-line-height-sm:          $input-btn-line-height-sm !default;
-
-$btn-padding-y-lg:            $input-btn-padding-y-lg !default;
-$btn-padding-x-lg:            $input-btn-padding-x-lg !default;
-$btn-line-height-lg:          $input-btn-line-height-lg !default;
-
-$btn-border-width:            $input-btn-border-width !default;
-
-$btn-font-weight:             $font-weight-normal !default;
-$btn-box-shadow:              inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;
-$btn-focus-width:             $input-btn-focus-width !default;
-$btn-focus-box-shadow:        $input-btn-focus-box-shadow !default;
-$btn-disabled-opacity:        .65 !default;
-$btn-active-box-shadow:       inset 0 3px 5px rgba($black, .125) !default;
-
-$btn-link-disabled-color:     $gray-600 !default;
-
-$btn-block-spacing-y:         .5rem !default;
-
-// Allows for customizing button radius independently from global border radius
-$btn-border-radius:           $border-radius !default;
-$btn-border-radius-lg:        $border-radius-lg !default;
-$btn-border-radius-sm:        $border-radius-sm !default;
-
-$btn-transition:              color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
-
-
-// Forms
-
-$label-margin-bottom:                   .5rem !default;
-
-$input-padding-y:                       $input-btn-padding-y !default;
-$input-padding-x:                       $input-btn-padding-x !default;
-$input-line-height:                     $input-btn-line-height !default;
-
-$input-padding-y-sm:                    $input-btn-padding-y-sm !default;
-$input-padding-x-sm:                    $input-btn-padding-x-sm !default;
-$input-line-height-sm:                  $input-btn-line-height-sm !default;
-
-$input-padding-y-lg:                    $input-btn-padding-y-lg !default;
-$input-padding-x-lg:                    $input-btn-padding-x-lg !default;
-$input-line-height-lg:                  $input-btn-line-height-lg !default;
-
-$input-bg:                              $white !default;
-$input-disabled-bg:                     $gray-200 !default;
-
-$input-color:                           $gray-700 !default;
-$input-border-color:                    $gray-400 !default;
-$input-border-width:                    $input-btn-border-width !default;
-$input-box-shadow:                      inset 0 1px 1px rgba($black, .075) !default;
-
-$input-border-radius:                   $border-radius !default;
-$input-border-radius-lg:                $border-radius-lg !default;
-$input-border-radius-sm:                $border-radius-sm !default;
-
-$input-focus-bg:                        $input-bg !default;
-$input-focus-border-color:              lighten($component-active-bg, 25%) !default;
-$input-focus-color:                     $input-color !default;
-$input-focus-width:                     $input-btn-focus-width !default;
-$input-focus-box-shadow:                $input-btn-focus-box-shadow !default;
-
-$input-placeholder-color:               $gray-600 !default;
-$input-plaintext-color:                 $body-color !default;
-
-$input-height-border:                   $input-border-width * 2 !default;
-
-$input-height-inner:                    ($font-size-base * $input-btn-line-height) + ($input-btn-padding-y * 2) !default;
-$input-height:                          calc(#{$input-height-inner} + #{$input-height-border}) !default;
-
-$input-height-inner-sm:                 ($font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2) !default;
-$input-height-sm:                       calc(#{$input-height-inner-sm} + #{$input-height-border}) !default;
-
-$input-height-inner-lg:                 ($font-size-lg * $input-btn-line-height-lg) + ($input-btn-padding-y-lg * 2) !default;
-$input-height-lg:                       calc(#{$input-height-inner-lg} + #{$input-height-border}) !default;
-
-$input-transition:                      border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
-
-$form-text-margin-top:                  .25rem !default;
-
-$form-check-input-gutter:               1.25rem !default;
-$form-check-input-margin-y:             .3rem !default;
-$form-check-input-margin-x:             .25rem !default;
-
-$form-check-inline-margin-x:            .75rem !default;
-$form-check-inline-input-margin-x:      .3125rem !default;
-
-$form-group-margin-bottom:              1rem !default;
-
-$input-group-addon-color:               $input-color !default;
-$input-group-addon-bg:                  $gray-200 !default;
-$input-group-addon-border-color:        $input-border-color !default;
-
-$custom-control-gutter:                 1.5rem !default;
-$custom-control-spacer-x:               1rem !default;
-
-$custom-control-indicator-size:         1rem !default;
-$custom-control-indicator-bg:           $gray-300 !default;
-$custom-control-indicator-bg-size:      50% 50% !default;
-$custom-control-indicator-box-shadow:   inset 0 .25rem .25rem rgba($black, .1) !default;
-
-$custom-control-indicator-disabled-bg:          $gray-200 !default;
-$custom-control-label-disabled-color:           $gray-600 !default;
-
-$custom-control-indicator-checked-color:        $component-active-color !default;
-$custom-control-indicator-checked-bg:           $component-active-bg !default;
-$custom-control-indicator-checked-disabled-bg:  rgba(theme-color("primary"), .5) !default;
-$custom-control-indicator-checked-box-shadow:   none !default;
-
-$custom-control-indicator-focus-box-shadow:     0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;
-
-$custom-control-indicator-active-color:         $component-active-color !default;
-$custom-control-indicator-active-bg:            lighten($component-active-bg, 35%) !default;
-$custom-control-indicator-active-box-shadow:    none !default;
-
-$custom-checkbox-indicator-border-radius:       $border-radius !default;
-$custom-checkbox-indicator-icon-checked:        str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"), "#", "%23") !default;
-
-$custom-checkbox-indicator-indeterminate-bg:          $component-active-bg !default;
-$custom-checkbox-indicator-indeterminate-color:       $custom-control-indicator-checked-color !default;
-$custom-checkbox-indicator-icon-indeterminate:        str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/%3E%3C/svg%3E"), "#", "%23") !default;
-$custom-checkbox-indicator-indeterminate-box-shadow:  none !default;
-
-$custom-radio-indicator-border-radius:          50% !default;
-$custom-radio-indicator-icon-checked:           str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='#{$custom-control-indicator-checked-color}'/%3E%3C/svg%3E"), "#", "%23") !default;
-
-$custom-select-padding-y:           .375rem !default;
-$custom-select-padding-x:           .75rem !default;
-$custom-select-height:              $input-height !default;
-$custom-select-indicator-padding:   1rem !default; // Extra padding to account for the presence of the background-image based indicator
-$custom-select-line-height:         $input-btn-line-height !default;
-$custom-select-color:               $input-color !default;
-$custom-select-disabled-color:      $gray-600 !default;
-$custom-select-bg:                  $input-bg !default;
-$custom-select-disabled-bg:         $gray-200 !default;
-$custom-select-bg-size:             8px 10px !default; // In pixels because image dimensions
-$custom-select-indicator-color:     $gray-800 !default;
-$custom-select-indicator:           str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E"), "#", "%23") !default;
-$custom-select-border-width:        $input-btn-border-width !default;
-$custom-select-border-color:        $input-border-color !default;
-$custom-select-border-radius:       $border-radius !default;
-
-$custom-select-focus-border-color:  $input-focus-border-color !default;
-$custom-select-focus-box-shadow:    inset 0 1px 2px rgba($black, .075), 0 0 5px rgba($custom-select-focus-border-color, .5) !default;
-
-$custom-select-font-size-sm:        75% !default;
-$custom-select-height-sm:           $input-height-sm !default;
-
-$custom-select-font-size-lg:        125% !default;
-$custom-select-height-lg:           $input-height-lg !default;
-
-$custom-range-track-width:          100% !default;
-$custom-range-track-height:         .5rem !default;
-$custom-range-track-cursor:         pointer !default;
-$custom-range-track-bg:             $gray-300 !default;
-$custom-range-track-border-radius:  1rem !default;
-$custom-range-track-box-shadow:     inset 0 .25rem .25rem rgba($black, .1) !default;
-
-$custom-range-thumb-width:            1rem !default;
-$custom-range-thumb-height:           $custom-range-thumb-width !default;
-$custom-range-thumb-bg:               $component-active-bg !default;
-$custom-range-thumb-border:           0 !default;
-$custom-range-thumb-border-radius:    1rem !default;
-$custom-range-thumb-box-shadow:       0 .1rem .25rem rgba($black, .1) !default;
-$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-btn-focus-box-shadow !default;
-$custom-range-thumb-active-bg:        lighten($component-active-bg, 35%) !default;
-
-$custom-file-height:                $input-height !default;
-$custom-file-focus-border-color:    $input-focus-border-color !default;
-$custom-file-focus-box-shadow:      $input-btn-focus-box-shadow !default;
-
-$custom-file-padding-y:             $input-btn-padding-y !default;
-$custom-file-padding-x:             $input-btn-padding-x !default;
-$custom-file-line-height:           $input-btn-line-height !default;
-$custom-file-color:                 $input-color !default;
-$custom-file-bg:                    $input-bg !default;
-$custom-file-border-width:          $input-btn-border-width !default;
-$custom-file-border-color:          $input-border-color !default;
-$custom-file-border-radius:         $input-border-radius !default;
-$custom-file-box-shadow:            $input-box-shadow !default;
-$custom-file-button-color:          $custom-file-color !default;
-$custom-file-button-bg:             $input-group-addon-bg !default;
-$custom-file-text: (
-  en: "Browse"
-) !default;
-
-
-// Form validation
-$form-feedback-margin-top:          $form-text-margin-top !default;
-$form-feedback-font-size:           $small-font-size !default;
-$form-feedback-valid-color:         theme-color("success") !default;
-$form-feedback-invalid-color:       theme-color("danger") !default;
-
-
-// Dropdowns
-//
-// Dropdown menu container and contents.
-
-$dropdown-min-width:                10rem !default;
-$dropdown-padding-y:                .5rem !default;
-$dropdown-spacer:                   .125rem !default;
-$dropdown-bg:                       $white !default;
-$dropdown-border-color:             rgba($black, .15) !default;
-$dropdown-border-radius:            $border-radius !default;
-$dropdown-border-width:             $border-width !default;
-$dropdown-divider-bg:               $gray-200 !default;
-$dropdown-box-shadow:               0 .5rem 1rem rgba($black, .175) !default;
-
-$dropdown-link-color:               $gray-900 !default;
-$dropdown-link-hover-color:         darken($gray-900, 5%) !default;
-$dropdown-link-hover-bg:            $gray-100 !default;
-
-$dropdown-link-active-color:        $component-active-color !default;
-$dropdown-link-active-bg:           $component-active-bg !default;
-
-$dropdown-link-disabled-color:      $gray-600 !default;
-
-$dropdown-item-padding-y:           .25rem !default;
-$dropdown-item-padding-x:           1.5rem !default;
-
-$dropdown-header-color:             $gray-600 !default;
-
-
-// Z-index master list
-//
-// Warning: Avoid customizing these values. They're used for a bird's eye view
-// of components dependent on the z-axis and are designed to all work together.
-
-$zindex-dropdown:                   1000 !default;
-$zindex-sticky:                     1020 !default;
-$zindex-fixed:                      1030 !default;
-$zindex-modal-backdrop:             1040 !default;
-$zindex-modal:                      1050 !default;
-$zindex-popover:                    1060 !default;
-$zindex-tooltip:                    1070 !default;
-
-// Navs
-
-$nav-link-padding-y:                .5rem !default;
-$nav-link-padding-x:                1rem !default;
-$nav-link-disabled-color:           $gray-600 !default;
-
-$nav-tabs-border-color:             $gray-300 !default;
-$nav-tabs-border-width:             $border-width !default;
-$nav-tabs-border-radius:            $border-radius !default;
-$nav-tabs-link-hover-border-color:  $gray-200 $gray-200 $nav-tabs-border-color !default;
-$nav-tabs-link-active-color:        $gray-700 !default;
-$nav-tabs-link-active-bg:           $body-bg !default;
-$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;
-
-$nav-pills-border-radius:           $border-radius !default;
-$nav-pills-link-active-color:       $component-active-color !default;
-$nav-pills-link-active-bg:          $component-active-bg !default;
-
-$nav-divider-color:                 $gray-200 !default;
-$nav-divider-margin-y:              ($spacer / 2) !default;
-
-// Navbar
-
-$navbar-padding-y:                  ($spacer / 2) !default;
-$navbar-padding-x:                  $spacer !default;
-
-$navbar-nav-link-padding-x:         .5rem !default;
-
-$navbar-brand-font-size:            $font-size-lg !default;
-// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link
-$nav-link-height:                   ($font-size-base * $line-height-base + $nav-link-padding-y * 2) !default;
-$navbar-brand-height:               $navbar-brand-font-size * $line-height-base !default;
-$navbar-brand-padding-y:            ($nav-link-height - $navbar-brand-height) / 2 !default;
-
-$navbar-toggler-padding-y:          .25rem !default;
-$navbar-toggler-padding-x:          .75rem !default;
-$navbar-toggler-font-size:          $font-size-lg !default;
-$navbar-toggler-border-radius:      $btn-border-radius !default;
-
-$navbar-dark-color:                 rgba($white, .5) !default;
-$navbar-dark-hover-color:           rgba($white, .75) !default;
-$navbar-dark-active-color:          $white !default;
-$navbar-dark-disabled-color:        rgba($white, .25) !default;
-$navbar-dark-toggler-icon-bg:       str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-dark-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default;
-$navbar-dark-toggler-border-color:  rgba($white, .1) !default;
-
-$navbar-light-color:                rgba($black, .5) !default;
-$navbar-light-hover-color:          rgba($black, .7) !default;
-$navbar-light-active-color:         rgba($black, .9) !default;
-$navbar-light-disabled-color:       rgba($black, .3) !default;
-$navbar-light-toggler-icon-bg:      str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$navbar-light-color}' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"), "#", "%23") !default;
-$navbar-light-toggler-border-color: rgba($black, .1) !default;
-
-// Pagination
-
-$pagination-padding-y:              .5rem !default;
-$pagination-padding-x:              .75rem !default;
-$pagination-padding-y-sm:           .25rem !default;
-$pagination-padding-x-sm:           .5rem !default;
-$pagination-padding-y-lg:           .75rem !default;
-$pagination-padding-x-lg:           1.5rem !default;
-$pagination-line-height:            1.25 !default;
-
-$pagination-color:                  $link-color !default;
-$pagination-bg:                     $white !default;
-$pagination-border-width:           $border-width !default;
-$pagination-border-color:           $gray-300 !default;
-
-$pagination-focus-box-shadow:       $input-btn-focus-box-shadow !default;
-$pagination-focus-outline:          0 !default;
-
-$pagination-hover-color:            $link-hover-color !default;
-$pagination-hover-bg:               $gray-200 !default;
-$pagination-hover-border-color:     $gray-300 !default;
-
-$pagination-active-color:           $component-active-color !default;
-$pagination-active-bg:              $component-active-bg !default;
-$pagination-active-border-color:    $pagination-active-bg !default;
-
-$pagination-disabled-color:         $gray-600 !default;
-$pagination-disabled-bg:            $white !default;
-$pagination-disabled-border-color:  $gray-300 !default;
-
-
-// Jumbotron
-
-$jumbotron-padding:                 2rem !default;
-$jumbotron-bg:                      $gray-200 !default;
-
-
-// Cards
-
-$card-spacer-y:                     .75rem !default;
-$card-spacer-x:                     1.25rem !default;
-$card-border-width:                 $border-width !default;
-$card-border-radius:                $border-radius !default;
-$card-border-color:                 rgba($black, .125) !default;
-$card-inner-border-radius:          calc(#{$card-border-radius} - #{$card-border-width}) !default;
-$card-cap-bg:                       rgba($black, .03) !default;
-$card-bg:                           $white !default;
-
-$card-img-overlay-padding:          1.25rem !default;
-
-$card-group-margin:                 ($grid-gutter-width / 2) !default;
-$card-deck-margin:                  $card-group-margin !default;
-
-$card-columns-count:                3 !default;
-$card-columns-gap:                  1.25rem !default;
-$card-columns-margin:               $card-spacer-y !default;
-
-
-// Tooltips
-
-$tooltip-font-size:                 $font-size-sm !default;
-$tooltip-max-width:                 200px !default;
-$tooltip-color:                     $white !default;
-$tooltip-bg:                        $black !default;
-$tooltip-border-radius:             $border-radius !default;
-$tooltip-opacity:                   .9 !default;
-$tooltip-padding-y:                 .25rem !default;
-$tooltip-padding-x:                 .5rem !default;
-$tooltip-margin:                    0 !default;
-
-$tooltip-arrow-width:               .8rem !default;
-$tooltip-arrow-height:              .4rem !default;
-$tooltip-arrow-color:               $tooltip-bg !default;
-
-
-// Popovers
-
-$popover-font-size:                 $font-size-sm !default;
-$popover-bg:                        $white !default;
-$popover-max-width:                 276px !default;
-$popover-border-width:              $border-width !default;
-$popover-border-color:              rgba($black, .2) !default;
-$popover-border-radius:             $border-radius-lg !default;
-$popover-box-shadow:                0 .25rem .5rem rgba($black, .2) !default;
-
-$popover-header-bg:                 darken($popover-bg, 3%) !default;
-$popover-header-color:              $headings-color !default;
-$popover-header-padding-y:          .5rem !default;
-$popover-header-padding-x:          .75rem !default;
-
-$popover-body-color:                $body-color !default;
-$popover-body-padding-y:            $popover-header-padding-y !default;
-$popover-body-padding-x:            $popover-header-padding-x !default;
-
-$popover-arrow-width:               1rem !default;
-$popover-arrow-height:              .5rem !default;
-$popover-arrow-color:               $popover-bg !default;
-
-$popover-arrow-outer-color:         fade-in($popover-border-color, .05) !default;
-
-
-// Badges
-
-$badge-font-size:                   75% !default;
-$badge-font-weight:                 $font-weight-bold !default;
-$badge-padding-y:                   .25em !default;
-$badge-padding-x:                   .4em !default;
-$badge-border-radius:               $border-radius !default;
-
-$badge-pill-padding-x:              .6em !default;
-// Use a higher than normal value to ensure completely rounded edges when
-// customizing padding or font-size on labels.
-$badge-pill-border-radius:          10rem !default;
-
-
-// Modals
-
-// Padding applied to the modal body
-$modal-inner-padding:               1rem !default;
-
-$modal-dialog-margin:               .5rem !default;
-$modal-dialog-margin-y-sm-up:       1.75rem !default;
-
-$modal-title-line-height:           $line-height-base !default;
-
-$modal-content-bg:                  $white !default;
-$modal-content-border-color:        rgba($black, .2) !default;
-$modal-content-border-width:        $border-width !default;
-$modal-content-border-radius:       $border-radius-lg !default;
-$modal-content-box-shadow-xs:       0 .25rem .5rem rgba($black, .5) !default;
-$modal-content-box-shadow-sm-up:    0 .5rem 1rem rgba($black, .5) !default;
-
-$modal-backdrop-bg:                 $black !default;
-$modal-backdrop-opacity:            .5 !default;
-$modal-header-border-color:         $gray-200 !default;
-$modal-footer-border-color:         $modal-header-border-color !default;
-$modal-header-border-width:         $modal-content-border-width !default;
-$modal-footer-border-width:         $modal-header-border-width !default;
-$modal-header-padding:              1rem !default;
-
-$modal-lg:                          800px !default;
-$modal-md:                          500px !default;
-$modal-sm:                          300px !default;
-
-$modal-transition:                  transform .3s ease-out !default;
-
-
-// Alerts
-//
-// Define alert colors, border radius, and padding.
-
-$alert-padding-y:                   .75rem !default;
-$alert-padding-x:                   1.25rem !default;
-$alert-margin-bottom:               1rem !default;
-$alert-border-radius:               $border-radius !default;
-$alert-link-font-weight:            $font-weight-bold !default;
-$alert-border-width:                $border-width !default;
-
-$alert-bg-level:                    -10 !default;
-$alert-border-level:                -9 !default;
-$alert-color-level:                 6 !default;
-
-
-// Progress bars
-
-$progress-height:                   1rem !default;
-$progress-font-size:                ($font-size-base * .75) !default;
-$progress-bg:                       $gray-200 !default;
-$progress-border-radius:            $border-radius !default;
-$progress-box-shadow:               inset 0 .1rem .1rem rgba($black, .1) !default;
-$progress-bar-color:                $white !default;
-$progress-bar-bg:                   theme-color("primary") !default;
-$progress-bar-animation-timing:     1s linear infinite !default;
-$progress-bar-transition:           width .6s ease !default;
-
-// List group
-
-$list-group-bg:                     $white !default;
-$list-group-border-color:           rgba($black, .125) !default;
-$list-group-border-width:           $border-width !default;
-$list-group-border-radius:          $border-radius !default;
-
-$list-group-item-padding-y:         .75rem !default;
-$list-group-item-padding-x:         1.25rem !default;
-
-$list-group-hover-bg:               $gray-100 !default;
-$list-group-active-color:           $component-active-color !default;
-$list-group-active-bg:              $component-active-bg !default;
-$list-group-active-border-color:    $list-group-active-bg !default;
-
-$list-group-disabled-color:         $gray-600 !default;
-$list-group-disabled-bg:            $list-group-bg !default;
-
-$list-group-action-color:           $gray-700 !default;
-$list-group-action-hover-color:     $list-group-action-color !default;
-
-$list-group-action-active-color:    $body-color !default;
-$list-group-action-active-bg:       $gray-200 !default;
-
-
-// Image thumbnails
-
-$thumbnail-padding:                 .25rem !default;
-$thumbnail-bg:                      $body-bg !default;
-$thumbnail-border-width:            $border-width !default;
-$thumbnail-border-color:            $gray-300 !default;
-$thumbnail-border-radius:           $border-radius !default;
-$thumbnail-box-shadow:              0 1px 2px rgba($black, .075) !default;
-
-
-// Figures
-
-$figure-caption-font-size:          90% !default;
-$figure-caption-color:              $gray-600 !default;
-
-
-// Breadcrumbs
-
-$breadcrumb-padding-y:              .75rem !default;
-$breadcrumb-padding-x:              1rem !default;
-$breadcrumb-item-padding:           .5rem !default;
-
-$breadcrumb-margin-bottom:          1rem !default;
-
-$breadcrumb-bg:                     $gray-200 !default;
-$breadcrumb-divider-color:          $gray-600 !default;
-$breadcrumb-active-color:           $gray-600 !default;
-$breadcrumb-divider:                quote("/") !default;
-
-$breadcrumb-border-radius:          $border-radius !default;
-
-
-// Carousel
-
-$carousel-control-color:            $white !default;
-$carousel-control-width:            15% !default;
-$carousel-control-opacity:          .5 !default;
-
-$carousel-indicator-width:          30px !default;
-$carousel-indicator-height:         3px !default;
-$carousel-indicator-spacer:         3px !default;
-$carousel-indicator-active-bg:      $white !default;
-
-$carousel-caption-width:            70% !default;
-$carousel-caption-color:            $white !default;
-
-$carousel-control-icon-width:       20px !default;
-
-$carousel-control-prev-icon-bg:     str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"), "#", "%23") !default;
-$carousel-control-next-icon-bg:     str-replace(url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"), "#", "%23") !default;
-
-$carousel-transition:               transform .6s ease !default; // Define transform transition first if using multiple transitons (e.g., `transform 2s ease, opacity .5s ease-out`)
-
-
-// Close
-
-$close-font-size:                   $font-size-base * 1.5 !default;
-$close-font-weight:                 $font-weight-bold !default;
-$close-color:                       $black !default;
-$close-text-shadow:                 0 1px 0 $white !default;
-
-// Code
-
-$code-font-size:                    87.5% !default;
-$code-color:                        $pink !default;
-
-$kbd-padding-y:                     .2rem !default;
-$kbd-padding-x:                     .4rem !default;
-$kbd-font-size:                     $code-font-size !default;
-$kbd-color:                         $white !default;
-$kbd-bg:                            $gray-900 !default;
-
-$pre-color:                         $gray-900 !default;
-$pre-scrollable-max-height:         340px !default;
-
-
-// Printing
-$print-page-size:                   a3 !default;
-$print-body-min-width:              map-get($grid-breakpoints, "lg") !default;
diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/semantic-ui/tabulator_semantic-ui.scss b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/semantic-ui/tabulator_semantic-ui.scss
deleted file mode 100644
index 054b6181c9..0000000000
--- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/semantic-ui/tabulator_semantic-ui.scss
+++ /dev/null
@@ -1,1332 +0,0 @@
-
-@import "variables_table.scss";
-
-
-
-//Main Theme Variables
-$backgroundColor: $background !default; //background color of tabulator
-$textSize:14px !default; //table text size
-
-//header themeing
-$headerBackgroundColor:$headerBackground !default; //border to tabulator
-$headerTextColor:$headerColor !default; //header text colour
-$headerBorderColor:#ddd !default;  //header border color
-$headerSeperatorColor:#999 !default; //header bottom seperator color
-$headerMargin:4px !default; //padding round header
-
-//column header arrows
-$sortArrowActive: #666 !default;
-$sortArrowInactive: #bbb !default;
-
-//row themeing
-$rowBorderColor:#ddd !default; //table border color
-$rowTextColor:#333 !default; //table text color
-
-$rowSelectedBackground: #9ABCEA !default; //row background color when selected
-$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered
-
-
-$editBoxColor:#1D68CD !default; //border color for edit boxes
-$errorColor:#dd0000 !default; //error indication
-
-//footer themeing
-$footerBackgroundColor:#fff !default; //border to tabulator
-$footerTextColor:#555 !default; //footer text colour
-$footerBorderColor:#aaa !default; //footer border color
-$footerSeperatorColor:#999 !default; //footer bottom seperator color
-$footerActiveColor:#d00 !default; //footer bottom active text color
-
-
-//Tabulator Containing Element
-.tabulator{
-	position: relative;
-	background-color: $backgroundColor;
-	overflow:hidden;
-	font-size:$textSize;
-	text-align: left;
-	width: 100%;
-
-	margin: $margin;
-	border: $border;
-	box-shadow: $boxShadow;
-	border-radius: $borderRadius;
-	color: $color;
-
-	-webkit-transform: translatez(0);
-	-moz-transform: translatez(0);
-	-ms-transform: translatez(0);
-	-o-transform: translatez(0);
-	transform: translatez(0);
-
-	&[tabulator-layout="fitDataFill"]{
-		.tabulator-tableHolder{
-			.tabulator-table{
-				min-width:100%;
-			}
-		}
-	}
-
-	&.tabulator-block-select{
-		user-select: none;
-	}
-
-	//column header containing element
-	.tabulator-header{
-		position:relative;
-		box-sizing: border-box;
-
-		width:100%;
-
-		border-bottom: $headerBorder;
-		background-color: $headerBackgroundColor;
-
-		box-shadow: $headerBoxShadow;
-
-		color: $headerTextColor;
-		font-style: $headerFontStyle;
-		font-weight: $headerFontWeight;
-		text-transform: $headerTextTransform;
-
-		white-space: nowrap;
-		overflow:hidden;
-
-		-moz-user-select: none;
-		-khtml-user-select: none;
-		-webkit-user-select: none;
-		-o-user-select: none;
-
-		//individual column header element
-		.tabulator-col{
-			display:inline-block;
-
-			position:relative;
-			box-sizing:border-box;
-			// border-right: $headerDivider;
-			background-color: $headerBackgroundColor;
-			text-align:left;
-			vertical-align: bottom;
-			overflow: hidden;
-
-			&.tabulator-moving{
-				position: absolute;
-				border:1px solid  $headerSeperatorColor;
-				background:darken($headerBackgroundColor, 10%);
-				pointer-events: none;
-			}
-
-			//hold content of column header
-			.tabulator-col-content{
-				box-sizing:border-box;
-				position: relative;
-				padding: $headerVerticalPadding $headerHorizontalPadding;
-
-				//hold title of column header
-				.tabulator-col-title{
-					box-sizing:border-box;
-					width: 100%;
-
-					white-space: nowrap;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					vertical-align:bottom;
-
-					//element to hold title editor
-					.tabulator-title-editor{
-						box-sizing: border-box;
-						width: 100%;
-
-						border:1px solid #999;
-
-						padding:1px;
-
-						background: #fff;
-					}
-				}
-
-				//column sorter arrow
-				.tabulator-arrow{
-					display: inline-block;
-					position: absolute;
-					top:18px;
-					right:8px;
-					width: 0;
-					height: 0;
-					border-left: 6px solid transparent;
-					border-right: 6px solid transparent;
-					border-bottom: 6px solid $sortArrowInactive;
-				}
-
-			}
-
-			//complex header column group
-			&.tabulator-col-group{
-
-				//gelement to hold sub columns in column group
-				.tabulator-col-group-cols{
-					position:relative;
-					display: flex;
-
-					border-top:1px solid $headerBorderColor;
-					overflow: hidden;
-
-					.tabulator-col:last-child{
-						margin-right:-1px;
-					}
-				}
-			}
-
-
-			//hide left resize handle on first column
-			&:first-child{
-				.tabulator-col-resize-handle.prev{
-					display: none;
-				}
-			}
-
-			//placeholder element for sortable columns
-			&.ui-sortable-helper{
-				position: absolute;
-				background-color:darken($headerBackgroundColor, 10%) !important;
-				border:1px solid $headerBorderColor;
-			}
-
-			//header filter containing element
-			.tabulator-header-filter{
-				position: relative;
-				box-sizing: border-box;
-				margin-top:2px;
-				width:100%;
-				text-align: center;
-
-				//styling adjustment for inbuilt editors
-				textarea{
-					height:auto !important;
-				}
-
-				svg{
-					margin-top: 3px;
-				}
-
-				input{
-					&::-ms-clear {
-					  width : 0;
-					  height: 0;
-					}
-				}
-			}
-
-
-			//styling child elements for sortable columns
-			&.tabulator-sortable{
-				.tabulator-col-title{
-					padding-right:25px;
-				}
-
-				&:hover{
-					cursor:pointer;
-					background-color:darken($headerBackgroundColor, 10%);
-				}
-
-				&[aria-sort="none"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: none;
-						border-bottom: 6px solid $sortArrowInactive;
-					}
-				}
-
-				&[aria-sort="asc"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: none;
-						border-bottom: 6px solid $sortArrowActive;
-					}
-				}
-
-				&[aria-sort="desc"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: 6px solid $sortArrowActive;
-						border-bottom: none;
-					}
-				}
-			}
-
-			&.tabulator-col-vertical{
-				.tabulator-col-content{
-					.tabulator-col-title{
-						writing-mode: vertical-rl;
-						text-orientation: mixed;
-
-						display:flex;
-						align-items:center;
-						justify-content:center;
-					}
-				}
-
-				&.tabulator-col-vertical-flip{
-					.tabulator-col-title{
-						transform: rotate(180deg);
-					}
-				}
-
-				&.tabulator-sortable{
-					.tabulator-col-title{
-						padding-right:0;
-						padding-top:20px;
-					}
-
-					&.tabulator-col-vertical-flip{
-						.tabulator-col-title{
-							padding-right:0;
-							padding-bottom:20px;
-						}
-
-					}
-
-					.tabulator-arrow{
-						right:calc(50% - 6px);
-					}
-				}
-			}
-
-		}
-
-		.tabulator-frozen{
-			display: inline-block;
-			position: absolute;
-
-			// background-color: inherit;
-
-			z-index: 10;
-
-			&.tabulator-frozen-left{
-				border-right:2px solid $rowBorderColor;
-			}
-
-			&.tabulator-frozen-right{
-				border-left:2px solid $rowBorderColor;
-			}
-		}
-
-
-		.tabulator-calcs-holder{
-			box-sizing:border-box;
-			min-width:400%;
-
-			background:lighten($headerBackgroundColor, 5%) !important;
-
-			.tabulator-row{
-				background:lighten($headerBackgroundColor, 5%) !important;
-
-				.tabulator-col-resize-handle{
-					display: none;
-				}
-			}
-
-			border-top:1px solid $rowBorderColor;
-			border-bottom:1px solid $headerBorderColor;
-
-			overflow: hidden;
-		}
-
-		.tabulator-frozen-rows-holder{
-			min-width:400%;
-
-			&:empty{
-				display: none;
-			}
-		}
-	}
-
-
-
-	//scrolling element to hold table
-	.tabulator-tableHolder{
-		position:relative;
-		width:100%;
-		white-space: nowrap;
-		overflow:auto;
-		-webkit-overflow-scrolling: touch;
-
-		&:focus{
-			outline: none;
-		}
-
-		//default placeholder element
-		.tabulator-placeholder{
-			box-sizing:border-box;
-			display: flex;
-			align-items:center;
-
-			&[tabulator-render-mode="virtual"]{
-				position: absolute;
-				top:0;
-				left:0;
-				height:100%;
-			}
-
-			width:100%;
-
-			span{
-				display: inline-block;
-
-				margin:0 auto;
-				padding:10px;
-
-				color:#000;
-				font-weight: bold;
-				font-size: 20px;
-			}
-		}
-
-		//element to hold table rows
-		.tabulator-table{
-			position:relative;
-			display:inline-block;
-			white-space: nowrap;
-			overflow:visible;
-			color:$rowTextColor;
-
-			.tabulator-row{
-				&.tabulator-calcs{
-					font-weight: bold;
-					background:darken($background, 5%) !important;
-
-					&.tabulator-calcs-top{
-						border-bottom:2px solid $rowBorderColor;
-					}
-
-					&.tabulator-calcs-bottom{
-						border-top:2px solid $rowBorderColor;
-					}
-				}
-			}
-		}
-	}
-
-
-	//column resize handles
-	.tabulator-col-resize-handle{
-		position:absolute;
-		right:0;
-		top:0;
-		bottom:0;
-		width:5px;
-
-		&.prev{
-			left:0;
-			right:auto;
-		}
-
-		&:hover{
-			cursor:ew-resize;
-		}
-	}
-
-
-	//footer element
-	.tabulator-footer{
-		padding: $footerVerticalPadding $footerHorizontalPadding;
-
-		border-top: $footerBorder;
-		box-shadow: $footerBoxShadow;
-
-		background: $footerBackground;
-
-
-		text-align:right;
-		color: $footerColor;
-
-		font-style: $footerFontStyle;
-		font-weight: $footerFontWeight;
-		text-transform: $footerTextTransform;
-
-		white-space:nowrap;
-		user-select:none;
-
-		-moz-user-select: none;
-		-khtml-user-select: none;
-		-webkit-user-select: none;
-		-o-user-select: none;
-
-		.tabulator-calcs-holder{
-			box-sizing:border-box;
-			width:calc(100% + 20px);
-			margin:(-$footerVerticalPadding) (-$footerHorizontalPadding) $footerVerticalPadding (-$footerHorizontalPadding);
-
-			text-align: left;
-
-			background:lighten($footerBackground, 5%) !important;
-
-			.tabulator-row{
-				font-weight: bold;
-				background:lighten($footerBackground, 5%) !important;
-
-				.tabulator-col-resize-handle{
-					display: none;
-				}
-			}
-
-			border-bottom:1px solid $rowBorderColor;
-			border-top:1px solid $rowBorderColor;
-
-			overflow: hidden;
-
-			&:only-child{
-				margin-bottom:-$footerVerticalPadding;
-				border-bottom:none;
-			}
-		}
-
-		//pagination container element
-		.tabulator-pages{
-			margin:0 7px;
-		}
-
-		//pagination button
-		.tabulator-page{
-			display:inline-block;
-			margin:0 2px;
-			border:1px solid $footerBorderColor;
-			border-radius:3px;
-			padding:2px 5px;
-			background:rgba(255,255,255,.2);
-			color: $footerTextColor;
-			font-family:inherit;
-			font-weight:inherit;
-			font-size:inherit;
-
-			&.active{
-				color:$footerActiveColor;
-			}
-
-			&:disabled{
-				opacity:.5;
-			}
-
-			&:not(.disabled){
-				&:hover{
-					cursor:pointer;
-					background:rgba(0,0,0,.2);
-					color:#fff;
-				}
-			}
-		}
-	}
-
-	//holding div that contains loader and covers tabulator element to prevent interaction
-	.tabulator-loader{
-		position:absolute;
-		display: flex;
-		align-items:center;
-
-		top:0;
-		left:0;
-		z-index:100;
-
-		height:100%;
-		width:100%;
-		background:rgba(0,0,0,.4);
-		text-align:center;
-
-		//loading message element
-		.tabulator-loader-msg{
-			display:inline-block;
-
-			margin:0 auto;
-			padding:10px 20px;
-
-			border-radius:10px;
-
-			background:#fff;
-			font-weight:bold;
-			font-size:16px;
-
-			//loading message
-			&.tabulator-loading{
-				border:4px solid #333;
-				color:#000;
-			}
-
-			//error message
-			&.tabulator-error{
-				border:4px solid #D00;
-				color:#590000;
-			}
-		}
-	}
-
-
-	//Semantic-ui theming classes
-
-	.tabulator-tableHolder{
-		.tabulator-table{
-			.tabulator-row{
-				&.positive, .tabulator-cell.positive{
-					box-shadow: $positiveBoxShadow;
-					background: $positiveBackgroundColor !important;
-					color: $positiveColor !important;
-
-					&:hover{
-						background: $positiveBackgroundHover !important;
-						color: $positiveColorHover !important;
-					}
-				}
-
-				&.negative, .tabulator-cell.negative{
-					box-shadow: $negativeBoxShadow;
-					background: $negativeBackgroundColor !important;
-					color: $negativeColor !important;
-
-					&:hover{
-						background: $negativeBackgroundHover !important;
-						color: $negativeColorHover !important;
-					}
-				}
-
-				&.error, .tabulator-cell.error{
-					box-shadow: $errorBoxShadow;
-					background: $errorBackgroundColor !important;
-					color: $errorColor !important;
-
-					&:hover{
-						background: $errorBackgroundHover !important;
-						color: $errorColorHover !important;
-					}
-				}
-
-				&.warning, .tabulator-cell.warning{
-					box-shadow: $warningBoxShadow;
-					background: $warningBackgroundColor !important;
-					color: $warningColor !important;
-
-					&:hover{
-						background: $warningBackgroundHover !important;
-						color: $warningColorHover !important;
-					}
-				}
-
-				&.active, .tabulator-cell.active{
-					box-shadow: $activeBoxShadow;
-					background: $activeBackgroundColor !important;
-					color: $activeColor !important;
-
-					&:hover{
-						background: $positiveBackgroundHover !important;
-						color: $positiveColorHover !important;
-					}
-				}
-
-				&.active, &.disabled:hover, .tabulator-cell.active{
-					pointer-events: none;
-					color: $disabledTextColor;
-				}
-			}
-		}
-	}
-
-
-	&.inverted{
-
-		background: $invertedBackground;
-		color: $invertedCellColor;
-		border: $invertedBorder;
-
-		.tabulator-header{
-			background-color: $invertedHeaderBackground;
-			border-color: $invertedHeaderBorderColor !important;
-			color: $invertedHeaderColor;
-
-			.tabulator-col{
-				border-color: $invertedCellBorderColor !important;
-			}
-		}
-
-		.tabulator-tableHolder{
-			.tabulator-table{
-				.tabulator-row{
-					color: $invertedCellColor;
-					border: $invertedBorder;
-
-					.tabulator-cell{
-						border-color: $invertedCellBorderColor !important;
-					}
-				}
-			}
-		}
-
-		.tabulator-footer{
-			background: $definitionPageBackground;
-		}
-	}
-
-	&.striped{
-		.tabulator-tableHolder{
-			.tabulator-table{
-				.tabulator-row{
-					&:nth-child(even){
-						background-color: $basicTableStripedBackground !important;
-					}
-				}
-			}
-		}
-	}
-
-	&.celled{
-		border:1px solid $borderColor;
-
-		.tabulator-header{
-			.tabulator-col{
-				border-right:$cellBorder;
-			}
-		}
-
-		.tabulator-tableHolder{
-			.tabulator-table{
-				.tabulator-row{
-					.tabulator-cell{
-						border-right:$cellBorder;
-					}
-				}
-			}
-		}
-
-	}
-
-
-	&[class*="single line"]{
-		.tabulator-tableHolder{
-			.tabulator-table{
-				.tabulator-row{
-					.tabulator-cell{
-						border-right:none;
-					}
-				}
-			}
-		}
-	}
-
-	//coloured table varients
-	/* Red */
-	&.red {
-		border-top: $coloredBorderSize solid $red;
-	}
-	&.inverted.red {
-		background-color: $red !important;
-		color: $white !important;
-	}
-
-	/* Orange */
-	&.orange {
-		border-top: $coloredBorderSize solid $orange;
-	}
-	&.inverted.orange {
-		background-color: $orange !important;
-		color: $white !important;
-	}
-
-	/* Yellow */
-	&.yellow {
-		border-top: $coloredBorderSize solid $yellow;
-	}
-	&.inverted.yellow {
-		background-color: $yellow !important;
-		color: $white !important;
-	}
-
-	/* Olive */
-	&.olive {
-		border-top: $coloredBorderSize solid $olive;
-	}
-	&.inverted.olive {
-		background-color: $olive !important;
-		color: $white !important;
-	}
-
-	/* Green */
-	&.green {
-		border-top: $coloredBorderSize solid $green;
-	}
-	&.inverted.green {
-		background-color: $green !important;
-		color: $white !important;
-	}
-
-	/* Teal */
-	&.teal {
-		border-top: $coloredBorderSize solid $teal;
-	}
-	&.inverted.teal {
-		background-color: $teal !important;
-		color: $white !important;
-	}
-
-	/* Blue */
-	&.blue {
-		border-top: $coloredBorderSize solid $blue;
-	}
-	&.inverted.blue {
-		background-color: $blue !important;
-		color: $white !important;
-	}
-
-	/* Violet */
-	&.violet {
-		border-top: $coloredBorderSize solid $violet;
-	}
-	&.inverted.violet {
-		background-color: $violet !important;
-		color: $white !important;
-	}
-
-	/* Purple */
-	&.purple {
-		border-top: $coloredBorderSize solid $purple;
-	}
-	&.inverted.purple {
-		background-color: $purple !important;
-		color: $white !important;
-	}
-
-	/* Pink */
-	&.pink {
-		border-top: $coloredBorderSize solid $pink;
-	}
-	&.inverted.pink {
-		background-color: $pink !important;
-		color: $white !important;
-	}
-
-	/* Brown */
-	&.brown {
-		border-top: $coloredBorderSize solid $brown;
-	}
-	&.inverted.brown {
-		background-color: $brown !important;
-		color: $white !important;
-	}
-
-	/* Grey */
-	&.grey {
-		border-top: $coloredBorderSize solid $grey;
-	}
-	&.inverted.grey {
-		background-color: $grey !important;
-		color: $white !important;
-	}
-
-	/* Black */
-	&.black {
-		border-top: $coloredBorderSize solid $black;
-	}
-	&.inverted.black {
-		background-color: $black !important;
-		color: $white !important;
-	}
-
-	&.padded{
-		.tabulator-header{
-			.tabulator-col{
-				.tabulator-col-content{
-					padding: $paddedVerticalPadding $paddedHorizontalPadding;
-
-					.tabulator-arrow{
-						top:20px;
-					}
-				}
-			}
-		}
-		.tabulator-tableHolder{
-			.tabulator-table{
-				.tabulator-row{
-					.tabulator-cell{
-						padding: $paddedVerticalPadding $paddedHorizontalPadding;
-					}
-				}
-			}
-		}
-
-		&.very{
-			.tabulator-header{
-				.tabulator-col{
-					.tabulator-col-content{
-						padding: $veryPaddedVerticalPadding $veryPaddedHorizontalPadding;
-
-						.tabulator-arrow{
-							top:26px;
-						}
-					}
-				}
-			}
-			.tabulator-tableHolder{
-				.tabulator-table{
-					.tabulator-row{
-						.tabulator-cell{
-							padding: $veryPaddedVerticalPadding $veryPaddedHorizontalPadding;
-						}
-					}
-				}
-			}
-		}
-	}
-
-	&.compact{
-		.tabulator-header{
-			.tabulator-col{
-				.tabulator-col-content{
-					padding: $compactVerticalPadding $compactHorizontalPadding;
-
-					.tabulator-arrow{
-						top:12px;
-					}
-				}
-			}
-		}
-		.tabulator-tableHolder{
-			.tabulator-table{
-				.tabulator-row{
-					.tabulator-cell{
-						padding: $compactVerticalPadding $compactHorizontalPadding;
-					}
-				}
-			}
-		}
-
-		&.very{
-			.tabulator-header{
-				.tabulator-col{
-					.tabulator-col-content{
-						padding: $veryCompactVerticalPadding $veryCompactHorizontalPadding;
-
-						.tabulator-arrow{
-							top:10px;
-						}
-					}
-				}
-			}
-			.tabulator-tableHolder{
-				.tabulator-table{
-					.tabulator-row{
-						.tabulator-cell{
-							padding: $veryCompactVerticalPadding $veryCompactHorizontalPadding;
-						}
-					}
-				}
-			}
-		}
-	}
-}
-
-
-//row element
-.tabulator-row{
-	position: relative;
-	box-sizing: border-box;
-
-	min-height: $textSize + ($headerMargin * 2);
-	border-bottom: $rowBorder;
-
-	&.tabulator-selectable:hover{
-		box-shadow: $activeBoxShadow;
-		background: $activeBackgroundColor !important;
-		color: $activeColor !important;
-		cursor: pointer;
-	}
-
-	&.tabulator-selected{
-		background-color:$rowSelectedBackground;
-	}
-
-	&.tabulator-selected:hover{
-		background-color:$rowSelectedBackgroundHover;
-		cursor: pointer;
-	}
-
-	&.tabulator-moving{
-		position: absolute;
-
-		border-top:1px solid  $rowBorderColor;
-		border-bottom:1px solid  $rowBorderColor;
-
-		pointer-events: none !important;
-		z-index:15;
-	}
-
-	//row resize handles
-	.tabulator-row-resize-handle{
-		position:absolute;
-		right:0;
-		bottom:0;
-		left:0;
-		height:5px;
-
-		&.prev{
-			top:0;
-			bottom:auto;
-		}
-
-		&:hover{
-			cursor:ns-resize;
-		}
-	}
-
-	.tabulator-frozen{
-		display: inline-block;
-		position: absolute;
-
-		background-color: inherit;
-
-		z-index: 10;
-
-		&.tabulator-frozen-left{
-			border-right:2px solid $rowBorderColor;
-		}
-
-		&.tabulator-frozen-right{
-			border-left:2px solid $rowBorderColor;
-		}
-	}
-
-	.tabulator-responsive-collapse{
-		box-sizing:border-box;
-
-		padding:5px;
-
-		border-top:1px solid $rowBorderColor;
-		border-bottom:1px solid $rowBorderColor;
-
-		&:empty{
-			display:none;
-		}
-
-		table{
-			font-size:$textSize;
-
-			tr{
-				td{
-					position: relative;
-
-					&:first-of-type{
-						padding-right:10px;
-					}
-				}
-			}
-		}
-	}
-
-
-	//cell element
-	.tabulator-cell{
-		display:inline-block;
-		position: relative;
-		box-sizing:border-box;
-		padding: $cellVerticalPadding $cellHorizontalPadding;
-		// border-right:1px solid $rowBorderColor;
-		vertical-align:middle;
-		white-space:nowrap;
-		overflow:hidden;
-		text-overflow:ellipsis;
-
-		&:last-of-type{
-			border-right: none;
-		}
-
-		&.tabulator-editing{
-			border:1px solid  $editBoxColor;
-			padding: 0;
-
-			input, select{
-				border:1px;
-				background:transparent;
-			}
-		}
-
-		&.tabulator-validation-fail{
-			border:1px solid $errorColor;
-			input, select{
-				border:1px;
-				background:transparent;
-
-				color: $errorColor;
-			}
-		}
-
-		//hide left resize handle on first column
-		&:first-child{
-			.tabulator-col-resize-handle.prev{
-				display: none;
-			}
-		}
-
-		//movable row handle
-		&.tabulator-row-handle{
-
-			display: inline-flex;
-			align-items:center;
-
-			-moz-user-select: none;
-			-khtml-user-select: none;
-			-webkit-user-select: none;
-			-o-user-select: none;
-
-			//handle holder
-			.tabulator-row-handle-box{
-				width:80%;
-
-				//Hamburger element
-				.tabulator-row-handle-bar{
-					width:100%;
-					height:3px;
-					margin-top:2px;
-					background:#666;
-				}
-			}
-		}
-
-		.tabulator-data-tree-branch{
-			display:inline-block;
-			vertical-align:middle;
-
-			height:9px;
-			width:7px;
-
-			margin-top:-9px;
-			margin-right:5px;
-
-			border-bottom-left-radius:1px;
-
-			border-left:2px solid $rowBorderColor;
-			border-bottom:2px solid $rowBorderColor;
-		}
-
-		.tabulator-data-tree-control{
-
-			display:inline-flex;
-			justify-content:center;
-			align-items:center;
-			vertical-align:middle;
-
-			height:11px;
-			width:11px;
-
-			margin-right:5px;
-
-			border:1px solid $rowTextColor;
-			border-radius:2px;
-			background:rgba(0, 0, 0, .1);
-
-			overflow:hidden;
-
-			&:hover{
-				cursor:pointer;
-				background:rgba(0, 0, 0, .2);
-			}
-
-			.tabulator-data-tree-control-collapse{
-				display:inline-block;
-				position: relative;
-
-				height: 7px;
-				width: 1px;
-
-				background: transparent;
-
-				&:after {
-					position: absolute;
-					content: "";
-					left: -3px;
-					top: 3px;
-
-					height: 1px;
-					width: 7px;
-
-					background: $rowTextColor;
-				}
-			}
-
-			.tabulator-data-tree-control-expand{
-				display:inline-block;
-				position: relative;
-
-				height: 7px;
-				width: 1px;
-
-				background: $rowTextColor;
-
-				&:after {
-					position: absolute;
-					content: "";
-					left: -3px;
-					top: 3px;
-
-					height: 1px;
-					width: 7px;
-
-					background: $rowTextColor;
-				}
-			}
-
-		}
-
-		.tabulator-responsive-collapse-toggle{
-			display: inline-flex;
-			align-items:center;
-			justify-content:center;
-
-			-moz-user-select: none;
-			-khtml-user-select: none;
-			-webkit-user-select: none;
-			-o-user-select: none;
-
-			height:15px;
-			width:15px;
-
-			border-radius:20px;
-			background:#666;
-
-			color:#fff;
-			font-weight:bold;
-			font-size:1.1em;
-
-			&:hover{
-				opacity:.7;
-			}
-
-			&.open{
-				.tabulator-responsive-collapse-toggle-close{
-					display:initial;
-				}
-
-				.tabulator-responsive-collapse-toggle-open{
-					display:none;
-				}
-			}
-
-			.tabulator-responsive-collapse-toggle-close{
-				display:none;
-			}
-		}
-	}
-
-	//row grouping element
-	&.tabulator-group{
-
-		box-sizing:border-box;
-		border-bottom:1px solid #999;
-		border-right:1px solid $rowBorderColor;
-		border-top:1px solid #999;
-		padding:5px;
-		padding-left:10px;
-		background:#fafafa;
-		font-weight:bold;
-
-		min-width: 100%;
-
-		&:hover{
-			cursor:pointer;
-			background-color:rgba(0,0,0,.1);
-		}
-
-		&.tabulator-group-visible{
-			.tabulator-arrow{
-				margin-right:10px;
-				border-left: 6px solid transparent;
-				border-right: 6px solid transparent;
-				border-top: 6px solid $sortArrowActive;
-				border-bottom: 0;
-			}
-		}
-
-		&.tabulator-group-level-1{
-			.tabulator-arrow{
-				margin-left:20px;
-			}
-		}
-
-		&.tabulator-group-level-2{
-			.tabulator-arrow{
-				margin-left:40px;
-			}
-		}
-
-		&.tabulator-group-level-3{
-			.tabulator-arrow{
-				margin-left:60px;
-			}
-		}
-
-		&.tabulator-group-level-4{
-			.tabulator-arrow{
-				margin-left:80px;
-			}
-		}
-
-		&.tabulator-group-level-5{
-			.tabulator-arrow{
-				margin-left:100px;
-			}
-		}
-
-		//sorting arrow
-		.tabulator-arrow{
-			display: inline-block;
-			width: 0;
-			height: 0;
-			margin-right:16px;
-			border-top: 6px solid transparent;
-			border-bottom: 6px solid transparent;
-			border-right: 0;
-			border-left: 6px solid $sortArrowActive;
-			vertical-align:middle;
-		}
-
-		span{
-			margin-left:10px;
-			color:#666;
-		}
-	}
-}
-
-.tabulator-edit-select-list{
-	position: absolute;
-	display:inline-block;
-	box-sizing:border-box;
-
-	max-height:200px;
-
-	background:$backgroundColor;
-	border:1px solid $rowBorderColor;
-
-	font-size:$textSize;
-
-	overflow-y:auto;
-	-webkit-overflow-scrolling: touch;
-
-	z-index: 10000;
-
-	.tabulator-edit-select-list-item{
-		padding:4px;
-
-		color:$rowTextColor;
-
-		&.active{
-			color:$backgroundColor;
-			background:$editBoxColor;
-		}
-
-		&:hover{
-			cursor:pointer;
-
-			color:$backgroundColor;
-			background:$editBoxColor;
-		}
-	}
-
-	.tabulator-edit-select-list-group{
-		border-bottom:1px solid $rowBorderColor;
-
-		padding:4px;
-		padding-top:6px;
-
-		color:$rowTextColor;
-		font-weight:bold;
-	}
-}
\ No newline at end of file
diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/semantic-ui/variables.scss b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/semantic-ui/variables.scss
deleted file mode 100644
index a003bf0676..0000000000
--- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/semantic-ui/variables.scss
+++ /dev/null
@@ -1,829 +0,0 @@
-
-
-/*******************************
-         Site Settings
-*******************************/
-
-/*-------------------
-       Fonts
---------------------*/
-
-$fontName          : 'Lato' !default;
-$fontSmoothing     : antialiased !default;
-
-$headerFont        : $fontName, 'Helvetica Neue', Arial, Helvetica, sans-serif !default;
-$pageFont          : $fontName, 'Helvetica Neue', Arial, Helvetica, sans-serif !default;
-
-$googleFontName    : $fontName !default;
-$importGoogleFonts : true !default;
-$googleFontSizes   : '400,700,400italic,700italic' !default;
-$googleSubset      : 'latin' !default;
-
-$googleProtocol    : 'https://' !default;
-$googleFontRequest : '${googleFontName}:${googleFontSizes}&subset=${googleSubset}' !default;
-
-/*-------------------
-      Base Sizes
---------------------*/
-
-/* This is the single variable that controls them all */
-$emSize   : 14px !default;
-
-/* The size of page text  */
-$fontSize : 14px !default;
-
-/*-------------------
-  Exact Pixel Values
---------------------*/
-/*
-  These are used to specify exact pixel values in em
-  for things like borders that remain constantly
-  sized as emSize adjusts
-
-  Since there are many more sizes than names for sizes,
-  these are named by their original pixel values.
-
-*/
-
-
-$a1px  : (1 / $emSize) + rem !default;
-$a4px  : (4 / $emSize) + rem !default;
-$a11px  : (11 / $emSize) + rem !default;
-$a14px  : (14 / $emSize) + rem !default;
-
-$relative1px  : (1 / $emSize) + em !default;
-$relative4px  : (4 / $emSize) + em !default;
-$relative11px  : (11 / $emSize) + em !default;
-$relative14px  : (14 / $emSize) + em !default;
-
-
-
-/*-------------------
-    Border Radius
---------------------*/
-
-/* See Power-user section below
-   for explanation of $px variables
-*/
-$relativeBorderRadius: $relative4px !default;
-$absoluteBorderRadius: $a4px !default;
-
-$defaultBorderRadius: $absoluteBorderRadius !default;
-
-
-
-/*-------------------
-      Site Colors
---------------------*/
-
-/*---  Colors  ---*/
-$red              : #DB2828 !default;
-$orange           : #F2711C !default;
-$yellow           : #FBBD08 !default;
-$olive            : #B5CC18 !default;
-$green            : #21BA45 !default;
-$teal             : #00B5AD !default;
-$blue             : #2185D0 !default;
-$violet           : #6435C9 !default;
-$purple           : #A333C8 !default;
-$pink             : #E03997 !default;
-$brown            : #A5673F !default;
-$grey             : #767676 !default;
-$black            : #1B1C1D !default;
-
-/*---  Light Colors  ---*/
-$lightRed         : #FF695E !default;
-$lightOrange      : #FF851B !default;
-$lightYellow      : #FFE21F !default;
-$lightOlive       : #D9E778 !default;
-$lightGreen       : #2ECC40 !default;
-$lightTeal        : #6DFFFF !default;
-$lightBlue        : #54C8FF !default;
-$lightViolet      : #A291FB !default;
-$lightPurple      : #DC73FF !default;
-$lightPink        : #FF8EDF !default;
-$lightBrown       : #D67C1C !default;
-$lightGrey        : #DCDDDE !default;
-$lightBlack       : #545454 !default;
-
-/*---   Neutrals  ---*/
-$fullBlack        : #000000 !default;
-$offWhite         : #F9FAFB !default;
-$darkWhite        : #F3F4F5 !default;
-$midWhite         : #DCDDDE !default;
-$white            : #FFFFFF !default;
-
-/*--- Colored Backgrounds ---*/
-$redBackground    : #FFE8E6 !default;
-$orangeBackground : #FFEDDE !default;
-$yellowBackground : #FFF8DB !default;
-$oliveBackground  : #FBFDEF !default;
-$greenBackground  : #E5F9E7 !default;
-$tealBackground   : #E1F7F7 !default;
-$blueBackground   : #DFF0FF !default;
-$violetBackground : #EAE7FF !default;
-$purpleBackground : #F6E7FF !default;
-$pinkBackground   : #FFE3FB !default;
-$brownBackground  : #F1E2D3 !default;
-
-/*--- Colored Text ---*/
-$redTextColor    : $red !default;
-$orangeTextColor : $orange !default;
-$yellowTextColor : #B58105 !default; // Yellow text is difficult to read
-$oliveTextColor  : #8ABC1E !default; // Olive is difficult to read
-$greenTextColor  : #1EBC30 !default; // Green is difficult to read
-$tealTextColor   : #10A3A3 !default; // Teal text is difficult to read
-$blueTextColor   : $blue !default;
-$violetTextColor : $violet !default;
-$purpleTextColor : $purple !default;
-$pinkTextColor   : $pink !default;
-$brownTextColor  : $brown !default;
-
-/*--- Colored Headers ---*/
-$redHeaderColor    : darken($redTextColor, 5) !default;
-$oliveHeaderColor  : darken($oliveTextColor, 5) !default;
-$greenHeaderColor  : darken($greenTextColor, 5) !default;
-$yellowHeaderColor : darken($yellowTextColor, 5) !default;
-$blueHeaderColor   : darken($blueTextColor, 5) !default;
-$tealHeaderColor   : darken($tealTextColor, 5) !default;
-$pinkHeaderColor   : darken($pinkTextColor, 5) !default;
-$violetHeaderColor : darken($violetTextColor, 5) !default;
-$purpleHeaderColor : darken($purpleTextColor, 5) !default;
-$orangeHeaderColor : darken($orangeTextColor, 5) !default;
-$brownHeaderColor  : darken($brownTextColor, 5) !default;
-
-/*--- Colored Border ---*/
-$redBorderColor    : $redTextColor !default;
-$orangeBorderColor : $orangeTextColor !default;
-$yellowBorderColor : $yellowTextColor !default;
-$oliveBorderColor  : $oliveTextColor !default;
-$greenBorderColor  : $greenTextColor !default;
-$tealBorderColor   : $tealTextColor !default;
-$blueBorderColor   : $blueTextColor !default;
-$violetBorderColor : $violetTextColor !default;
-$purpleBorderColor : $purpleTextColor !default;
-$pinkBorderColor   : $pinkTextColor !default;
-$brownBorderColor  : $brownTextColor !default;
-
-/*-------------------
-     Alpha Colors
---------------------*/
-
-$subtleTransparentBlack     : rgba(0, 0, 0, 0.03) !default;
-$transparentBlack           : rgba(0, 0, 0, 0.05) !default;
-$strongTransparentBlack     : rgba(0, 0, 0, 0.10) !default;
-$veryStrongTransparentBlack : rgba(0, 0, 0, 0.15) !default;
-
-$subtleTransparentWhite     : rgba(255, 255, 255, 0.02) !default;
-$transparentWhite           : rgba(255, 255, 255, 0.08) !default;
-$strongTransparentWhite     : rgba(255, 255, 255, 0.15) !default;
-
-
-
-/*-------------------
-    Brand Colors
---------------------*/
-
-$primaryColor        : $blue !default;
-$secondaryColor      : $black !default;
-
-$lightPrimaryColor   : $lightBlue !default;
-$lightSecondaryColor : $lightBlack !default;
-
-/*--------------
-  Page Heading
----------------*/
-
-$headerFontWeight : bold !default;
-$headerLineHeight : (18 / 14) * 1em !default;
-
-$h1 : (28 / 14) * 1rem !default;
-$h2 : (24 / 14) * 1rem !default;
-$h3 : (18 / 14) * 1rem !default;
-$h4 : (15 / 14) * 1rem !default;
-$h5 : (14 / 14) * 1rem !default;
-
-
-/*-------------------
-        Page
---------------------*/
-
-$pageBackground      : #FFFFFF !default;
-$pageOverflowX       : hidden !default;
-
-$lineHeight          : 1.4285em !default;
-$textColor           : rgba(0, 0, 0, 0.87) !default;
-
-
-/*--------------
-   Form Input
----------------*/
-
-/* This adjusts the default form input across all elements */
-$inputBackground        : $white !default;
-$inputVerticalPadding   : $relative11px !default;
-$inputHorizontalPadding : $relative14px !default;
-$inputPadding           : $inputVerticalPadding $inputHorizontalPadding !default;
-
-/* Input Text Color */
-$inputColor: $textColor !default;
-$inputPlaceholderColor: lighten($inputColor, 75) !default;
-$inputPlaceholderFocusColor: lighten($inputColor, 45) !default;
-
-/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */
-$inputLineHeight: (17 / 14) * 1em !default;
-
-/*-------------------
-    Focused Input
---------------------*/
-
-/* Used on inputs, textarea etc */
-$focusedFormBorderColor: #85B7D9 !default;
-
-/* Used on dropdowns, other larger blocks */
-$focusedFormMutedBorderColor: #96C8DA !default;
-
-/*-------------------
-        Sizes
---------------------*/
-
-/*
-  Sizes are all expressed in terms of 14px/em (default em)
-  This ensures these "ratios" remain constant despite changes in EM
-*/
-
-$miniSize        : (11 / 14) !default;
-$tinySize        : (12 / 14) !default;
-$smallSize       : (13 / 14) !default;
-$mediumSize      : (14 / 14) !default;
-$largeSize       : (16 / 14) !default;
-$bigSize         : (18 / 14) !default;
-$hugeSize        : (20 / 14) !default;
-$massiveSize     : (24 / 14) !default;
-
-
-/*-------------------
-      Paragraph
---------------------*/
-
-$paragraphMargin     : 0em 0em 1em !default;
-$paragraphLineHeight : $lineHeight !default;
-
-/*-------------------
-       Links
---------------------*/
-
-$linkColor           : #4183C4 !default;
-$linkUnderline       : none !default;
-$linkHoverColor      : darken(saturate($linkColor, 20), 15) !default;
-$linkHoverUnderline  : $linkUnderline !default;
-
-/*-------------------
-  Highlighted Text
---------------------*/
-
-$highlightBackground      : #CCE2FF !default;
-$highlightColor           : $textColor !default;
-
-$inputHighlightBackground : rgba(100, 100, 100, 0.4) !default;
-$inputHighlightColor      : $textColor !default;
-
-/*-------------------
-       Em Sizes
---------------------*/
-
-/*
-  This rounds $size values to the closest pixel then expresses that value in (r)em.
-  This ensures all size values round to exact pixels
-*/
-$mini            : (round($miniSize * $emSize) / $emSize) * 1rem !default;
-$tiny            : (round($tinySize * $emSize) / $emSize) * 1rem !default;
-$small           : (round($smallSize * $emSize) / $emSize) * 1rem !default;
-$medium          : (round($mediumSize * $emSize) / $emSize) * 1rem !default;
-$large           : (round($largeSize * $emSize) / $emSize) * 1rem !default;
-$big             : (round($bigSize * $emSize) / $emSize) * 1rem !default;
-$huge            : (round($hugeSize * $emSize) / $emSize) * 1rem !default;
-$massive         : (round($massiveSize * $emSize) / $emSize) * 1rem !default;
-
-/* em */
-$relativeMini    : (round($miniSize * $emSize) / $emSize) * 1em !default;
-$relativeTiny    : (round($tinySize * $emSize) / $emSize) * 1em !default;
-$relativeSmall   : (round($smallSize * $emSize) / $emSize) * 1em !default;
-$relativeMedium  : (round($mediumSize * $emSize) / $emSize) * 1em !default;
-$relativeLarge   : (round($largeSize * $emSize) / $emSize) * 1em !default;
-$relativeBig     : (round($bigSize * $emSize) / $emSize) * 1em !default;
-$relativeHuge    : (round($hugeSize * $emSize) / $emSize) * 1em !default;
-$relativeMassive : (round($massiveSize * $emSize) / $emSize) * 1em !default;
-
-/* rem */
-$absoluteMini    : (round($miniSize * $emSize) / $emSize) * 1rem !default;
-$absoluteTiny    : (round($tinySize * $emSize) / $emSize) * 1rem !default;
-$absoluteSmall   : (round($smallSize * $emSize) / $emSize) * 1rem !default;
-$absoluteMedium  : (round($mediumSize * $emSize) / $emSize) * 1rem !default;
-$absoluteLarge   : (round($largeSize * $emSize) / $emSize) * 1rem !default;
-$absoluteBig     : (round($bigSize * $emSize) / $emSize) * 1rem !default;
-$absoluteHuge    : (round($hugeSize * $emSize) / $emSize) * 1rem !default;
-$absoluteMassive : (round($massiveSize * $emSize) / $emSize) * 1rem !default;
-
-
-/*-------------------
-       Loader
---------------------*/
-
-$loaderSize              : $relativeBig !default;
-$loaderSpeed             : 0.6s !default;
-$loaderLineWidth         : 0.2em !default;
-$loaderFillColor         : rgba(0, 0, 0, 0.1) !default;
-$loaderLineColor         : $grey !default;
-
-$invertedLoaderFillColor : rgba(255, 255, 255, 0.15) !default;
-$invertedLoaderLineColor : $white !default;
-
-/*-------------------
-        Grid
---------------------*/
-
-$columnCount: 16 !default;
-
-/*-------------------
-     Transitions
---------------------*/
-
-$defaultDuration : 0.1s !default;
-$defaultEasing   : ease !default;
-
-/*-------------------
-     Breakpoints
---------------------*/
-
-$mobileBreakpoint            : 320px !default;
-$tabletBreakpoint            : 768px !default;
-$computerBreakpoint          : 992px !default;
-$largeMonitorBreakpoint      : 1200px !default;
-$widescreenMonitorBreakpoint : 1920px !default;
-
-
-
-/* Columns */
-$oneWide        : (1 / $columnCount * 100%) !default;
-$twoWide        : (2 / $columnCount * 100%) !default;
-$threeWide      : (3 / $columnCount * 100%) !default;
-$fourWide       : (4 / $columnCount * 100%) !default;
-$fiveWide       : (5 / $columnCount * 100%) !default;
-$sixWide        : (6 / $columnCount * 100%) !default;
-$sevenWide      : (7 / $columnCount * 100%) !default;
-$eightWide      : (8 / $columnCount * 100%) !default;
-$nineWide       : (9 / $columnCount * 100%) !default;
-$tenWide        : (10 / $columnCount * 100%) !default;
-$elevenWide     : (11 / $columnCount * 100%) !default;
-$twelveWide     : (12 / $columnCount * 100%) !default;
-$thirteenWide   : (13 / $columnCount * 100%) !default;
-$fourteenWide   : (14 / $columnCount * 100%) !default;
-$fifteenWide    : (15 / $columnCount * 100%) !default;
-$sixteenWide    : (16 / $columnCount * 100%) !default;
-
-$oneColumn      : (1 / 1 * 100%) !default;
-$twoColumn      : (1 / 2 * 100%) !default;
-$threeColumn    : (1 / 3 * 100%) !default;
-$fourColumn     : (1 / 4 * 100%) !default;
-$fiveColumn     : (1 / 5 * 100%) !default;
-$sixColumn      : (1 / 6 * 100%) !default;
-$sevenColumn    : (1 / 7 * 100%) !default;
-$eightColumn    : (1 / 8 * 100%) !default;
-$nineColumn     : (1 / 9 * 100%) !default;
-$tenColumn      : (1 / 10 * 100%) !default;
-$elevenColumn   : (1 / 11 * 100%) !default;
-$twelveColumn   : (1 / 12 * 100%) !default;
-$thirteenColumn : (1 / 13 * 100%) !default;
-$fourteenColumn : (1 / 14 * 100%) !default;
-$fifteenColumn  : (1 / 15 * 100%) !default;
-$sixteenColumn  : (1 / 16 * 100%) !default;
-
-
-/*******************************
-           Power-User
-*******************************/
-
-
-/*-------------------
-    Emotive Colors
---------------------*/
-
-/* Positive */
-$positiveColor           : $green !default;
-$positiveBackgroundColor : #FCFFF5 !default;
-$positiveBorderColor     : #A3C293 !default;
-$positiveHeaderColor     : #1A531B !default;
-$positiveTextColor       : #2C662D !default;
-
-/* Negative */
-$negativeColor           : $red !default;
-$negativeBackgroundColor : #FFF6F6 !default;
-$negativeBorderColor     : #E0B4B4 !default;
-$negativeHeaderColor     : #912D2B !default;
-$negativeTextColor       : #9F3A38 !default;
-
-/* Info */
-$infoColor              : #31CCEC !default;
-$infoBackgroundColor    : #F8FFFF !default;
-$infoBorderColor        : #A9D5DE !default;
-$infoHeaderColor        : #0E566C !default;
-$infoTextColor          : #276F86 !default;
-
-/* Warning */
-$warningColor           : #F2C037 !default;
-$warningBorderColor     : #C9BA9B !default;
-$warningBackgroundColor : #FFFAF3 !default;
-$warningHeaderColor     : #794B02 !default;
-$warningTextColor       : #573A08 !default;
-
-/*-------------------
-        Paths
---------------------*/
-
-/* For source only. Modified in gulp for dist */
-$imagePath : '../../themes/default/assets/images' !default;
-$fontPath  : '../../themes/default/assets/fonts' !default;
-
-
-/*-------------------
-       Icons
---------------------*/
-
-/* Maximum Glyph Width of Icon */
-$iconWidth : 1.18em !default;
-
-/*-------------------
-     Neutral Text
---------------------*/
-
-$darkTextColor               : rgba(0, 0, 0, 0.85) !default;
-$mutedTextColor              : rgba(0, 0, 0, 0.6) !default;
-$lightTextColor              : rgba(0, 0, 0, 0.4) !default;
-
-$unselectedTextColor         : rgba(0, 0, 0, 0.4) !default;
-$hoveredTextColor            : rgba(0, 0, 0, 0.8) !default;
-$pressedTextColor            : rgba(0, 0, 0, 0.9) !default;
-$selectedTextColor           : rgba(0, 0, 0, 0.95) !default;
-$disabledTextColor           : rgba(0, 0, 0, 0.2) !default;
-
-$invertedTextColor           : rgba(255, 255, 255, 0.9) !default;
-$invertedMutedTextColor      : rgba(255, 255, 255, 0.8) !default;
-$invertedLightTextColor      : rgba(255, 255, 255, 0.7) !default;
-$invertedUnselectedTextColor : rgba(255, 255, 255, 0.5) !default;
-$invertedHoveredTextColor    : rgba(255, 255, 255, 1) !default;
-$invertedPressedTextColor    : rgba(255, 255, 255, 1) !default;
-$invertedSelectedTextColor   : rgba(255, 255, 255, 1) !default;
-$invertedDisabledTextColor   : rgba(255, 255, 255, 0.2) !default;
-
-/*-------------------
-     Brand Colors
---------------------*/
-
-$facebookColor   : #3B5998 !default;
-$twitterColor    : #55ACEE !default;
-$googlePlusColor : #DD4B39 !default;
-$linkedInColor   : #1F88BE !default;
-$youtubeColor    : #CC181E !default;
-$pinterestColor  : #BD081C !default;
-$vkColor         : #4D7198 !default;
-$instagramColor  : #49769C !default;
-
-/*-------------------
-      Borders
---------------------*/
-
-$circularRadius                : 500rem !default;
-
-$borderColor               : rgba(34, 36, 38, 0.15) !default;
-$strongBorderColor         : rgba(34, 36, 38, 0.22) !default;
-$internalBorderColor       : rgba(34, 36, 38, 0.1) !default;
-$selectedBorderColor       : rgba(34, 36, 38, 0.35) !default;
-$strongSelectedBorderColor : rgba(34, 36, 38, 0.5) !default;
-$disabledBorderColor       : rgba(34, 36, 38, 0.5) !default;
-
-$solidInternalBorderColor  : #FAFAFA !default;
-$solidBorderColor          : #D4D4D5 !default;
-$solidSelectedBorderColor  : #BCBDBD !default;
-
-$whiteBorderColor              : rgba(255, 255, 255, 0.1) !default;
-$selectedWhiteBorderColor      : rgba(255, 255, 255, 0.8) !default;
-
-$solidWhiteBorderColor         : #555555 !default;
-$selectedSolidWhiteBorderColor : #999999 !default;
-
-/*-------------------
-       Accents
---------------------*/
-
-/* Differentiating Neutrals */
-$subtleGradient: linear-gradient(transparent, $transparentBlack) !default;
-
-/* Differentiating Layers */
-$subtleShadow:
-  0px 1px 2px 0 $borderColor
- !default;
-$floatingShadow:
-  0px 2px 4px 0px rgba(34, 36, 38, 0.12),
-  0px 2px 10px 0px rgba(34, 36, 38, 0.15)
- !default;
-
-
-/*-------------------
-    Derived Values
---------------------*/
-
-/* Loaders Position Offset */
-$loaderOffset : -($loaderSize / 2) !default;
-$loaderMargin : $loaderOffset 0em 0em $loaderOffset !default;
-
-/* Rendered Scrollbar Width */
-$scrollbarWidth: 17px !default;
-
-/* Maximum Single Character Glyph Width, aka Capital "W" */
-$glyphWidth: 1.1em !default;
-
-/* Used to match floats with text */
-$lineHeightOffset       : (($lineHeight - 1em) / 2) !default;
-$headerLineHeightOffset : ($headerLineHeight - 1em) / 2 !default;
-
-/* Header Spacing */
-$headerTopMargin    : calc(2rem - #{$headerLineHeightOffset}) !default;
-$headerBottomMargin : 1rem !default;
-
-/* Minimum Mobile Width */
-$pageMinWidth       : 320px !default;
-
-/* Positive / Negative Dupes */
-$successBackgroundColor : $positiveBackgroundColor !default;
-$successColor           : $positiveColor !default;
-$successBorderColor     : $positiveBorderColor !default;
-$successHeaderColor     : $positiveHeaderColor !default;
-$successTextColor       : $positiveTextColor !default;
-
-$errorBackgroundColor   : $negativeBackgroundColor !default;
-$errorColor             : $negativeColor !default;
-$errorBorderColor       : $negativeBorderColor !default;
-$errorHeaderColor       : $negativeHeaderColor !default;
-$errorTextColor         : $negativeTextColor !default;
-
-
-/* Responsive */
-$largestMobileScreen : ($tabletBreakpoint - 1px) !default;
-$largestTabletScreen : ($computerBreakpoint - 1px) !default;
-$largestSmallMonitor : ($largeMonitorBreakpoint - 1px) !default;
-$largestLargeMonitor : ($widescreenMonitorBreakpoint - 1px) !default;
-
-
-
-/*******************************
-             States
-*******************************/
-
-/*-------------------
-      Disabled
---------------------*/
-
-$disabledOpacity: 0.45 !default;
-$disabledTextColor: rgba(40, 40, 40, 0.3) !default;
-$invertedDisabledTextColor: rgba(225, 225, 225, 0.3) !default;
-
-/*-------------------
-        Hover
---------------------*/
-
-/*---  Shadows  ---*/
-$floatingShadowHover:
-  0px 2px 4px 0px rgba(34, 36, 38, 0.15),
-  0px 2px 10px 0px rgba(34, 36, 38, 0.25)
- !default;
-
-/*---  Colors  ---*/
-$primaryColorHover    : saturate(darken($primaryColor, 5), 10) !default;
-$secondaryColorHover  : saturate(lighten($secondaryColor, 5), 10) !default;
-
-$redHover             : saturate(darken($red, 5), 10) !default;
-$orangeHover          : saturate(darken($orange, 5), 10) !default;
-$yellowHover          : saturate(darken($yellow, 5), 10) !default;
-$oliveHover           : saturate(darken($olive, 5), 10) !default;
-$greenHover           : saturate(darken($green, 5), 10) !default;
-$tealHover            : saturate(darken($teal, 5), 10) !default;
-$blueHover            : saturate(darken($blue, 5), 10) !default;
-$violetHover          : saturate(darken($violet, 5), 10) !default;
-$purpleHover          : saturate(darken($purple, 5), 10) !default;
-$pinkHover            : saturate(darken($pink, 5), 10) !default;
-$brownHover           : saturate(darken($brown, 5), 10) !default;
-
-$lightRedHover        : saturate(darken($lightRed, 5), 10) !default;
-$lightOrangeHover     : saturate(darken($lightOrange, 5), 10) !default;
-$lightYellowHover     : saturate(darken($lightYellow, 5), 10) !default;
-$lightOliveHover      : saturate(darken($lightOlive, 5), 10) !default;
-$lightGreenHover      : saturate(darken($lightGreen, 5), 10) !default;
-$lightTealHover       : saturate(darken($lightTeal, 5), 10) !default;
-$lightBlueHover       : saturate(darken($lightBlue, 5), 10) !default;
-$lightVioletHover     : saturate(darken($lightViolet, 5), 10) !default;
-$lightPurpleHover     : saturate(darken($lightPurple, 5), 10) !default;
-$lightPinkHover       : saturate(darken($lightPink, 5), 10) !default;
-$lightBrownHover      : saturate(darken($lightBrown, 5), 10) !default;
-$lightGreyHover       : saturate(darken($lightGrey, 5), 10) !default;
-$lightBlackHover      : saturate(darken($fullBlack, 5), 10) !default;
-
-/*---  Emotive  ---*/
-$positiveColorHover   : saturate(darken($positiveColor, 5), 10) !default;
-$negativeColorHover   : saturate(darken($negativeColor, 5), 10) !default;
-
-/*---  Brand   ---*/
-$facebookHoverColor   : saturate(darken($facebookColor, 5), 10) !default;
-$twitterHoverColor    : saturate(darken($twitterColor, 5), 10) !default;
-$googlePlusHoverColor : saturate(darken($googlePlusColor, 5), 10) !default;
-$linkedInHoverColor   : saturate(darken($linkedInColor, 5), 10) !default;
-$youtubeHoverColor    : saturate(darken($youtubeColor, 5), 10) !default;
-$instagramHoverColor  : saturate(darken($instagramColor, 5), 10) !default;
-$pinterestHoverColor  : saturate(darken($pinterestColor, 5), 10) !default;
-$vkHoverColor         : saturate(darken($vkColor, 5), 10) !default;
-
-/*---  Dark Tones  ---*/
-$fullBlackHover       : lighten($fullBlack, 5) !default;
-$blackHover           : lighten($black, 5) !default;
-$greyHover            : lighten($grey, 5) !default;
-
-/*---  Light Tones  ---*/
-$whiteHover           : darken($white, 5) !default;
-$offWhiteHover        : darken($offWhite, 5) !default;
-$darkWhiteHover       : darken($darkWhite, 5) !default;
-
-/*-------------------
-        Focus
---------------------*/
-
-/*---  Colors  ---*/
-$primaryColorFocus    : saturate(darken($primaryColor, 8), 20) !default;
-$secondaryColorFocus  : saturate(lighten($secondaryColor, 8), 20) !default;
-
-$redFocus             : saturate(darken($red, 8), 20) !default;
-$orangeFocus          : saturate(darken($orange, 8), 20) !default;
-$yellowFocus          : saturate(darken($yellow, 8), 20) !default;
-$oliveFocus           : saturate(darken($olive, 8), 20) !default;
-$greenFocus           : saturate(darken($green, 8), 20) !default;
-$tealFocus            : saturate(darken($teal, 8), 20) !default;
-$blueFocus            : saturate(darken($blue, 8), 20) !default;
-$violetFocus          : saturate(darken($violet, 8), 20) !default;
-$purpleFocus          : saturate(darken($purple, 8), 20) !default;
-$pinkFocus            : saturate(darken($pink, 8), 20) !default;
-$brownFocus           : saturate(darken($brown, 8), 20) !default;
-
-$lightRedFocus        : saturate(darken($lightRed, 8), 20) !default;
-$lightOrangeFocus     : saturate(darken($lightOrange, 8), 20) !default;
-$lightYellowFocus     : saturate(darken($lightYellow, 8), 20) !default;
-$lightOliveFocus      : saturate(darken($lightOlive, 8), 20) !default;
-$lightGreenFocus      : saturate(darken($lightGreen, 8), 20) !default;
-$lightTealFocus       : saturate(darken($lightTeal, 8), 20) !default;
-$lightBlueFocus       : saturate(darken($lightBlue, 8), 20) !default;
-$lightVioletFocus     : saturate(darken($lightViolet, 8), 20) !default;
-$lightPurpleFocus     : saturate(darken($lightPurple, 8), 20) !default;
-$lightPinkFocus       : saturate(darken($lightPink, 8), 20) !default;
-$lightBrownFocus      : saturate(darken($lightBrown, 8), 20) !default;
-$lightGreyFocus       : saturate(darken($lightGrey, 8), 20) !default;
-$lightBlackFocus      : saturate(darken($fullBlack, 8), 20) !default;
-
-/*---  Emotive  ---*/
-$positiveColorFocus   : saturate(darken($positiveColor, 8), 20) !default;
-$negativeColorFocus   : saturate(darken($negativeColor, 8), 20) !default;
-
-/*---  Brand   ---*/
-$facebookFocusColor   : saturate(darken($facebookColor, 8), 20) !default;
-$twitterFocusColor    : saturate(darken($twitterColor, 8), 20) !default;
-$googlePlusFocusColor : saturate(darken($googlePlusColor, 8), 20) !default;
-$linkedInFocusColor   : saturate(darken($linkedInColor, 8), 20) !default;
-$youtubeFocusColor    : saturate(darken($youtubeColor, 8), 20) !default;
-$instagramFocusColor  : saturate(darken($instagramColor, 8), 20) !default;
-$pinterestFocusColor  : saturate(darken($pinterestColor, 8), 20) !default;
-$vkFocusColor         : saturate(darken($vkColor, 8), 20) !default;
-
-/*---  Dark Tones  ---*/
-$fullBlackFocus       : lighten($fullBlack, 8) !default;
-$blackFocus           : lighten($black, 8) !default;
-$greyFocus            : lighten($grey, 8) !default;
-
-/*---  Light Tones  ---*/
-$whiteFocus           : darken($white, 8) !default;
-$offWhiteFocus        : darken($offWhite, 8) !default;
-$darkWhiteFocus       : darken($darkWhite, 8) !default;
-
-
-/*-------------------
-    Down (:active)
---------------------*/
-
-/*---  Colors  ---*/
-$primaryColorDown    : darken($primaryColor, 10) !default;
-$secondaryColorDown  : lighten($secondaryColor, 10) !default;
-
-$redDown             : darken($red, 10) !default;
-$orangeDown          : darken($orange, 10) !default;
-$yellowDown          : darken($yellow, 10) !default;
-$oliveDown           : darken($olive, 10) !default;
-$greenDown           : darken($green, 10) !default;
-$tealDown            : darken($teal, 10) !default;
-$blueDown            : darken($blue, 10) !default;
-$violetDown          : darken($violet, 10) !default;
-$purpleDown          : darken($purple, 10) !default;
-$pinkDown            : darken($pink, 10) !default;
-$brownDown           : darken($brown, 10) !default;
-
-$lightRedDown        : darken($lightRed, 10) !default;
-$lightOrangeDown     : darken($lightOrange, 10) !default;
-$lightYellowDown     : darken($lightYellow, 10) !default;
-$lightOliveDown      : darken($lightOlive, 10) !default;
-$lightGreenDown      : darken($lightGreen, 10) !default;
-$lightTealDown       : darken($lightTeal, 10) !default;
-$lightBlueDown       : darken($lightBlue, 10) !default;
-$lightVioletDown     : darken($lightViolet, 10) !default;
-$lightPurpleDown     : darken($lightPurple, 10) !default;
-$lightPinkDown       : darken($lightPink, 10) !default;
-$lightBrownDown      : darken($lightBrown, 10) !default;
-$lightGreyDown       : darken($lightGrey, 10) !default;
-$lightBlackDown      : darken($fullBlack, 10) !default;
-
-/*---  Emotive  ---*/
-$positiveColorDown   : darken($positiveColor, 10) !default;
-$negativeColorDown   : darken($negativeColor, 10) !default;
-
-/*---  Brand   ---*/
-$facebookDownColor   : darken($facebookColor, 10) !default;
-$twitterDownColor    : darken($twitterColor, 10) !default;
-$googlePlusDownColor : darken($googlePlusColor, 10) !default;
-$linkedInDownColor   : darken($linkedInColor, 10) !default;
-$youtubeDownColor    : darken($youtubeColor, 10) !default;
-$instagramDownColor  : darken($instagramColor, 10) !default;
-$pinterestDownColor  : darken($pinterestColor, 10) !default;
-$vkDownColor         : darken($vkColor, 10) !default;
-
-/*---  Dark Tones  ---*/
-$fullBlackDown       : lighten($fullBlack, 10) !default;
-$blackDown           : lighten($black, 10) !default;
-$greyDown            : lighten($grey, 10) !default;
-
-/*---  Light Tones  ---*/
-$whiteDown           : darken($white, 10) !default;
-$offWhiteDown        : darken($offWhite, 10) !default;
-$darkWhiteDown       : darken($darkWhite, 10) !default;
-
-
-/*-------------------
-        Active
---------------------*/
-
-/*---  Colors  ---*/
-$primaryColorActive    : saturate(darken($primaryColor, 5), 15) !default;
-$secondaryColorActive  : saturate(lighten($secondaryColor, 5), 15) !default;
-
-$redActive             : saturate(darken($red, 5), 15) !default;
-$orangeActive          : saturate(darken($orange, 5), 15) !default;
-$yellowActive          : saturate(darken($yellow, 5), 15) !default;
-$oliveActive           : saturate(darken($olive, 5), 15) !default;
-$greenActive           : saturate(darken($green, 5), 15) !default;
-$tealActive            : saturate(darken($teal, 5), 15) !default;
-$blueActive            : saturate(darken($blue, 5), 15) !default;
-$violetActive          : saturate(darken($violet, 5), 15) !default;
-$purpleActive          : saturate(darken($purple, 5), 15) !default;
-$pinkActive            : saturate(darken($pink, 5), 15) !default;
-$brownActive           : saturate(darken($brown, 5), 15) !default;
-
-$lightRedActive        : saturate(darken($lightRed, 5), 15) !default;
-$lightOrangeActive     : saturate(darken($lightOrange, 5), 15) !default;
-$lightYellowActive     : saturate(darken($lightYellow, 5), 15) !default;
-$lightOliveActive      : saturate(darken($lightOlive, 5), 15) !default;
-$lightGreenActive      : saturate(darken($lightGreen, 5), 15) !default;
-$lightTealActive       : saturate(darken($lightTeal, 5), 15) !default;
-$lightBlueActive       : saturate(darken($lightBlue, 5), 15) !default;
-$lightVioletActive     : saturate(darken($lightViolet, 5), 15) !default;
-$lightPurpleActive     : saturate(darken($lightPurple, 5), 15) !default;
-$lightPinkActive       : saturate(darken($lightPink, 5), 15) !default;
-$lightBrownActive      : saturate(darken($lightBrown, 5), 15) !default;
-$lightGreyActive       : saturate(darken($lightGrey, 5), 15) !default;
-$lightBlackActive      : saturate(darken($fullBlack, 5), 15) !default;
-
-/*---  Emotive  ---*/
-$positiveColorActive   : saturate(darken($positiveColor, 5), 15) !default;
-$negativeColorActive   : saturate(darken($negativeColor, 5), 15) !default;
-
-/*---  Brand   ---*/
-$facebookActiveColor   : saturate(darken($facebookColor, 5), 15) !default;
-$twitterActiveColor    : saturate(darken($twitterColor, 5), 15) !default;
-$googlePlusActiveColor : saturate(darken($googlePlusColor, 5), 15) !default;
-$linkedInActiveColor   : saturate(darken($linkedInColor, 5), 15) !default;
-$youtubeActiveColor    : saturate(darken($youtubeColor, 5), 15) !default;
-$instagramActiveColor  : saturate(darken($instagramColor, 5), 15) !default;
-$pinterestActiveColor  : saturate(darken($pinterestColor, 5), 15) !default;
-$vkActiveColor         : saturate(darken($vkColor, 5), 15) !default;
-
-/*---  Dark Tones  ---*/
-$fullBlackActive       : darken($fullBlack, 5) !default;
-$blackActive           : darken($black, 5) !default;
-$greyActive            : darken($grey, 5) !default;
-
-/*---  Light Tones  ---*/
-$whiteActive           : darken($white, 5) !default;
-$offWhiteActive        : darken($offWhite, 5) !default;
-$darkWhiteActive       : darken($darkWhite, 5) !default;
diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/semantic-ui/variables_table.scss b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/semantic-ui/variables_table.scss
deleted file mode 100644
index ab244453a5..0000000000
--- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/semantic-ui/variables_table.scss
+++ /dev/null
@@ -1,247 +0,0 @@
-@import "variables.scss";
-
-/*******************************
-             Table
-*******************************/
-
-/*-------------------
-       Element
---------------------*/
-
-$verticalMargin: 1em !default;
-$horizontalMargin: 0em !default;
-$margin: $verticalMargin $horizontalMargin !default;
-$borderCollapse: separate !default;
-$borderSpacing: 0px !default;
-$borderRadius: $defaultBorderRadius !default;
-$transition:
-  background $defaultDuration $defaultEasing,
-  color $defaultDuration $defaultEasing !default;
-$background: $white !default;
-$color: $textColor !default;
-$borderWidth: 1px !default;
-$border: $borderWidth solid $borderColor !default;
-$boxShadow: none !default;
-$textAlign: left !default;
-
-/*--------------
-     Parts
----------------*/
-
-/* Table Row */
-$rowBorder: 1px solid $internalBorderColor !default;
-
-/* Table Cell */
-$cellVerticalPadding: $relativeMini !default;
-$cellHorizontalPadding: $relativeMini !default;
-$cellVerticalAlign: inherit !default;
-$cellTextAlign: inherit !default;
-$cellBorder: 1px solid $internalBorderColor !default;
-
-/* Table Header */
-$headerBorder: 1px solid $internalBorderColor !default;
-$headerDivider: none !default;
-$headerBackground: $offWhite !default;
-$headerAlign: inherit !default;
-$headerVerticalAlign: inherit !default;
-$headerColor: $textColor !default;
-$headerVerticalPadding: $relativeSmall !default;
-$headerHorizontalPadding: $cellHorizontalPadding !default;
-$headerFontStyle: none !default;
-$headerFontWeight: bold !default;
-$headerTextTransform: none !default;
-$headerBoxShadow: none !default;
-
-/* Table Footer */
-$footerBoxShadow: none !default;
-$footerBorder: 1px solid $borderColor !default;
-$footerDivider: none !default;
-$footerBackground: $offWhite !default;
-$footerAlign: inherit !default;
-$footerVerticalAlign: middle !default;
-$footerColor: $textColor !default;
-$footerVerticalPadding: $cellVerticalPadding !default;
-$footerHorizontalPadding: $cellHorizontalPadding !default;
-$footerFontStyle: normal !default;
-$footerFontWeight: normal !default;
-$footerTextTransform: none !default;
-
-/* Responsive Size */
-$responsiveHeaderDisplay: block !default;
-$responsiveFooterDisplay: block !default;
-$responsiveRowVerticalPadding: 1em !default;
-$responsiveRowBoxShadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important !default;
-$responsiveCellVerticalPadding: 0.25em !default;
-$responsiveCellHorizontalPadding: 0.75em !default;
-$responsiveCellBoxShadow: none !important !default;
-
-/*-------------------
-       Types
---------------------*/
-
-/* Definition */
-$definitionPageBackground: $white !default;
-
-$definitionHeaderBackground: transparent !default;
-$definitionHeaderColor: $unselectedTextColor !default;
-$definitionHeaderFontWeight: normal !default;
-
-$definitionFooterBackground: $definitionHeaderBackground !default;
-$definitionFooterColor: $definitionHeaderColor !default;
-$definitionFooterFontWeight: $definitionHeaderFontWeight !default;
-
-$definitionColumnBackground: $subtleTransparentBlack !default;
-$definitionColumnFontWeight: bold !default;
-$definitionColumnColor: $selectedTextColor !default;
-$definitionColumnFontSize: $relativeMedium !default;
-$definitionColumnTextTransform: '' !default;
-$definitionColumnBoxShadow: '' !default;
-$definitionColumnTextAlign: '' !default;
-$definitionColumnHorizontalPadding: '' !default;
-
-
-/*--------------
-    Couplings
----------------*/
-
-$iconVerticalAlign: baseline !default;
-
-/*--------------
-     States
----------------*/
-
-$stateMarkerWidth: 0px !default;
-
-/* Positive */
-$positiveColor: $positiveTextColor !default;
-$positiveBoxShadow: $stateMarkerWidth 0px 0px $positiveBorderColor inset !default;
-$positiveBackgroundHover: darken($positiveBackgroundColor, 3) !default;
-$positiveColorHover: darken($positiveColor, 3) !default;
-
-/* Negative */
-$negativeColor: $negativeTextColor !default;
-$negativeBoxShadow: $stateMarkerWidth 0px 0px $negativeBorderColor inset !default;
-$negativeBackgroundHover: darken($negativeBackgroundColor, 3) !default;
-$negativeColorHover: darken($negativeColor, 3) !default;
-
-/* Error */
-$errorColor: $errorTextColor !default;
-$errorBoxShadow: $stateMarkerWidth 0px 0px $errorBorderColor inset !default;
-$errorBackgroundHover: darken($errorBackgroundColor, 3) !default;
-$errorColorHover: darken($errorColor, 3) !default;
-
-/* Warning */
-$warningColor: $warningTextColor !default;
-$warningBoxShadow: $stateMarkerWidth 0px 0px $warningBorderColor inset !default;
-$warningBackgroundHover: darken($warningBackgroundColor, 3) !default;
-$warningColorHover: darken($warningColor, 3) !default;
-
-/* Active */
-$activeColor: $textColor !default;
-$activeBackgroundColor: #E0E0E0 !default;
-$activeBoxShadow: $stateMarkerWidth 0px 0px $activeColor inset !default;
-
-$activeBackgroundHover: #EFEFEF !default;
-$activeColorHover: $selectedTextColor !default;
-
-/*--------------
-     Types
----------------*/
-
-/* Attached */
-$attachedTopOffset: 0px !default;
-$attachedBottomOffset: 0px !default;
-$attachedHorizontalOffset: -$borderWidth !default;
-$attachedWidth: calc(100% + #{$attachedHorizontalOffset * -2}) !default;
-$attachedBoxShadow: none !default;
-$attachedBorder: $borderWidth solid $solidBorderColor !default;
-$attachedBottomBoxShadow:
-  $boxShadow,
-  $attachedBoxShadow
- !default;
-
-/* Striped */
-$stripedBackground: rgba(0, 0, 50, 0.02) !default;
-$invertedStripedBackground: rgba(255, 255, 255, 0.05) !default;
-
-/* Selectable */
-$selectableBackground: $transparentBlack !default;
-$selectableTextColor: $selectedTextColor !default;
-$selectableInvertedBackground: $transparentWhite !default;
-$selectableInvertedTextColor: $invertedSelectedTextColor !default;
-
-/* Sortable */
-$sortableBackground: '' !default;
-$sortableColor: $textColor !default;
-
-$sortableBorder: 1px solid $borderColor !default;
-$sortableIconWidth: auto !default;
-$sortableIconDistance: 0.5em !default;
-$sortableIconOpacity: 0.8 !default;
-$sortableIconFont: 'Icons' !default;
-$sortableIconAscending: '\f0d8' !default;
-$sortableIconDescending: '\f0d7' !default;
-$sortableDisabledColor: $disabledTextColor !default;
-
-$sortableHoverBackground: $transparentBlack !default;
-$sortableHoverColor: $hoveredTextColor !default;
-
-$sortableActiveBackground: $transparentBlack !default;
-$sortableActiveColor: $selectedTextColor !default;
-
-$sortableActiveHoverBackground: $transparentBlack !default;
-$sortableActiveHoverColor: $selectedTextColor !default;
-
-$sortableInvertedBorderColor: transparent !default;
-$sortableInvertedHoverBackground: $transparentWhite $subtleGradient !default;
-$sortableInvertedHoverColor: $invertedHoveredTextColor !default;
-$sortableInvertedActiveBackground: $strongTransparentWhite $subtleGradient !default;
-$sortableInvertedActiveColor: $invertedSelectedTextColor !default;
-
-/* Colors */
-$coloredBorderSize: 0.2em !default;
-$coloredBorderRadius: 0em 0em $borderRadius $borderRadius !default;
-
-/* Inverted */
-$invertedBackground: #333333 !default;
-$invertedBorder: none !default;
-$invertedCellBorderColor: $whiteBorderColor !default;
-$invertedCellColor: $invertedTextColor !default;
-
-$invertedHeaderBackground: $veryStrongTransparentBlack !default;
-$invertedHeaderColor: $invertedTextColor !default;
-$invertedHeaderBorderColor: $invertedCellBorderColor !default;
-
-$invertedDefinitionColumnBackground: $subtleTransparentWhite !default;
-$invertedDefinitionColumnColor: $invertedSelectedTextColor !default;
-$invertedDefinitionColumnFontWeight: bold !default;
-
-/* Basic */
-$basicTableBackground: transparent !default;
-$basicTableBorder: $borderWidth solid $borderColor !default;
-$basicBoxShadow: none !default;
-
-$basicTableHeaderBackground: transparent !default;
-$basicTableCellBackground: transparent !default;
-$basicTableHeaderDivider: none !default;
-$basicTableCellBorder: 1px solid rgba(0, 0, 0, 0.1) !default;
-$basicTableCellPadding: '' !default;
-$basicTableStripedBackground: $transparentBlack !default;
-
-/* Padded */
-$paddedVerticalPadding: 1em !default;
-$paddedHorizontalPadding: 1em !default;
-$veryPaddedVerticalPadding: 1.5em !default;
-$veryPaddedHorizontalPadding: 1.5em !default;
-
-/* Compact */
-$compactVerticalPadding: 0.5em !default;
-$compactHorizontalPadding: 0.7em !default;
-$veryCompactVerticalPadding: 0.4em !default;
-$veryCompactHorizontalPadding: 0.6em !default;
-
-
-/* Sizes */
-$small: 0.9em !default;
-$medium: 1em !default;
-$large: 1.1em !default;
diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator.scss b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator.scss
deleted file mode 100644
index 644d7b50c0..0000000000
--- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator.scss
+++ /dev/null
@@ -1,961 +0,0 @@
-
-//Main Theme Variables
-$backgroundColor: #888 !default; //background color of tabulator
-$borderColor:#999 !default; //border to tabulator
-$textSize:14px !default; //table text size
-
-//header themeing
-$headerBackgroundColor:#e6e6e6 !default; //border to tabulator
-$headerTextColor:#555 !default; //header text colour
-$headerBorderColor:#aaa !default;  //header border color
-$headerSeperatorColor:#999 !default; //header bottom seperator color
-$headerMargin:4px !default; //padding round header
-
-//column header arrows
-$sortArrowActive: #666 !default;
-$sortArrowInactive: #bbb !default;
-
-//row themeing
-$rowBackgroundColor:#fff !default; //table row background color
-$rowAltBackgroundColor:#EFEFEF !default; //table row background color
-$rowBorderColor:#aaa !default; //table border color
-$rowTextColor:#333 !default; //table text color
-$rowHoverBackground:#bbb !default; //row background color on hover
-
-$rowSelectedBackground: #9ABCEA !default; //row background color when selected
-$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered
-
-$editBoxColor:#1D68CD !default; //border color for edit boxes
-$errorColor:#dd0000 !default; //error indication
-
-//footer themeing
-$footerBackgroundColor:#e6e6e6 !default; //border to tabulator
-$footerTextColor:#555 !default; //footer text colour
-$footerBorderColor:#aaa !default; //footer border color
-$footerSeperatorColor:#999 !default; //footer bottom seperator color
-$footerActiveColor:#d00 !default; //footer bottom active text color
-
-
-
-//Tabulator Containing Element
-.tabulator{
-	position: relative;
-
-	border: 1px solid $borderColor;
-
-	background-color: $backgroundColor;
-
-	font-size:$textSize;
-	text-align: left;
-	overflow:hidden;
-
-	-webkit-transform: translatez(0);
-	-moz-transform: translatez(0);
-	-ms-transform: translatez(0);
-	-o-transform: translatez(0);
-	transform: translatez(0);
-
-	&[tabulator-layout="fitDataFill"]{
-		.tabulator-tableHolder{
-			.tabulator-table{
-				min-width:100%;
-			}
-		}
-	}
-
-	&.tabulator-block-select{
-		user-select: none;
-	}
-
-	//column header containing element
-	.tabulator-header{
-		position:relative;
-		box-sizing: border-box;
-
-		width:100%;
-
-		border-bottom:1px solid $headerSeperatorColor;
-		background-color: $headerBackgroundColor;
-		color: $headerTextColor;
-		font-weight:bold;
-
-		white-space: nowrap;
-		overflow:hidden;
-
-		-moz-user-select: none;
-		-khtml-user-select: none;
-		-webkit-user-select: none;
-		-o-user-select: none;
-
-		//individual column header element
-		.tabulator-col{
-			display:inline-block;
-			position:relative;
-			box-sizing:border-box;
-			border-right:1px solid $headerBorderColor;
-			background:$headerBackgroundColor;
-			text-align:left;
-			vertical-align: bottom;
-			overflow: hidden;
-
-			&.tabulator-moving{
-				position: absolute;
-				border:1px solid  $headerSeperatorColor;
-				background:darken($headerBackgroundColor, 10%);
-				pointer-events: none;
-			}
-
-			//hold content of column header
-			.tabulator-col-content{
-				box-sizing:border-box;
-				position: relative;
-				padding:4px;
-
-				//hold title of column header
-				.tabulator-col-title{
-					box-sizing:border-box;
-					width: 100%;
-
-					white-space: nowrap;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					vertical-align:bottom;
-
-					//element to hold title editor
-					.tabulator-title-editor{
-						box-sizing: border-box;
-						width: 100%;
-
-						border:1px solid #999;
-
-						padding:1px;
-
-						background: #fff;
-					}
-				}
-
-				//column sorter arrow
-				.tabulator-arrow{
-					display: inline-block;
-					position: absolute;
-					top:9px;
-					right:8px;
-					width: 0;
-					height: 0;
-					border-left: 6px solid transparent;
-					border-right: 6px solid transparent;
-					border-bottom: 6px solid $sortArrowInactive;
-				}
-
-			}
-
-			//complex header column group
-			&.tabulator-col-group{
-
-				//gelement to hold sub columns in column group
-				.tabulator-col-group-cols{
-					position:relative;
-					display: flex;
-
-					border-top:1px solid $headerBorderColor;
-					overflow: hidden;
-
-					.tabulator-col:last-child{
-						margin-right:-1px;
-					}
-				}
-			}
-
-			//hide left resize handle on first column
-			&:first-child{
-				.tabulator-col-resize-handle.prev{
-					display: none;
-				}
-			}
-
-			//placeholder element for sortable columns
-			&.ui-sortable-helper{
-				position: absolute;
-				background-color: $headerBackgroundColor !important;
-				border:1px solid $headerBorderColor;
-			}
-
-			//header filter containing element
-			.tabulator-header-filter{
-				position: relative;
-				box-sizing: border-box;
-				margin-top:2px;
-				width:100%;
-				text-align: center;
-
-				//styling adjustment for inbuilt editors
-				textarea{
-					height:auto !important;
-				}
-
-				svg{
-					margin-top: 3px;
-				}
-
-				input{
-					&::-ms-clear {
-						width : 0;
-						height: 0;
-					}
-				}
-			}
-
-			//styling child elements for sortable columns
-			&.tabulator-sortable{
-				.tabulator-col-title{
-					padding-right:25px;
-				}
-
-				&:hover{
-					cursor:pointer;
-					background-color:darken($headerBackgroundColor, 10%);
-				}
-
-				&[aria-sort="none"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: none;
-						border-bottom: 6px solid $sortArrowInactive;
-					}
-				}
-
-				&[aria-sort="asc"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: none;
-						border-bottom: 6px solid $sortArrowActive;
-					}
-				}
-
-				&[aria-sort="desc"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: 6px solid $sortArrowActive;
-						border-bottom: none;
-					}
-				}
-			}
-
-
-			&.tabulator-col-vertical{
-				.tabulator-col-content{
-					.tabulator-col-title{
-						writing-mode: vertical-rl;
-						text-orientation: mixed;
-
-						display:flex;
-						align-items:center;
-						justify-content:center;
-					}
-				}
-
-				&.tabulator-col-vertical-flip{
-					.tabulator-col-title{
-						transform: rotate(180deg);
-					}
-				}
-
-				&.tabulator-sortable{
-					.tabulator-col-title{
-						padding-right:0;
-						padding-top:20px;
-					}
-
-					&.tabulator-col-vertical-flip{
-						.tabulator-col-title{
-							padding-right:0;
-							padding-bottom:20px;
-						}
-
-					}
-
-					.tabulator-arrow{
-						right:calc(50% - 6px);
-					}
-				}
-			}
-		}
-
-		.tabulator-frozen{
-			display: inline-block;
-			position: absolute;
-
-			// background-color: inherit;
-
-			z-index: 10;
-
-			&.tabulator-frozen-left{
-				border-right:2px solid $rowBorderColor;
-			}
-
-			&.tabulator-frozen-right{
-				border-left:2px solid $rowBorderColor;
-			}
-		}
-
-
-		.tabulator-calcs-holder{
-			box-sizing:border-box;
-			min-width:400%;
-
-			background:lighten($headerBackgroundColor, 5%) !important;
-
-			.tabulator-row{
-				background:lighten($headerBackgroundColor, 5%) !important;
-
-				.tabulator-col-resize-handle{
-					display: none;
-				}
-			}
-
-			border-top:1px solid $rowBorderColor;
-			border-bottom:1px solid $headerBorderColor;
-
-			overflow: hidden;
-		}
-
-		.tabulator-frozen-rows-holder{
-			min-width:400%;
-
-			&:empty{
-				display: none;
-			}
-		}
-	}
-
-	//scrolling element to hold table
-	.tabulator-tableHolder{
-		position:relative;
-		width:100%;
-		white-space: nowrap;
-		overflow:auto;
-		-webkit-overflow-scrolling: touch;
-
-		&:focus{
-			outline: none;
-		}
-
-		//default placeholder element
-		.tabulator-placeholder{
-			box-sizing:border-box;
-			display: flex;
-			align-items:center;
-
-			&[tabulator-render-mode="virtual"]{
-				position: absolute;
-				top:0;
-				left:0;
-				height:100%;
-			}
-
-			width:100%;
-
-			span{
-				display: inline-block;
-
-				margin:0 auto;
-				padding:10px;
-
-				color:#ccc;
-				font-weight: bold;
-				font-size: 20px;
-			}
-		}
-
-		//element to hold table rows
-		.tabulator-table{
-			position:relative;
-			display:inline-block;
-			background-color:$rowBackgroundColor;
-			white-space: nowrap;
-			overflow:visible;
-			color:$rowTextColor;
-
-			//row element
-			.tabulator-row{
-				&.tabulator-calcs{
-					font-weight: bold;
-					background:darken($rowAltBackgroundColor, 5%) !important;
-
-					&.tabulator-calcs-top{
-						border-bottom:2px solid $rowBorderColor;
-					}
-
-					&.tabulator-calcs-bottom{
-						border-top:2px solid $rowBorderColor;
-					}
-				}
-			}
-
-		}
-	}
-
-
-
-	//footer element
-	.tabulator-footer{
-		padding:5px 10px;
-		border-top:1px solid $footerSeperatorColor;
-		background-color: $footerBackgroundColor;
-		text-align: right;
-		color: $footerTextColor;
-		font-weight:bold;
-		white-space:nowrap;
-		user-select:none;
-
-		-moz-user-select: none;
-		-khtml-user-select: none;
-		-webkit-user-select: none;
-		-o-user-select: none;
-
-		.tabulator-calcs-holder{
-			box-sizing:border-box;
-			width:calc(100% + 20px);
-			margin:-5px -10px 5px -10px;
-
-			text-align: left;
-
-			background:lighten($footerBackgroundColor, 5%) !important;
-
-			.tabulator-row{
-				background:lighten($footerBackgroundColor, 5%) !important;
-
-				.tabulator-col-resize-handle{
-					display: none;
-				}
-			}
-
-			border-bottom:1px solid $rowBorderColor;
-			border-top:1px solid $rowBorderColor;
-
-			overflow: hidden;
-
-			&:only-child{
-				margin-bottom:-5px;
-				border-bottom:none;
-			}
-		}
-
-		//pagination container element
-		.tabulator-pages{
-			margin:0 7px;
-		}
-
-		//pagination button
-		.tabulator-page{
-			display:inline-block;
-
-			margin:0 2px;
-			padding:2px 5px;
-
-			border:1px solid $footerBorderColor;
-			border-radius:3px;
-
-			background:rgba(255,255,255,.2);
-
-			color: $footerTextColor;
-			font-family:inherit;
-			font-weight:inherit;
-			font-size:inherit;
-
-			&.active{
-				color:$footerActiveColor;
-			}
-
-			&:disabled{
-				opacity:.5;
-			}
-
-			&:not(.disabled){
-				&:hover{
-					cursor:pointer;
-					background:rgba(0,0,0,.2);
-					color:#fff;
-				}
-			}
-		}
-	}
-
-	//column resize handles
-	.tabulator-col-resize-handle{
-		position:absolute;
-		right:0;
-		top:0;
-		bottom:0;
-		width:5px;
-
-		&.prev{
-			left:0;
-			right:auto;
-		}
-
-		&:hover{
-			cursor:ew-resize;
-		}
-	}
-
-
-	//holding div that contains loader and covers tabulator element to prevent interaction
-	.tabulator-loader{
-		position:absolute;
-		display: flex;
-		align-items:center;
-
-		top:0;
-		left:0;
-		z-index:100;
-
-		height:100%;
-		width:100%;
-		background:rgba(0,0,0,.4);
-		text-align:center;
-
-		//loading message element
-		.tabulator-loader-msg{
-			display:inline-block;
-
-			margin:0 auto;
-			padding:10px 20px;
-
-			border-radius:10px;
-
-			background:#fff;
-			font-weight:bold;
-			font-size:16px;
-
-			//loading message
-			&.tabulator-loading{
-				border:4px solid #333;
-				color:#000;
-			}
-
-			//error message
-			&.tabulator-error{
-				border:4px solid #D00;
-				color:#590000;
-			}
-		}
-	}
-}
-
-//row element
-.tabulator-row{
-	position: relative;
-	box-sizing: border-box;
-	min-height:$textSize + ($headerMargin * 2);
-	background-color: $rowBackgroundColor;
-
-
-	&.tabulator-row-even{
-		background-color: $rowAltBackgroundColor;
-	}
-
-	&.tabulator-selectable:hover{
-		background-color:$rowHoverBackground;
-		cursor: pointer;
-	}
-
-	&.tabulator-selected{
-		background-color:$rowSelectedBackground;
-	}
-
-	&.tabulator-selected:hover{
-		background-color:$rowSelectedBackgroundHover;
-		cursor: pointer;
-	}
-
-	&.tabulator-row-moving{
-		border:1px solid #000;
-		background:#fff;
-	}
-
-	&.tabulator-moving{
-		position: absolute;
-
-		border-top:1px solid  $rowBorderColor;
-		border-bottom:1px solid  $rowBorderColor;
-
-		pointer-events: none;
-		z-index:15;
-	}
-
-	//row resize handles
-	.tabulator-row-resize-handle{
-		position:absolute;
-		right:0;
-		bottom:0;
-		left:0;
-		height:5px;
-
-		&.prev{
-			top:0;
-			bottom:auto;
-		}
-
-		&:hover{
-			cursor:ns-resize;
-		}
-	}
-
-	.tabulator-frozen{
-		display: inline-block;
-		position: absolute;
-
-		background-color: inherit;
-
-		z-index: 10;
-
-		&.tabulator-frozen-left{
-			border-right:2px solid $rowBorderColor;
-		}
-
-		&.tabulator-frozen-right{
-			border-left:2px solid $rowBorderColor;
-		}
-	}
-
-	.tabulator-responsive-collapse{
-		box-sizing:border-box;
-
-		padding:5px;
-
-		border-top:1px solid $rowBorderColor;
-		border-bottom:1px solid $rowBorderColor;
-
-		&:empty{
-			display:none;
-		}
-
-		table{
-			font-size:$textSize;
-
-			tr{
-				td{
-					position: relative;
-
-					&:first-of-type{
-						padding-right:10px;
-					}
-				}
-			}
-		}
-	}
-
-	//cell element
-	.tabulator-cell{
-		display:inline-block;
-		position: relative;
-		box-sizing:border-box;
-		padding:4px;
-		border-right:1px solid $rowBorderColor;
-		vertical-align:middle;
-		white-space:nowrap;
-		overflow:hidden;
-		text-overflow:ellipsis;
-
-
-		&.tabulator-editing{
-			border:1px solid  $editBoxColor;
-			padding: 0;
-
-			input, select{
-				border:1px;
-				background:transparent;
-			}
-		}
-
-		&.tabulator-validation-fail{
-			border:1px solid $errorColor;
-			input, select{
-				border:1px;
-				background:transparent;
-
-				color: $errorColor;
-			}
-		}
-
-		//hide left resize handle on first column
-		&:first-child{
-			.tabulator-col-resize-handle.prev{
-				display: none;
-			}
-		}
-
-		//movable row handle
-		&.tabulator-row-handle{
-			display: inline-flex;
-			align-items:center;
-			justify-content:center;
-
-			-moz-user-select: none;
-			-khtml-user-select: none;
-			-webkit-user-select: none;
-			-o-user-select: none;
-
-			//handle holder
-			.tabulator-row-handle-box{
-				width:80%;
-
-				//Hamburger element
-				.tabulator-row-handle-bar{
-					width:100%;
-					height:3px;
-					margin-top:2px;
-					background:#666;
-				}
-			}
-		}
-
-		.tabulator-data-tree-branch{
-			display:inline-block;
-			vertical-align:middle;
-
-			height:9px;
-			width:7px;
-
-			margin-top:-9px;
-			margin-right:5px;
-
-			border-bottom-left-radius:1px;
-
-			border-left:2px solid $rowBorderColor;
-			border-bottom:2px solid $rowBorderColor;
-		}
-
-		.tabulator-data-tree-control{
-
-			display:inline-flex;
-			justify-content:center;
-			align-items:center;
-			vertical-align:middle;
-
-			height:11px;
-			width:11px;
-
-			margin-right:5px;
-
-			border:1px solid $rowTextColor;
-			border-radius:2px;
-			background:rgba(0, 0, 0, .1);
-
-			overflow:hidden;
-
-			&:hover{
-				cursor:pointer;
-				background:rgba(0, 0, 0, .2);
-			}
-
-			.tabulator-data-tree-control-collapse{
-				display:inline-block;
-				position: relative;
-
-				height: 7px;
-				width: 1px;
-
-				background: transparent;
-
-				&:after {
-					position: absolute;
-					content: "";
-					left: -3px;
-					top: 3px;
-
-					height: 1px;
-					width: 7px;
-
-					background: $rowTextColor;
-				}
-			}
-
-			.tabulator-data-tree-control-expand{
-				display:inline-block;
-				position: relative;
-
-				height: 7px;
-				width: 1px;
-
-				background: $rowTextColor;
-
-				&:after {
-					position: absolute;
-					content: "";
-					left: -3px;
-					top: 3px;
-
-					height: 1px;
-					width: 7px;
-
-					background: $rowTextColor;
-				}
-			}
-
-		}
-
-		.tabulator-responsive-collapse-toggle{
-			display: inline-flex;
-			align-items:center;
-			justify-content:center;
-
-			-moz-user-select: none;
-			-khtml-user-select: none;
-			-webkit-user-select: none;
-			-o-user-select: none;
-
-			height:15px;
-			width:15px;
-
-			border-radius:20px;
-			background:#666;
-
-			color:$rowBackgroundColor;
-			font-weight:bold;
-			font-size:1.1em;
-
-			&:hover{
-				opacity:.7;
-			}
-
-			&.open{
-				.tabulator-responsive-collapse-toggle-close{
-					display:initial;
-				}
-
-				.tabulator-responsive-collapse-toggle-open{
-					display:none;
-				}
-			}
-
-			.tabulator-responsive-collapse-toggle-close{
-				display:none;
-			}
-		}
-	}
-
-	//row grouping element
-	&.tabulator-group{
-		box-sizing:border-box;
-		border-bottom:1px solid #999;
-		border-right:1px solid $rowBorderColor;
-		border-top:1px solid #999;
-		padding:5px;
-		padding-left:10px;
-		background:#ccc;
-		font-weight:bold;
-
-		min-width: 100%;
-
-		&:hover{
-			cursor:pointer;
-			background-color:rgba(0,0,0,.1);
-		}
-
-		&.tabulator-group-visible{
-
-			.tabulator-arrow{
-				margin-right:10px;
-				border-left: 6px solid transparent;
-				border-right: 6px solid transparent;
-				border-top: 6px solid $sortArrowActive;
-				border-bottom: 0;
-			}
-
-		}
-
-		&.tabulator-group-level-1{
-			.tabulator-arrow{
-				margin-left:20px;
-			}
-		}
-
-		&.tabulator-group-level-2{
-			.tabulator-arrow{
-				margin-left:40px;
-			}
-		}
-
-		&.tabulator-group-level-3{
-			.tabulator-arrow{
-				margin-left:60px;
-			}
-		}
-
-		&.tabulator-group-level-4{
-			.tabulator-arrow{
-				margin-left:80px;
-			}
-		}
-
-		&.tabulator-group-level-5{
-			.tabulator-arrow{
-				margin-left:100px;
-			}
-		}
-
-		//sorting arrow
-		.tabulator-arrow{
-			display: inline-block;
-			width: 0;
-			height: 0;
-			margin-right:16px;
-			border-top: 6px solid transparent;
-			border-bottom: 6px solid transparent;
-			border-right: 0;
-			border-left: 6px solid $sortArrowActive;
-			vertical-align:middle;
-		}
-
-		span{
-			margin-left:10px;
-			color:#d00;
-		}
-	}
-
-}
-
-.tabulator-edit-select-list{
-	position: absolute;
-	display:inline-block;
-	box-sizing:border-box;
-
-	max-height:200px;
-
-	background:$rowBackgroundColor;
-	border:1px solid $rowBorderColor;
-
-	font-size:$textSize;
-
-	overflow-y:auto;
-	-webkit-overflow-scrolling: touch;
-
-	z-index: 10000;
-
-	.tabulator-edit-select-list-item{
-		padding:4px;
-
-		color:$rowTextColor;
-
-		&.active{
-			color:$rowBackgroundColor;
-			background:$editBoxColor;
-		}
-
-		&:hover{
-			cursor:pointer;
-
-			color:$rowBackgroundColor;
-			background:$editBoxColor;
-		}
-	}
-
-	.tabulator-edit-select-list-group{
-		border-bottom:1px solid $rowBorderColor;
-
-		padding:4px;
-		padding-top:6px;
-
-		color:$rowTextColor;
-		font-weight:bold;
-	}
-}
\ No newline at end of file
diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator_midnight.scss b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator_midnight.scss
deleted file mode 100644
index 1eee0bcb08..0000000000
--- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator_midnight.scss
+++ /dev/null
@@ -1,956 +0,0 @@
-
-//Main Theme Variables
-$backgroundColor: #222 !default; //background color of tabulator
-$borderColor:#333 !default; //border to tabulator
-$textSize:14px !default; //table text size
-
-//header themeing
-$headerBackgroundColor:#333 !default; //border to tabulator
-$headerTextColor:#fff !default; //header text colour
-$headerBorderColor:#aaa !default;  //header border color
-$headerSeperatorColor:#999 !default; //header bottom seperator color
-$headerMargin:4px !default; //padding round header
-
-//column header arrows
-$sortArrowActive: #666 !default;
-$sortArrowInactive: #bbb !default;
-
-//row themeing
-$rowBackgroundColor:#666 !default; //table row background color
-$rowAltBackgroundColor:#444 !default; //table row background color
-$rowBorderColor:#888 !default; //table border color
-$rowTextColor:#fff !default; //table text color
-$rowHoverBackground:#999 !default; //row background color on hover
-
-$rowSelectedBackground: #000 !default; //row background color when selected
-$rowSelectedBackgroundHover: #888 !default;//row background color when selected and hovered
-
-$editBoxColor:#999 !default; //border color for edit boxes
-$errorColor:#dd0000 !default; //error indication
-
-//footer themeing
-$footerBackgroundColor:#333 !default; //border to tabulator
-$footerTextColor:#333 !default; //footer text colour
-$footerBorderColor:#aaa !default; //footer border color
-$footerSeperatorColor:#999 !default; //footer bottom seperator color
-$footerActiveColor:#fff !default; //footer bottom active text color
-
-
-//Tabulator Containing Element
-.tabulator{
-	position: relative;
-	border: 1px solid $borderColor;
-	background-color: $backgroundColor;
-	overflow:hidden;
-	font-size:$textSize;
-	text-align: left;
-
-	-webkit-transform: translatez(0);
-	-moz-transform: translatez(0);
-	-ms-transform: translatez(0);
-	-o-transform: translatez(0);
-	transform: translatez(0);
-
-	&[tabulator-layout="fitDataFill"]{
-		.tabulator-tableHolder{
-			.tabulator-table{
-				min-width:100%;
-			}
-		}
-	}
-
-	&.tabulator-block-select{
-		user-select: none;
-	}
-
-	//column header containing element
-	.tabulator-header{
-		position:relative;
-		box-sizing: border-box;
-
-		width:100%;
-
-		border-bottom:1px solid $headerSeperatorColor;
-		background-color: $headerBackgroundColor;
-		color: $headerTextColor;
-		font-weight:bold;
-
-		white-space: nowrap;
-		overflow:hidden;
-
-		-moz-user-select: none;
-		-khtml-user-select: none;
-		-webkit-user-select: none;
-		-o-user-select: none;
-
-		//individual column header element
-		.tabulator-col{
-			display:inline-block;
-			position:relative;
-			box-sizing:border-box;
-			border-right:1px solid $headerBorderColor;
-			background-color: $headerBackgroundColor;
-			text-align:left;
-			vertical-align: bottom;
-			overflow: hidden;
-
-			&.tabulator-moving{
-				position: absolute;
-				border:1px solid  $headerSeperatorColor;
-				background:darken($headerBackgroundColor, 10%);
-				pointer-events: none;
-			}
-
-			//hold content of column header
-			.tabulator-col-content{
-				box-sizing:border-box;
-				position: relative;
-				padding:4px;
-
-				//hold title of column header
-				.tabulator-col-title{
-					box-sizing:border-box;
-					width: 100%;
-
-					white-space: nowrap;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					vertical-align:bottom;
-
-					//element to hold title editor
-					.tabulator-title-editor{
-						box-sizing: border-box;
-						width: 100%;
-
-						border:1px solid #999;
-
-						padding:1px;
-
-						background: #444;
-						color: #fff;
-					}
-
-				}
-
-				//column sorter arrow
-				.tabulator-arrow{
-					display: inline-block;
-					position: absolute;
-					top:9px;
-					right:8px;
-					width: 0;
-					height: 0;
-					border-left: 6px solid transparent;
-					border-right: 6px solid transparent;
-					border-bottom: 6px solid $sortArrowInactive;
-				}
-
-			}
-
-			//complex header column group
-			&.tabulator-col-group{
-
-				//gelement to hold sub columns in column group
-				.tabulator-col-group-cols{
-					position:relative;
-					display: flex;
-
-					border-top:1px solid $headerBorderColor;
-					overflow: hidden;
-
-					.tabulator-col:last-child{
-						margin-right:-1px;
-					}
-				}
-			}
-
-			//hide left resize handle on first column
-			&:first-child{
-				.tabulator-col-resize-handle.prev{
-					display: none;
-				}
-			}
-
-			//placeholder element for sortable columns
-			&.ui-sortable-helper{
-				position: absolute;
-				background-color: darken($headerBackgroundColor, 10%) !important;
-				border:1px solid $headerBorderColor;
-			}
-
-			//header filter containing element
-			.tabulator-header-filter{
-				position: relative;
-				box-sizing: border-box;
-				margin-top:2px;
-				width:100%;
-				text-align: center;
-
-				//styling adjustment for inbuilt editors
-				textarea{
-					height:auto !important;
-				}
-
-				svg{
-					margin-top: 3px;
-				}
-
-				input, select{
-					border:1px solid #999;
-					background: #444;
-					color: #fff;
-				}
-
-				input{
-					&::-ms-clear {
-					  width : 0;
-					  height: 0;
-					}
-				}
-			}
-
-			//styling child elements for sortable columns
-			&.tabulator-sortable{
-				.tabulator-col-title{
-					padding-right:25px;
-				}
-
-				&:hover{
-					cursor:pointer;
-					background-color:darken($headerBackgroundColor, 10%);
-				}
-
-
-				&[aria-sort="none"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: none;
-						border-bottom: 6px solid $sortArrowInactive;
-					}
-				}
-
-				&[aria-sort="asc"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: none;
-						border-bottom: 6px solid $sortArrowActive;
-					}
-				}
-
-				&[aria-sort="desc"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: 6px solid $sortArrowActive;
-						border-bottom: none;
-					}
-				}
-			}
-
-			&.tabulator-col-vertical{
-				.tabulator-col-content{
-					.tabulator-col-title{
-						writing-mode: vertical-rl;
-						text-orientation: mixed;
-
-						display:flex;
-						align-items:center;
-						justify-content:center;
-					}
-				}
-
-				&.tabulator-col-vertical-flip{
-					.tabulator-col-title{
-						transform: rotate(180deg);
-					}
-				}
-
-				&.tabulator-sortable{
-					.tabulator-col-title{
-						padding-right:0;
-						padding-top:20px;
-					}
-
-					&.tabulator-col-vertical-flip{
-						.tabulator-col-title{
-							padding-right:0;
-							padding-bottom:20px;
-						}
-
-					}
-
-					.tabulator-arrow{
-						right:calc(50% - 6px);
-					}
-				}
-			}
-
-		}
-
-		.tabulator-frozen{
-			display: inline-block;
-			position: absolute;
-
-			// background-color: inherit;
-
-			z-index: 10;
-
-			&.tabulator-frozen-left{
-				border-right:2px solid $rowBorderColor;
-			}
-
-			&.tabulator-frozen-right{
-				border-left:2px solid $rowBorderColor;
-			}
-		}
-
-
-		.tabulator-calcs-holder{
-			box-sizing:border-box;
-			min-width:400%;
-
-			background:darken($headerBackgroundColor, 10%) !important;
-
-			.tabulator-row{
-				background:darken($headerBackgroundColor, 10%) !important;
-
-				.tabulator-col-resize-handle{
-					display: none;
-				}
-			}
-
-			border-top:1px solid $rowBorderColor;
-			border-bottom:1px solid $headerBorderColor;
-
-			overflow: hidden;
-		}
-
-		.tabulator-frozen-rows-holder{
-			min-width:400%;
-
-			&:empty{
-				display: none;
-			}
-		}
-
-	}
-
-	//scrolling element to hold table
-	.tabulator-tableHolder{
-		position:relative;
-		width:100%;
-		white-space: nowrap;
-		overflow:auto;
-		-webkit-overflow-scrolling: touch;
-
-		&:focus{
-			outline: none;
-		}
-
-		//default placeholder element
-		.tabulator-placeholder{
-			box-sizing:border-box;
-			display: flex;
-			align-items:center;
-
-			&[tabulator-render-mode="virtual"]{
-				position: absolute;
-				top:0;
-				left:0;
-				height:100%;
-			}
-
-			width:100%;
-
-			span{
-				display: inline-block;
-
-				margin:0 auto;
-				padding:10px;
-
-				color:#eee;
-				font-weight: bold;
-				font-size: 20px;
-			}
-		}
-
-		//element to hold table rows
-		.tabulator-table{
-			position:relative;
-			display:inline-block;
-			background-color:$rowBackgroundColor;
-			white-space: nowrap;
-			overflow:visible;
-			color:$rowTextColor;
-
-			.tabulator-row{
-				&.tabulator-calcs{
-					font-weight: bold;
-					background:darken($rowAltBackgroundColor, 5%) !important;
-
-					&.tabulator-calcs-top{
-						border-bottom:2px solid $rowBorderColor;
-					}
-
-					&.tabulator-calcs-bottom{
-						border-top:2px solid $rowBorderColor;
-					}
-				}
-			}
-		}
-	}
-
-	//column resize handles
-	.tabulator-col-resize-handle{
-		position:absolute;
-		right:0;
-		top:0;
-		bottom:0;
-		width:5px;
-
-		&.prev{
-			left:0;
-			right:auto;
-		}
-
-		&:hover{
-			cursor:ew-resize;
-		}
-	}
-
-
-	//footer element
-	.tabulator-footer{
-		padding:5px 10px;
-		border-top:1px solid $footerSeperatorColor;
-		background-color: $footerBackgroundColor;
-		text-align:right;
-		color: $footerTextColor;
-		font-weight:bold;
-		white-space:nowrap;
-		user-select:none;
-
-		-moz-user-select: none;
-		-khtml-user-select: none;
-		-webkit-user-select: none;
-		-o-user-select: none;
-
-		.tabulator-calcs-holder{
-			box-sizing:border-box;
-			width:calc(100% + 20px);
-			margin:-5px -10px 5px -10px;
-
-			text-align: left;
-
-			background:darken($footerBackgroundColor, 5%) !important;
-
-			.tabulator-row{
-				background:darken($footerBackgroundColor, 5%) !important;
-				color:$headerTextColor;
-
-				.tabulator-col-resize-handle{
-					display: none;
-				}
-			}
-
-			border-bottom:1px solid $rowBorderColor;
-			border-top:1px solid $rowBorderColor;
-
-			overflow: hidden;
-
-			&:only-child{
-				margin-bottom:-5px;
-				border-bottom:none;
-			}
-		}
-
-		//pagination container element
-		.tabulator-pages{
-			margin:0 7px;
-		}
-
-		//pagination button
-		.tabulator-page{
-			display:inline-block;
-			margin:0 2px;
-			border:1px solid $footerBorderColor;
-			border-radius:3px;
-			padding:2px 5px;
-			background:rgba(255,255,255,.2);
-			color: $footerTextColor;
-			font-family:inherit;
-			font-weight:inherit;
-			font-size:inherit;
-
-			&.active{
-				color:$footerActiveColor;
-			}
-
-			&:disabled{
-				opacity:.5;
-			}
-
-			&:not(.disabled){
-				&:hover{
-					cursor:pointer;
-					background:rgba(0,0,0,.2);
-					color:#fff;
-				}
-			}
-		}
-	}
-
-	//holding div that contains loader and covers tabulator element to prevent interaction
-	.tabulator-loader{
-		position:absolute;
-		display: flex;
-		align-items:center;
-
-		top:0;
-		left:0;
-		z-index:100;
-
-		height:100%;
-		width:100%;
-		background:rgba(0,0,0,.4);
-		text-align:center;
-
-		//loading message element
-		.tabulator-loader-msg{
-			display:inline-block;
-
-			margin:0 auto;
-			padding:10px 20px;
-
-			border-radius:10px;
-
-			background:#fff;
-			font-weight:bold;
-			font-size:16px;
-
-			//loading message
-			&.tabulator-loading{
-				border:4px solid #333;
-				color:#000;
-			}
-
-			//error message
-			&.tabulator-error{
-				border:4px solid #D00;
-				color:#590000;
-			}
-		}
-	}
-}
-
-//row element
-.tabulator-row{
-	position: relative;
-	box-sizing: border-box;
-
-	min-height:$textSize + ($headerMargin * 2);
-	background-color: $rowBackgroundColor;
-
-	&:nth-child(even){
-		background-color: $rowAltBackgroundColor;
-	}
-
-	&.tabulator-selectable:hover{
-		background-color:$rowHoverBackground;
-		cursor: pointer;
-	}
-
-	&.tabulator-selected{
-		background-color:$rowSelectedBackground;
-	}
-
-	&.tabulator-selected:hover{
-		background-color:$rowSelectedBackgroundHover;
-		cursor: pointer;
-	}
-
-	&.tabulator-moving{
-		position: absolute;
-
-		border-top:1px solid  $rowBorderColor;
-		border-bottom:1px solid  $rowBorderColor;
-
-		pointer-events: none !important;
-		z-index:15;
-	}
-
-	//row resize handles
-	.tabulator-row-resize-handle{
-		position:absolute;
-		right:0;
-		bottom:0;
-		left:0;
-		height:5px;
-
-		&.prev{
-			top:0;
-			bottom:auto;
-		}
-
-		&:hover{
-			cursor:ns-resize;
-		}
-	}
-
-	.tabulator-frozen{
-		display: inline-block;
-		position: absolute;
-
-		background-color: inherit;
-
-		z-index: 10;
-
-		&.tabulator-frozen-left{
-			border-right:2px solid $rowBorderColor;
-		}
-
-		&.tabulator-frozen-right{
-			border-left:2px solid $rowBorderColor;
-		}
-	}
-
-	.tabulator-responsive-collapse{
-		box-sizing:border-box;
-
-		padding:5px;
-
-		border-top:1px solid $rowBorderColor;
-		border-bottom:1px solid $rowBorderColor;
-
-		&:empty{
-			display:none;
-		}
-
-		table{
-			font-size:$textSize;
-
-			tr{
-				td{
-					position: relative;
-
-					&:first-of-type{
-						padding-right:10px;
-					}
-				}
-			}
-		}
-	}
-
-
-	//cell element
-	.tabulator-cell{
-		display:inline-block;
-		position: relative;
-		box-sizing:border-box;
-		padding:4px;
-		border-right:1px solid $rowBorderColor;
-		vertical-align:middle;
-		white-space:nowrap;
-		overflow:hidden;
-		text-overflow:ellipsis;
-
-
-		&.tabulator-editing{
-			border:1px solid  $editBoxColor;
-			padding: 0;
-
-			input, select{
-				border:1px;
-				background:transparent;
-			}
-		}
-
-		&.tabulator-validation-fail{
-			border:1px solid $errorColor;
-			input, select{
-				border:1px;
-				background:transparent;
-
-				color: $errorColor;
-			}
-		}
-
-		//hide left resize handle on first column
-		&:first-child{
-			.tabulator-col-resize-handle.prev{
-				display: none;
-			}
-		}
-
-		//movable row handle
-		&.tabulator-row-handle{
-
-			display: inline-flex;
-			align-items:center;
-
-			-moz-user-select: none;
-			-khtml-user-select: none;
-			-webkit-user-select: none;
-			-o-user-select: none;
-
-			//handle holder
-			.tabulator-row-handle-box{
-				width:80%;
-
-				//Hamburger element
-				.tabulator-row-handle-bar{
-					width:100%;
-					height:3px;
-					margin-top:2px;
-					background:#666;
-				}
-			}
-		}
-
-		.tabulator-data-tree-branch{
-			display:inline-block;
-			vertical-align:middle;
-
-			height:9px;
-			width:7px;
-
-			margin-top:-9px;
-			margin-right:5px;
-
-			border-bottom-left-radius:1px;
-
-			border-left:2px solid $rowBorderColor;
-			border-bottom:2px solid $rowBorderColor;
-		}
-
-		.tabulator-data-tree-control{
-
-			display:inline-flex;
-			justify-content:center;
-			align-items:center;
-			vertical-align:middle;
-
-			height:11px;
-			width:11px;
-
-			margin-right:5px;
-
-			border:1px solid $rowTextColor;
-			border-radius:2px;
-			background:rgba(0, 0, 0, .1);
-
-			overflow:hidden;
-
-			&:hover{
-				cursor:pointer;
-				background:rgba(0, 0, 0, .2);
-			}
-
-			.tabulator-data-tree-control-collapse{
-				display:inline-block;
-				position: relative;
-
-				height: 7px;
-				width: 1px;
-
-				background: transparent;
-
-				&:after {
-					position: absolute;
-					content: "";
-					left: -3px;
-					top: 3px;
-
-					height: 1px;
-					width: 7px;
-
-					background: $rowTextColor;
-				}
-			}
-
-			.tabulator-data-tree-control-expand{
-				display:inline-block;
-				position: relative;
-
-				height: 7px;
-				width: 1px;
-
-				background: $rowTextColor;
-
-				&:after {
-					position: absolute;
-					content: "";
-					left: -3px;
-					top: 3px;
-
-					height: 1px;
-					width: 7px;
-
-					background: $rowTextColor;
-				}
-			}
-
-		}
-
-		.tabulator-responsive-collapse-toggle{
-			display: inline-flex;
-			align-items:center;
-			justify-content:center;
-
-			-moz-user-select: none;
-			-khtml-user-select: none;
-			-webkit-user-select: none;
-			-o-user-select: none;
-
-			height:15px;
-			width:15px;
-
-			border-radius:20px;
-			background:#fff;
-
-			color:$rowBackgroundColor;
-			font-weight:bold;
-			font-size:1.1em;
-
-			&:hover{
-				opacity:.7;
-			}
-
-			&.open{
-				.tabulator-responsive-collapse-toggle-close{
-					display:initial;
-				}
-
-				.tabulator-responsive-collapse-toggle-open{
-					display:none;
-				}
-			}
-
-			.tabulator-responsive-collapse-toggle-close{
-				display:none;
-			}
-		}
-	}
-
-
-	//row grouping element
-	&.tabulator-group{
-
-		box-sizing:border-box;
-		border-bottom:1px solid #999;
-		border-right:1px solid $rowBorderColor;
-		border-top:1px solid #999;
-		padding:5px;
-		padding-left:10px;
-		background:#ccc;
-		font-weight:bold;
-		color:#333;
-
-		min-width: 100%;
-
-		&:hover{
-			cursor:pointer;
-			background-color:rgba(0,0,0,.1);
-		}
-
-		&.tabulator-group-visible{
-			.tabulator-arrow{
-				margin-right:10px;
-				border-left: 6px solid transparent;
-				border-right: 6px solid transparent;
-				border-top: 6px solid $sortArrowActive;
-				border-bottom: 0;
-			}
-		}
-
-		&.tabulator-group-level-1{
-			.tabulator-arrow{
-				margin-left:20px;
-			}
-		}
-
-		&.tabulator-group-level-2{
-			.tabulator-arrow{
-				margin-left:40px;
-			}
-		}
-
-		&.tabulator-group-level-3{
-			.tabulator-arrow{
-				margin-left:60px;
-			}
-		}
-
-		&.tabulator-group-level-4{
-			.tabulator-arrow{
-				margin-left:80px;
-			}
-		}
-
-		&.tabulator-group-level-5{
-			.tabulator-arrow{
-				margin-left:100px;
-			}
-		}
-
-		//sorting arrow
-		.tabulator-arrow{
-			display: inline-block;
-			width: 0;
-			height: 0;
-			margin-right:16px;
-			border-top: 6px solid transparent;
-			border-bottom: 6px solid transparent;
-			border-right: 0;
-			border-left: 6px solid $sortArrowActive;
-			vertical-align:middle;
-		}
-
-		span{
-			margin-left:10px;
-			color:#666;
-		}
-	}
-}
-
-.tabulator-edit-select-list{
-	position: absolute;
-	display:inline-block;
-	box-sizing:border-box;
-
-	max-height:200px;
-
-	background:$rowBackgroundColor;
-	border:1px solid $rowBorderColor;
-
-	font-size:$textSize;
-
-	overflow-y:auto;
-	-webkit-overflow-scrolling: touch;
-
-	z-index: 10000;
-
-	.tabulator-edit-select-list-item{
-		padding:4px;
-
-		color:$rowTextColor;
-
-		&.active{
-			color:$rowBackgroundColor;
-			background:$editBoxColor;
-		}
-
-		&:hover{
-			cursor:pointer;
-
-			color:$rowBackgroundColor;
-			background:$editBoxColor;
-		}
-	}
-
-	.tabulator-edit-select-list-group{
-		border-bottom:1px solid $rowBorderColor;
-
-		padding:4px;
-		padding-top:6px;
-
-		color:$rowTextColor;
-		font-weight:bold;
-	}
-}
\ No newline at end of file
diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator_modern.scss b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator_modern.scss
deleted file mode 100644
index 48ba110a2e..0000000000
--- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator_modern.scss
+++ /dev/null
@@ -1,997 +0,0 @@
-
-$primary: #3759D7 !default; //the base text color from which the rest of the theme derives
-
-//Main Theme Variables
-$backgroundColor: #fff !default; //background color of tabulator
-$borderColor:#fff !default; //border to tabulator
-$textSize:16px !default; //table text size
-
-//header themeing
-$headerBackgroundColor:#fff !default; //border to tabulator
-$headerTextColor:$primary !default; //header text colour
-$headerBorderColor:#fff !default;  //header border color
-$headerSeperatorColor:$primary !default; //header bottom seperator color
-$headerMargin:4px !default; //padding round header
-
-//column header arrows
-$sortArrowActive: $primary !default;
-$sortArrowInactive: lighten($primary, 30%) !default;
-
-//row themeing
-$rowBackgroundColor:#f3f3f3 !default; //table row background color
-$rowAltBackgroundColor:#fff !default; //table row background color
-$rowBorderColor:#fff !default; //table border color
-$rowTextColor:#333 !default; //table text color
-$rowHoverBackground:#bbb !default; //row background color on hover
-
-$rowSelectedBackground: #9ABCEA !default; //row background color when selected
-$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered
-
-$editBoxColor:#1D68CD !default; //border color for edit boxes
-$errorColor:#dd0000 !default; //error indication
-
-//footer themeing
-$footerBackgroundColor:#fff !default; //border to tabulator
-$footerTextColor:$primary !default; //footer text colour
-$footerBorderColor:#aaa !default; //footer border color
-$footerSeperatorColor:#999 !default; //footer bottom seperator color
-$footerActiveColor:$primary !default; //footer bottom active text color
-
-$handleWidth:10px !default; //width of the row handle
-$handleColor: $primary !default; //color for odd numbered rows
-$handleColorAlt: lighten($primary, 10%) !default; //color for even numbered rows
-
-
-//Tabulator Containing Element
-.tabulator{
-	position: relative;
-	border: 1px solid $borderColor;
-	background-color: $backgroundColor;
-	overflow:hidden;
-	font-size:$textSize;
-	text-align: left;
-
-	-webkit-transform: translatez(0);
-	-moz-transform: translatez(0);
-	-ms-transform: translatez(0);
-	-o-transform: translatez(0);
-	transform: translatez(0);
-
-	&[tabulator-layout="fitDataFill"]{
-		.tabulator-tableHolder{
-			.tabulator-table{
-				min-width:100%;
-			}
-		}
-	}
-
-	&.tabulator-block-select{
-		user-select: none;
-	}
-
-	//column header containing element
-	.tabulator-header{
-		position:relative;
-		box-sizing: border-box;
-
-		width:100%;
-
-		border-bottom:3px solid $headerSeperatorColor;
-		margin-bottom:4px;
-		background-color: $headerBackgroundColor;
-		color: $headerTextColor;
-		font-weight:bold;
-
-		white-space: nowrap;
-		overflow:hidden;
-
-		-moz-user-select: none;
-		-khtml-user-select: none;
-		-webkit-user-select: none;
-		-o-user-select: none;
-
-		padding-left:$handleWidth;
-
-		font-size: 1.1em;
-
-		//individual column header element
-		.tabulator-col{
-			display:inline-block;
-			position:relative;
-			box-sizing:border-box;
-			border-right:2px solid $headerBorderColor;
-			background-color: $headerBackgroundColor;
-			text-align:left;
-			vertical-align: bottom;
-			overflow: hidden;
-
-			&.tabulator-moving{
-				position: absolute;
-				border:1px solid  $headerSeperatorColor;
-				background:darken($headerBackgroundColor, 10%);
-				pointer-events: none;
-			}
-
-			//hold content of column header
-			.tabulator-col-content{
-				box-sizing:border-box;
-				position: relative;
-				padding:4px;
-
-				//hold title of column header
-				.tabulator-col-title{
-					box-sizing:border-box;
-					width: 100%;
-
-					white-space: nowrap;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					vertical-align:bottom;
-
-					//element to hold title editor
-					.tabulator-title-editor{
-						box-sizing: border-box;
-						width: 100%;
-
-						border:1px solid $primary;
-
-						padding:1px;
-
-						background: #fff;
-
-						font-size: 1em;
-						color: $primary;
-					}
-				}
-
-				//column sorter arrow
-				.tabulator-arrow{
-					display: inline-block;
-					position: absolute;
-					top:9px;
-					right:8px;
-					width: 0;
-					height: 0;
-					border-left: 6px solid transparent;
-					border-right: 6px solid transparent;
-					border-bottom: 6px solid $sortArrowInactive;
-				}
-
-			}
-
-			//complex header column group
-			&.tabulator-col-group{
-
-				//gelement to hold sub columns in column group
-				.tabulator-col-group-cols{
-					position:relative;
-					display: flex;
-
-					border-top:2px solid $headerSeperatorColor;
-					overflow: hidden;
-
-					.tabulator-col:last-child{
-						margin-right:-1px;
-					}
-				}
-			}
-
-
-			//hide left resize handle on first column
-			&:first-child{
-				.tabulator-col-resize-handle.prev{
-					display: none;
-				}
-			}
-
-			//placeholder element for sortable columns
-			&.ui-sortable-helper{
-				position: absolute;
-				background-color: darken($headerBackgroundColor, 10%) !important;
-				border:1px solid $headerBorderColor;
-			}
-
-			//header filter containing element
-			.tabulator-header-filter{
-				position: relative;
-				box-sizing: border-box;
-				margin-top:2px;
-				width:100%;
-				text-align: center;
-
-				//styling adjustment for inbuilt editors
-				textarea{
-					height:auto !important;
-				}
-
-				svg{
-					margin-top: 3px;
-				}
-
-				input{
-					&::-ms-clear {
-					  width : 0;
-					  height: 0;
-					}
-				}
-			}
-
-			//styling child elements for sortable columns
-			&.tabulator-sortable{
-				.tabulator-col-title{
-					padding-right:25px;
-				}
-
-				&:hover{
-					cursor:pointer;
-					background-color:darken($headerBackgroundColor, 10%);
-				}
-
-
-				&[aria-sort="none"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: none;
-						border-bottom: 6px solid $sortArrowInactive;
-					}
-				}
-
-				&[aria-sort="asc"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: none;
-						border-bottom: 6px solid $sortArrowActive;
-					}
-				}
-
-				&[aria-sort="desc"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: 6px solid $sortArrowActive;
-						border-bottom: none;
-					}
-				}
-			}
-
-			&.tabulator-col-vertical{
-				.tabulator-col-content{
-					.tabulator-col-title{
-						writing-mode: vertical-rl;
-						text-orientation: mixed;
-
-						display:flex;
-						align-items:center;
-						justify-content:center;
-					}
-				}
-
-				&.tabulator-col-vertical-flip{
-					.tabulator-col-title{
-						transform: rotate(180deg);
-					}
-				}
-
-				&.tabulator-sortable{
-					.tabulator-col-title{
-						padding-right:0;
-						padding-top:20px;
-					}
-
-					&.tabulator-col-vertical-flip{
-						.tabulator-col-title{
-							padding-right:0;
-							padding-bottom:20px;
-						}
-
-					}
-
-					.tabulator-arrow{
-						right:calc(50% - 6px);
-					}
-				}
-			}
-
-		}
-
-		.tabulator-frozen{
-			display: inline-block;
-			position: absolute;
-
-			// background-color: inherit;
-
-			z-index: 10;
-
-			&.tabulator-frozen-left{
-				padding-left: $handleWidth;
-
-				border-right:2px solid $rowBorderColor;
-			}
-
-			&.tabulator-frozen-right{
-				border-left:2px solid $rowBorderColor;
-			}
-		}
-
-		.tabulator-calcs-holder{
-			box-sizing:border-box;
-			min-width:400%;
-
-			border-top:2px solid $headerSeperatorColor !important;
-
-			background:lighten($headerBackgroundColor, 5%) !important;
-
-			.tabulator-row{
-				padding-left: 0 !important;
-
-				background:lighten($headerBackgroundColor, 5%) !important;
-
-				.tabulator-col-resize-handle{
-					display: none;
-				}
-
-				.tabulator-cell{
-					background:none;
-				}
-			}
-
-			border-top:1px solid $rowBorderColor;
-			border-bottom:1px solid $headerBorderColor;
-
-			overflow: hidden;
-		}
-
-		.tabulator-frozen-rows-holder{
-			min-width:400%;
-
-			&:empty{
-				display: none;
-			}
-		}
-	}
-
-	//scrolling element to hold table
-	.tabulator-tableHolder{
-		position:relative;
-		width:100%;
-		white-space: nowrap;
-		overflow:auto;
-		-webkit-overflow-scrolling: touch;
-
-		&:focus{
-			outline: none;
-		}
-
-		//default placeholder element
-		.tabulator-placeholder{
-			box-sizing:border-box;
-			display: flex;
-			align-items:center;
-
-			&[tabulator-render-mode="virtual"]{
-				position: absolute;
-				top:0;
-				left:0;
-				height:100%;
-			}
-
-			width:100%;
-
-			span{
-				display: inline-block;
-
-				margin:0 auto;
-				padding:10px;
-
-				color:$primary;
-				font-weight: bold;
-				font-size: 20px;
-			}
-		}
-
-		//element to hold table rows
-		.tabulator-table{
-			position:relative;
-			display:inline-block;
-			background-color:$rowBackgroundColor;
-			white-space: nowrap;
-			overflow:visible;
-			color:$rowTextColor;
-
-			.tabulator-row{
-				&.tabulator-calcs{
-					font-weight: bold;
-					background:darken($rowAltBackgroundColor, 5%) !important;
-
-					&.tabulator-calcs-top{
-						border-bottom:2px solid $headerSeperatorColor;
-					}
-
-					&.tabulator-calcs-bottom{
-						border-top:2px solid $headerSeperatorColor;
-					}
-				}
-			}
-		}
-	}
-
-
-	//column resize handles
-	.tabulator-col-resize-handle{
-		position:absolute;
-		right:0;
-		top:0;
-		bottom:0;
-		width:5px;
-
-		&.prev{
-			left:0;
-			right:auto;
-		}
-
-		&:hover{
-			cursor:ew-resize;
-		}
-	}
-
-
-	//footer element
-	.tabulator-footer{
-		padding:5px 10px;
-		border-top:1px solid $footerSeperatorColor;
-		background-color: $footerBackgroundColor;
-		text-align:right;
-		color: $footerTextColor;
-		font-weight:bold;
-		white-space:nowrap;
-		user-select:none;
-
-		-moz-user-select: none;
-		-khtml-user-select: none;
-		-webkit-user-select: none;
-		-o-user-select: none;
-
-		.tabulator-calcs-holder{
-			box-sizing:border-box;
-			width:calc(100% + 20px);
-			margin:-5px -10px 5px -10px;
-
-			text-align: left;
-
-			background:lighten($footerBackgroundColor, 5%) !important;
-
-			border-top:3px solid $headerSeperatorColor !important;
-			border-bottom:2px solid $headerSeperatorColor !important;
-
-			.tabulator-row{
-				background:lighten($footerBackgroundColor, 5%) !important;
-
-				.tabulator-col-resize-handle{
-					display: none;
-				}
-
-				.tabulator-cell{
-					background:none;
-				}
-			}
-
-			border-bottom:1px solid $rowBorderColor;
-			border-top:1px solid $rowBorderColor;
-
-			overflow: hidden;
-
-			&:only-child{
-				margin-bottom:-5px;
-				border-bottom:none;
-				border-bottom:none !important;
-			}
-		}
-
-		//pagination container element
-		.tabulator-pages{
-			margin:0 7px;
-		}
-
-		//pagination button
-		.tabulator-page{
-			display:inline-block;
-			margin:0 2px;
-			border:1px solid $footerBorderColor;
-			border-radius:3px;
-			padding:2px 5px;
-			background:rgba(255,255,255,.2);
-			color: $footerTextColor;
-			font-family:inherit;
-			font-weight:inherit;
-			font-size:inherit;
-
-			&.active{
-				color:$footerActiveColor;
-			}
-
-			&:disabled{
-				opacity:.5;
-			}
-
-			&:not(.disabled){
-				&:hover{
-					cursor:pointer;
-					background:rgba(0,0,0,.2);
-					color:#fff;
-				}
-			}
-		}
-	}
-
-	//holding div that contains loader and covers tabulator element to prevent interaction
-	.tabulator-loader{
-		position:absolute;
-		display: flex;
-		align-items:center;
-
-		top:0;
-		left:0;
-		z-index:100;
-
-		height:100%;
-		width:100%;
-		background:rgba(0,0,0,.4);
-		text-align:center;
-
-		//loading message element
-		.tabulator-loader-msg{
-			display:inline-block;
-
-			margin:0 auto;
-			padding:10px 20px;
-
-			border-radius:10px;
-
-			background:#fff;
-			font-weight:bold;
-			font-size:16px;
-
-			//loading message
-			&.tabulator-loading{
-				border:4px solid #333;
-				color:#000;
-			}
-
-			//error message
-			&.tabulator-error{
-				border:4px solid #D00;
-				color:#590000;
-			}
-		}
-	}
-}
-
-//row element
-.tabulator-row{
-	position: relative;
-	box-sizing: border-box;
-
-	box-sizing: border-box;
-	min-height:$textSize + ($headerMargin * 2);
-
-	background-color: $handleColor;
-
-	padding-left: $handleWidth !important;
-
-	margin-bottom: 2px;
-
-	&:nth-child(even){
-		background-color: $handleColorAlt;
-
-		.tabulator-cell{
-			background-color: $rowAltBackgroundColor;
-		}
-	}
-
-	&.tabulator-selectable:hover{
-		cursor: pointer;
-
-		.tabulator-cell{
-			background-color:$rowHoverBackground;
-		}
-	}
-
-	&.tabulator-selected{
-		.tabulator-cell{
-			background-color:$rowSelectedBackground;
-		}
-	}
-
-	&.tabulator-selected:hover{
-		.tabulator-cell{
-			background-color:$rowSelectedBackgroundHover;
-			cursor: pointer;
-		}
-	}
-
-	&.tabulator-moving{
-		position: absolute;
-
-		border-top:1px solid  $rowBorderColor;
-		border-bottom:1px solid  $rowBorderColor;
-
-		pointer-events: none !important;
-		z-index:15;
-	}
-
-	//row resize handles
-	.tabulator-row-resize-handle{
-		position:absolute;
-		right:0;
-		bottom:0;
-		left:0;
-		height:5px;
-
-		&.prev{
-			top:0;
-			bottom:auto;
-		}
-
-		&:hover{
-			cursor:ns-resize;
-		}
-	}
-
-	.tabulator-frozen{
-		display: inline-block;
-		position: absolute;
-
-		background-color: inherit;
-
-		z-index: 10;
-
-		&.tabulator-frozen-left{
-			padding-left: $handleWidth;
-			border-right:2px solid $rowBorderColor;
-		}
-
-		&.tabulator-frozen-right{
-			border-left:2px solid $rowBorderColor;
-		}
-	}
-
-	.tabulator-responsive-collapse{
-		box-sizing:border-box;
-
-		padding:5px;
-
-		border-top:1px solid $rowBorderColor;
-		border-bottom:1px solid $rowBorderColor;
-
-		&:empty{
-			display:none;
-		}
-
-		table{
-			font-size:$textSize;
-
-			tr{
-				td{
-					position: relative;
-
-					&:first-of-type{
-						padding-right:10px;
-					}
-				}
-			}
-		}
-	}
-
-	//cell element
-	.tabulator-cell{
-		display:inline-block;
-		position: relative;
-		box-sizing:border-box;
-		padding:6px 4px;
-		border-right:2px solid $rowBorderColor;
-		vertical-align:middle;
-		white-space:nowrap;
-		overflow:hidden;
-		text-overflow:ellipsis;
-
-		background-color: $rowBackgroundColor;
-
-		&.tabulator-editing{
-			border:1px solid  $editBoxColor;
-			padding: 0;
-
-			input, select{
-				border:1px;
-				background:transparent;
-			}
-		}
-
-		&.tabulator-validation-fail{
-			border:1px solid $errorColor;
-			input, select{
-				border:1px;
-				background:transparent;
-
-				color: $errorColor;
-			}
-		}
-
-		//hide left resize handle on first column
-		&:first-child{
-			.tabulator-col-resize-handle.prev{
-				display: none;
-			}
-		}
-
-		//movable row handle
-		&.tabulator-row-handle{
-
-			display: inline-flex;
-			align-items:center;
-
-			-moz-user-select: none;
-			-khtml-user-select: none;
-			-webkit-user-select: none;
-			-o-user-select: none;
-
-			//handle holder
-			.tabulator-row-handle-box{
-				width:80%;
-
-				//Hamburger element
-				.tabulator-row-handle-bar{
-					width:100%;
-					height:3px;
-					margin-top:2px;
-					background:#666;
-				}
-			}
-		}
-
-		.tabulator-data-tree-branch{
-			display:inline-block;
-			vertical-align:middle;
-
-			height:9px;
-			width:7px;
-
-			margin-top:-9px;
-			margin-right:5px;
-
-			border-bottom-left-radius:1px;
-
-			border-left:2px solid $rowBorderColor;
-			border-bottom:2px solid $rowBorderColor;
-		}
-
-		.tabulator-data-tree-control{
-
-			display:inline-flex;
-			justify-content:center;
-			align-items:center;
-			vertical-align:middle;
-
-			height:11px;
-			width:11px;
-
-			margin-right:5px;
-
-			border:1px solid $rowTextColor;
-			border-radius:2px;
-			background:rgba(0, 0, 0, .1);
-
-			overflow:hidden;
-
-			&:hover{
-				cursor:pointer;
-				background:rgba(0, 0, 0, .2);
-			}
-
-			.tabulator-data-tree-control-collapse{
-				display:inline-block;
-				position: relative;
-
-				height: 7px;
-				width: 1px;
-
-				background: transparent;
-
-				&:after {
-					position: absolute;
-					content: "";
-					left: -3px;
-					top: 3px;
-
-					height: 1px;
-					width: 7px;
-
-					background: $rowTextColor;
-				}
-			}
-
-			.tabulator-data-tree-control-expand{
-				display:inline-block;
-				position: relative;
-
-				height: 7px;
-				width: 1px;
-
-				background: $rowTextColor;
-
-				&:after {
-					position: absolute;
-					content: "";
-					left: -3px;
-					top: 3px;
-
-					height: 1px;
-					width: 7px;
-
-					background: $rowTextColor;
-				}
-			}
-
-		}
-
-		.tabulator-responsive-collapse-toggle{
-			display: inline-flex;
-			align-items:center;
-			justify-content:center;
-
-			-moz-user-select: none;
-			-khtml-user-select: none;
-			-webkit-user-select: none;
-			-o-user-select: none;
-
-			height:15px;
-			width:15px;
-
-			border-radius:20px;
-			background:#666;
-
-			color:$rowBackgroundColor;
-			font-weight:bold;
-			font-size:1.1em;
-
-			&:hover{
-				opacity:.7;
-			}
-
-			&.open{
-				.tabulator-responsive-collapse-toggle-close{
-					display:initial;
-				}
-
-				.tabulator-responsive-collapse-toggle-open{
-					display:none;
-				}
-			}
-
-			.tabulator-responsive-collapse-toggle-close{
-				display:none;
-			}
-		}
-	}
-
-	//row grouping element
-	&.tabulator-group{
-
-		box-sizing:border-box;
-		border-bottom:2px solid $primary;
-		border-top:2px solid $primary;
-		padding:5px;
-		padding-left:10px;
-		background:lighten($primary, 20%);
-		font-weight:bold;
-		color:fff;
-		margin-bottom: 2px;
-
-		min-width: 100%;
-
-		&:hover{
-			cursor:pointer;
-			background-color:rgba(0,0,0,.1);
-		}
-
-
-		&.tabulator-group-visible{
-			.tabulator-arrow{
-				margin-right:10px;
-				border-left: 6px solid transparent;
-				border-right: 6px solid transparent;
-				border-top: 6px solid $sortArrowActive;
-				border-bottom: 0;
-			}
-		}
-
-		&.tabulator-group-level-1{
-			.tabulator-arrow{
-				margin-left:20px;
-			}
-		}
-
-		&.tabulator-group-level-2{
-			.tabulator-arrow{
-				margin-left:40px;
-			}
-		}
-
-		&.tabulator-group-level-3{
-			.tabulator-arrow{
-				margin-left:60px;
-			}
-		}
-
-		&.tabulator-group-level-4{
-			.tabulator-arrow{
-				margin-left:80px;
-			}
-		}
-
-		&.tabulator-group-level-5{
-			.tabulator-arrow{
-				margin-left:100px;
-			}
-		}
-
-		//sorting arrow
-		.tabulator-arrow{
-			display: inline-block;
-			width: 0;
-			height: 0;
-			margin-right:16px;
-			border-top: 6px solid transparent;
-			border-bottom: 6px solid transparent;
-			border-right: 0;
-			border-left: 6px solid $sortArrowActive;
-			vertical-align:middle;
-		}
-
-		span{
-			margin-left:10px;
-			color:$primary;
-		}
-	}
-}
-
-.tabulator-edit-select-list{
-	position: absolute;
-	display:inline-block;
-	box-sizing:border-box;
-
-	max-height:200px;
-
-	background:$rowBackgroundColor;
-	border:1px solid $rowBorderColor;
-
-	font-size:$textSize;
-
-	overflow-y:auto;
-	-webkit-overflow-scrolling: touch;
-
-	z-index: 10000;
-
-	.tabulator-edit-select-list-item{
-		padding:4px;
-
-		color:$rowTextColor;
-
-		&.active{
-			color:$rowBackgroundColor;
-			background:$editBoxColor;
-		}
-
-		&:hover{
-			cursor:pointer;
-
-			color:$rowBackgroundColor;
-			background:$editBoxColor;
-		}
-	}
-
-	.tabulator-edit-select-list-group{
-		border-bottom:1px solid $rowBorderColor;
-
-		padding:4px;
-		padding-top:6px;
-
-		color:$rowTextColor;
-		font-weight:bold;
-	}
-}
\ No newline at end of file
diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator_simple.scss b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator_simple.scss
deleted file mode 100644
index 1174074f58..0000000000
--- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator_simple.scss
+++ /dev/null
@@ -1,951 +0,0 @@
-
-//Main Theme Variables
-$backgroundColor: #fff !default; //background color of tabulator
-$borderColor:#999 !default; //border to tabulator
-$textSize:14px !default; //table text size
-
-//header themeing
-$headerBackgroundColor:#fff !default; //border to tabulator
-$headerTextColor:#555 !default; //header text colour
-$headerBorderColor:#ddd !default;  //header border color
-$headerSeperatorColor:#999 !default; //header bottom seperator color
-$headerMargin:4px !default; //padding round header
-
-//column header arrows
-$sortArrowActive: #666 !default;
-$sortArrowInactive: #bbb !default;
-
-//row themeing
-$rowBackgroundColor:#fff !default; //table row background color
-$rowAltBackgroundColor:#fff !default; //table row background color
-$rowBorderColor:#ddd !default; //table border color
-$rowTextColor:#333 !default; //table text color
-$rowHoverBackground:#bbb !default; //row background color on hover
-
-$rowSelectedBackground: #9ABCEA !default; //row background color when selected
-$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered
-
-
-$editBoxColor:#1D68CD !default; //border color for edit boxes
-$errorColor:#dd0000 !default; //error indication
-
-//footer themeing
-$footerBackgroundColor:#fff !default; //border to tabulator
-$footerTextColor:#555 !default; //footer text colour
-$footerBorderColor:#aaa !default; //footer border color
-$footerSeperatorColor:#999 !default; //footer bottom seperator color
-$footerActiveColor:#d00 !default; //footer bottom active text color
-
-
-//Tabulator Containing Element
-.tabulator{
-	position: relative;
-	background-color: $backgroundColor;
-	overflow:hidden;
-	font-size:$textSize;
-	text-align: left;
-
-	-webkit-transform: translatez(0);
-	-moz-transform: translatez(0);
-	-ms-transform: translatez(0);
-	-o-transform: translatez(0);
-	transform: translatez(0);
-
-	&[tabulator-layout="fitDataFill"]{
-		.tabulator-tableHolder{
-			.tabulator-table{
-				min-width:100%;
-			}
-		}
-	}
-
-	&.tabulator-block-select{
-		user-select: none;
-	}
-
-	//column header containing element
-	.tabulator-header{
-		position:relative;
-		box-sizing: border-box;
-
-		width:100%;
-
-		border-bottom:1px solid $headerSeperatorColor;
-		background-color: $headerBackgroundColor;
-		color: $headerTextColor;
-		font-weight:bold;
-
-		white-space: nowrap;
-		overflow:hidden;
-
-		-moz-user-select: none;
-		-khtml-user-select: none;
-		-webkit-user-select: none;
-		-o-user-select: none;
-
-		//individual column header element
-		.tabulator-col{
-			display:inline-block;
-			position:relative;
-			box-sizing:border-box;
-			border-right:1px solid $headerBorderColor;
-			background-color: $headerBackgroundColor;
-			text-align:left;
-			vertical-align: bottom;
-			overflow: hidden;
-
-			&.tabulator-moving{
-				position: absolute;
-				border:1px solid  $headerSeperatorColor;
-				background:darken($headerBackgroundColor, 10%);
-				pointer-events: none;
-			}
-
-			//hold content of column header
-			.tabulator-col-content{
-				box-sizing:border-box;
-				position: relative;
-				padding:4px;
-
-				//hold title of column header
-				.tabulator-col-title{
-					box-sizing:border-box;
-					width: 100%;
-
-					white-space: nowrap;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					vertical-align:bottom;
-
-					//element to hold title editor
-					.tabulator-title-editor{
-						box-sizing: border-box;
-						width: 100%;
-
-						border:1px solid #999;
-
-						padding:1px;
-
-						background: #fff;
-					}
-				}
-
-				//column sorter arrow
-				.tabulator-arrow{
-					display: inline-block;
-					position: absolute;
-					top:9px;
-					right:8px;
-					width: 0;
-					height: 0;
-					border-left: 6px solid transparent;
-					border-right: 6px solid transparent;
-					border-bottom: 6px solid $sortArrowInactive;
-				}
-
-			}
-
-			//complex header column group
-			&.tabulator-col-group{
-
-				//gelement to hold sub columns in column group
-				.tabulator-col-group-cols{
-					position:relative;
-					display: flex;
-
-					border-top:1px solid $headerBorderColor;
-					overflow: hidden;
-
-					.tabulator-col:last-child{
-						margin-right:-1px;
-					}
-				}
-			}
-
-
-			//hide left resize handle on first column
-			&:first-child{
-				.tabulator-col-resize-handle.prev{
-					display: none;
-				}
-			}
-
-			//placeholder element for sortable columns
-			&.ui-sortable-helper{
-				position: absolute;
-				background-color:darken($headerBackgroundColor, 10%) !important;
-				border:1px solid $headerBorderColor;
-			}
-
-			//header filter containing element
-			.tabulator-header-filter{
-				position: relative;
-				box-sizing: border-box;
-				margin-top:2px;
-				width:100%;
-				text-align: center;
-
-				//styling adjustment for inbuilt editors
-				textarea{
-					height:auto !important;
-				}
-
-				svg{
-					margin-top: 3px;
-				}
-
-				input{
-					&::-ms-clear {
-					  width : 0;
-					  height: 0;
-					}
-				}
-			}
-
-
-			//styling child elements for sortable columns
-			&.tabulator-sortable{
-				.tabulator-col-title{
-					padding-right:25px;
-				}
-
-				&:hover{
-					cursor:pointer;
-					background-color:darken($headerBackgroundColor, 10%);
-				}
-
-
-				&[aria-sort="none"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: none;
-						border-bottom: 6px solid $sortArrowInactive;
-					}
-				}
-
-				&[aria-sort="asc"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: none;
-						border-bottom: 6px solid $sortArrowActive;
-					}
-				}
-
-				&[aria-sort="desc"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: 6px solid $sortArrowActive;
-						border-bottom: none;
-					}
-				}
-			}
-
-			&.tabulator-col-vertical{
-				.tabulator-col-content{
-					.tabulator-col-title{
-						writing-mode: vertical-rl;
-						text-orientation: mixed;
-
-						display:flex;
-						align-items:center;
-						justify-content:center;
-					}
-				}
-
-				&.tabulator-col-vertical-flip{
-					.tabulator-col-title{
-						transform: rotate(180deg);
-					}
-				}
-
-				&.tabulator-sortable{
-					.tabulator-col-title{
-						padding-right:0;
-						padding-top:20px;
-					}
-
-					&.tabulator-col-vertical-flip{
-						.tabulator-col-title{
-							padding-right:0;
-							padding-bottom:20px;
-						}
-
-					}
-
-					.tabulator-arrow{
-						right:calc(50% - 6px);
-					}
-				}
-			}
-
-		}
-
-		.tabulator-frozen{
-			display: inline-block;
-			position: absolute;
-
-			// background-color: inherit;
-
-			z-index: 10;
-
-			&.tabulator-frozen-left{
-				border-right:2px solid $rowBorderColor;
-			}
-
-			&.tabulator-frozen-right{
-				border-left:2px solid $rowBorderColor;
-			}
-		}
-
-		.tabulator-calcs-holder{
-			box-sizing:border-box;
-			min-width:400%;
-
-			background:darken($headerBackgroundColor, 5%) !important;
-
-			.tabulator-row{
-				background:darken($headerBackgroundColor, 5%) !important;
-
-				.tabulator-col-resize-handle{
-					display: none;
-				}
-			}
-
-			border-top:1px solid $rowBorderColor;
-			border-bottom:1px solid $headerSeperatorColor;
-
-			overflow: hidden;
-		}
-
-		.tabulator-frozen-rows-holder{
-			min-width:400%;
-
-			&:empty{
-				display: none;
-			}
-		}
-	}
-
-
-
-	//scrolling element to hold table
-	.tabulator-tableHolder{
-		position:relative;
-		width:100%;
-		white-space: nowrap;
-		overflow:auto;
-		-webkit-overflow-scrolling: touch;
-
-		&:focus{
-			outline: none;
-		}
-
-		//default placeholder element
-		.tabulator-placeholder{
-			box-sizing:border-box;
-			display: flex;
-			align-items:center;
-
-			&[tabulator-render-mode="virtual"]{
-				position: absolute;
-				top:0;
-				left:0;
-				height:100%;
-			}
-
-			width:100%;
-
-			span{
-				display: inline-block;
-
-				margin:0 auto;
-				padding:10px;
-
-				color:#000;
-				font-weight: bold;
-				font-size: 20px;
-			}
-		}
-
-		//element to hold table rows
-		.tabulator-table{
-			position:relative;
-			display:inline-block;
-			background-color:$rowBackgroundColor;
-			white-space: nowrap;
-			overflow:visible;
-			color:$rowTextColor;
-
-			.tabulator-row{
-				&.tabulator-calcs{
-					font-weight: bold;
-					background:darken($rowAltBackgroundColor, 5%) !important;
-
-					&.tabulator-calcs-top{
-						border-bottom:2px solid $rowBorderColor;
-					}
-
-					&.tabulator-calcs-bottom{
-						border-top:2px solid $rowBorderColor;
-					}
-				}
-			}
-
-		}
-	}
-
-	//column resize handles
-	.tabulator-col-resize-handle{
-		position:absolute;
-		right:0;
-		top:0;
-		bottom:0;
-		width:5px;
-
-		&.prev{
-			left:0;
-			right:auto;
-		}
-
-		&:hover{
-			cursor:ew-resize;
-		}
-	}
-
-
-	//footer element
-	.tabulator-footer{
-		padding:5px 10px;
-		border-top:1px solid $footerSeperatorColor;
-		background-color: $footerBackgroundColor;
-		text-align:right;
-		color: $footerTextColor;
-		font-weight:bold;
-		white-space:nowrap;
-		user-select:none;
-
-		-moz-user-select: none;
-		-khtml-user-select: none;
-		-webkit-user-select: none;
-		-o-user-select: none;
-
-		.tabulator-calcs-holder{
-			box-sizing:border-box;
-			width:calc(100% + 20px);
-			margin:-5px -10px 5px -10px;
-
-			text-align: left;
-
-			background:darken($footerBackgroundColor, 5%) !important;
-
-			.tabulator-row{
-				background:darken($footerBackgroundColor, 5%) !important;
-
-				.tabulator-col-resize-handle{
-					display: none;
-				}
-			}
-
-			border-bottom:1px solid $footerBackgroundColor;
-			border-top:1px solid $rowBorderColor;
-
-			overflow: hidden;
-
-			&:only-child{
-				margin-bottom:-5px;
-				border-bottom:none;
-			}
-		}
-
-		//pagination container element
-		.tabulator-pages{
-			margin:0 7px;
-		}
-
-		//pagination button
-		.tabulator-page{
-			display:inline-block;
-			margin:0 2px;
-			border:1px solid $footerBorderColor;
-			border-radius:3px;
-			padding:2px 5px;
-			background:rgba(255,255,255,.2);
-			color: $footerTextColor;
-			font-family:inherit;
-			font-weight:inherit;
-			font-size:inherit;
-
-			&.active{
-				color:$footerActiveColor;
-			}
-
-			&:disabled{
-				opacity:.5;
-			}
-
-			&:not(.disabled){
-				&:hover{
-					cursor:pointer;
-					background:rgba(0,0,0,.2);
-					color:#fff;
-				}
-			}
-		}
-	}
-
-	//holding div that contains loader and covers tabulator element to prevent interaction
-	.tabulator-loader{
-		position:absolute;
-		display: flex;
-		align-items:center;
-
-		top:0;
-		left:0;
-		z-index:100;
-
-		height:100%;
-		width:100%;
-		background:rgba(0,0,0,.4);
-		text-align:center;
-
-		//loading message element
-		.tabulator-loader-msg{
-			display:inline-block;
-
-			margin:0 auto;
-			padding:10px 20px;
-
-			border-radius:10px;
-
-			background:#fff;
-			font-weight:bold;
-			font-size:16px;
-
-			//loading message
-			&.tabulator-loading{
-				border:4px solid #333;
-				color:#000;
-			}
-
-			//error message
-			&.tabulator-error{
-				border:4px solid #D00;
-				color:#590000;
-			}
-		}
-	}
-}
-
-//row element
-.tabulator-row{
-	position: relative;
-	box-sizing: border-box;
-
-	min-height:$textSize + ($headerMargin * 2);
-	background-color: $rowBackgroundColor;
-	border-bottom:1px solid $rowBorderColor;
-
-	&:nth-child(even){
-		background-color: $rowAltBackgroundColor;
-	}
-
-	&.tabulator-selectable:hover{
-		background-color:$rowHoverBackground;
-		cursor: pointer;
-	}
-
-	&.tabulator-selected{
-		background-color:$rowSelectedBackground;
-	}
-
-	&.tabulator-selected:hover{
-		background-color:$rowSelectedBackgroundHover;
-		cursor: pointer;
-	}
-
-	&.tabulator-moving{
-		position: absolute;
-
-		border-top:1px solid  $rowBorderColor;
-		border-bottom:1px solid  $rowBorderColor;
-
-		pointer-events: none !important;
-		z-index:15;
-	}
-
-	//row resize handles
-	.tabulator-row-resize-handle{
-		position:absolute;
-		right:0;
-		bottom:0;
-		left:0;
-		height:5px;
-
-		&.prev{
-			top:0;
-			bottom:auto;
-		}
-
-		&:hover{
-			cursor:ns-resize;
-		}
-	}
-
-	.tabulator-frozen{
-		display: inline-block;
-		position: absolute;
-
-		background-color: inherit;
-
-		z-index: 10;
-
-		&.tabulator-frozen-left{
-			border-right:2px solid $rowBorderColor;
-		}
-
-		&.tabulator-frozen-right{
-			border-left:2px solid $rowBorderColor;
-		}
-	}
-
-	.tabulator-responsive-collapse{
-		box-sizing:border-box;
-
-		padding:5px;
-
-		border-top:1px solid $rowBorderColor;
-		border-bottom:1px solid $rowBorderColor;
-
-		&:empty{
-			display:none;
-		}
-
-		table{
-			font-size:$textSize;
-
-			tr{
-				td{
-					position: relative;
-
-					&:first-of-type{
-						padding-right:10px;
-					}
-				}
-			}
-		}
-	}
-
-	//cell element
-	.tabulator-cell{
-		display:inline-block;
-		position: relative;
-		box-sizing:border-box;
-		padding:4px;
-		border-right:1px solid $rowBorderColor;
-		vertical-align:middle;
-		white-space:nowrap;
-		overflow:hidden;
-		text-overflow:ellipsis;
-
-		&:last-of-type{
-			border-right: none;
-		}
-
-		&.tabulator-editing{
-			border:1px solid  $editBoxColor;
-			padding: 0;
-
-			input, select{
-				border:1px;
-				background:transparent;
-			}
-		}
-
-		&.tabulator-validation-fail{
-			border:1px solid $errorColor;
-			input, select{
-				border:1px;
-				background:transparent;
-
-				color: $errorColor;
-			}
-		}
-
-		//hide left resize handle on first column
-		&:first-child{
-			.tabulator-col-resize-handle.prev{
-				display: none;
-			}
-		}
-
-		//movable row handle
-		&.tabulator-row-handle{
-
-			display: inline-flex;
-			align-items:center;
-
-			-moz-user-select: none;
-			-khtml-user-select: none;
-			-webkit-user-select: none;
-			-o-user-select: none;
-
-			//handle holder
-			.tabulator-row-handle-box{
-				width:80%;
-
-				//Hamburger element
-				.tabulator-row-handle-bar{
-					width:100%;
-					height:3px;
-					margin-top:2px;
-					background:#666;
-				}
-			}
-		}
-
-		.tabulator-data-tree-branch{
-			display:inline-block;
-			vertical-align:middle;
-
-			height:9px;
-			width:7px;
-
-			margin-top:-9px;
-			margin-right:5px;
-
-			border-bottom-left-radius:1px;
-
-			border-left:2px solid $rowBorderColor;
-			border-bottom:2px solid $rowBorderColor;
-		}
-
-		.tabulator-data-tree-control{
-
-			display:inline-flex;
-			justify-content:center;
-			align-items:center;
-			vertical-align:middle;
-
-			height:11px;
-			width:11px;
-
-			margin-right:5px;
-
-			border:1px solid $rowTextColor;
-			border-radius:2px;
-			background:rgba(0, 0, 0, .1);
-
-			overflow:hidden;
-
-			&:hover{
-				cursor:pointer;
-				background:rgba(0, 0, 0, .2);
-			}
-
-			.tabulator-data-tree-control-collapse{
-				display:inline-block;
-				position: relative;
-
-				height: 7px;
-				width: 1px;
-
-				background: transparent;
-
-				&:after {
-					position: absolute;
-					content: "";
-					left: -3px;
-					top: 3px;
-
-					height: 1px;
-					width: 7px;
-
-					background: $rowTextColor;
-				}
-			}
-
-			.tabulator-data-tree-control-expand{
-				display:inline-block;
-				position: relative;
-
-				height: 7px;
-				width: 1px;
-
-				background: $rowTextColor;
-
-				&:after {
-					position: absolute;
-					content: "";
-					left: -3px;
-					top: 3px;
-
-					height: 1px;
-					width: 7px;
-
-					background: $rowTextColor;
-				}
-			}
-
-		}
-
-		.tabulator-responsive-collapse-toggle{
-			display: inline-flex;
-			align-items:center;
-			justify-content:center;
-
-			-moz-user-select: none;
-			-khtml-user-select: none;
-			-webkit-user-select: none;
-			-o-user-select: none;
-
-			height:15px;
-			width:15px;
-
-			border-radius:20px;
-			background:#666;
-
-			color:$rowBackgroundColor;
-			font-weight:bold;
-			font-size:1.1em;
-
-			&:hover{
-				opacity:.7;
-			}
-
-			&.open{
-				.tabulator-responsive-collapse-toggle-close{
-					display:initial;
-				}
-
-				.tabulator-responsive-collapse-toggle-open{
-					display:none;
-				}
-			}
-
-			.tabulator-responsive-collapse-toggle-close{
-				display:none;
-			}
-		}
-	}
-
-	//row grouping element
-	&.tabulator-group{
-
-		box-sizing:border-box;
-		border-bottom:1px solid #999;
-		border-right:1px solid $rowBorderColor;
-		border-top:1px solid #999;
-		padding:5px;
-		padding-left:10px;
-		background:#fafafa;
-		font-weight:bold;
-
-		min-width: 100%;
-
-		&:hover{
-			cursor:pointer;
-			background-color:rgba(0,0,0,.1);
-		}
-
-		&.tabulator-group-visible{
-			.tabulator-arrow{
-				margin-right:10px;
-				border-left: 6px solid transparent;
-				border-right: 6px solid transparent;
-				border-top: 6px solid $sortArrowActive;
-				border-bottom: 0;
-			}
-		}
-
-		&.tabulator-group-level-1{
-			.tabulator-arrow{
-				margin-left:20px;
-			}
-		}
-
-		&.tabulator-group-level-2{
-			.tabulator-arrow{
-				margin-left:40px;
-			}
-		}
-
-		&.tabulator-group-level-3{
-			.tabulator-arrow{
-				margin-left:60px;
-			}
-		}
-
-		&.tabulator-group-level-4{
-			.tabulator-arrow{
-				margin-left:80px;
-			}
-		}
-
-		&.tabulator-group-level-5{
-			.tabulator-arrow{
-				margin-left:100px;
-			}
-		}
-
-		//sorting arrow
-		.tabulator-arrow{
-			display: inline-block;
-			width: 0;
-			height: 0;
-			margin-right:16px;
-			border-top: 6px solid transparent;
-			border-bottom: 6px solid transparent;
-			border-right: 0;
-			border-left: 6px solid $sortArrowActive;
-			vertical-align:middle;
-		}
-
-		span{
-			margin-left:10px;
-			color:#666;
-		}
-	}
-}
-
-.tabulator-edit-select-list{
-	position: absolute;
-	display:inline-block;
-	box-sizing:border-box;
-
-	max-height:200px;
-
-	background:$rowBackgroundColor;
-	border:1px solid $rowBorderColor;
-
-	font-size:$textSize;
-
-	overflow-y:auto;
-	-webkit-overflow-scrolling: touch;
-
-	z-index: 10000;
-
-	.tabulator-edit-select-list-item{
-		padding:4px;
-
-		color:$rowTextColor;
-
-		&.active{
-			color:$rowBackgroundColor;
-			background:$editBoxColor;
-		}
-
-		&:hover{
-			cursor:pointer;
-
-			color:$rowBackgroundColor;
-			background:$editBoxColor;
-		}
-	}
-
-	.tabulator-edit-select-list-group{
-		border-bottom:1px solid $rowBorderColor;
-
-		padding:4px;
-		padding-top:6px;
-
-		color:$rowTextColor;
-		font-weight:bold;
-	}
-}
\ No newline at end of file
diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator_site.scss b/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator_site.scss
deleted file mode 100644
index cdf30ccae7..0000000000
--- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/src/scss/tabulator_site.scss
+++ /dev/null
@@ -1,962 +0,0 @@
-
-//Main Theme Variables
-$backgroundColor: #fff !default; //background color of tabulator
-$borderColor:#222 !default; //border to tabulator
-$textSize:14px !default; //table text size
-
-//header themeing
-$headerBackgroundColor:#222 !default; //border to tabulator
-$headerTextColor:#fff !default; //header text colour
-$headerBorderColor:#aaa !default;  //header border color
-$headerSeperatorColor:#3FB449 !default; //header bottom seperator color
-$headerMargin:4px !default; //padding round header
-
-//column header arrows
-$sortArrowActive: #3FB449 !default;
-$sortArrowInactive: #bbb !default;
-
-//row themeing
-$rowBackgroundColor:#fff !default; //table row background color
-$rowAltBackgroundColor:#EFEFEF !default; //table row background color
-$rowBorderColor:#aaa !default; //table border color
-$rowTextColor:#333 !default; //table text color
-$rowHoverBackground:#bbb !default; //row background color on hover
-
-$rowSelectedBackground: #9ABCEA !default; //row background color when selected
-$rowSelectedBackgroundHover: #769BCC !default;//row background color when selected and hovered
-
-$editBoxColor:#1D68CD !default; //border color for edit boxes
-$errorColor:#dd0000 !default; //error indication
-
-//footer themeing
-$footerBackgroundColor:#222 !default; //border to tabulator
-$footerTextColor:#222 !default; //footer text colour
-$footerBorderColor:#aaa !default; //footer border color
-$footerSeperatorColor:#3FB449 !default; //footer bottom seperator color
-$footerActiveColor:$footerSeperatorColor !default; //footer bottom active text color
-
-
-//Tabulator Containing Element
-.tabulator{
-	position: relative;
-
-	border-bottom: 5px solid $borderColor;
-
-	background-color: $backgroundColor;
-
-	font-size:$textSize;
-	text-align: left;
-	overflow:hidden;
-
-	-webkit-transform: translatez(0);
-	-moz-transform: translatez(0);
-	-ms-transform: translatez(0);
-	-o-transform: translatez(0);
-	transform: translatez(0);
-
-	&[tabulator-layout="fitDataFill"]{
-		.tabulator-tableHolder{
-			.tabulator-table{
-				min-width:100%;
-			}
-		}
-	}
-
-	&[tabulator-layout="fitColumns"]{
-		.tabulator-row{
-			.tabulator-cell{
-				&:last-of-type{
-					border-right: none;
-				}
-			}
-		}
-	}
-
-
-	&.tabulator-block-select{
-		user-select: none;
-	}
-
-	//column header containing element
-	.tabulator-header{
-		position:relative;
-		box-sizing: border-box;
-
-		width:100%;
-
-		border-bottom:3px solid $headerSeperatorColor;
-		background-color: $headerBackgroundColor;
-		color: $headerTextColor;
-		font-weight:bold;
-
-		white-space: nowrap;
-		overflow:hidden;
-
-		-moz-user-select: none;
-		-khtml-user-select: none;
-		-webkit-user-select: none;
-		-o-user-select: none;
-
-		//individual column header element
-		.tabulator-col{
-			display:inline-block;
-
-			position:relative;
-			box-sizing:border-box;
-			border-right:1px solid $headerBorderColor;
-			background-color: $headerBackgroundColor;
-			text-align:left;
-			vertical-align: bottom;
-			overflow: hidden;
-
-			&.tabulator-moving{
-				position: absolute;
-				border:1px solid  $headerSeperatorColor;
-				background:darken($headerBackgroundColor, 10%);
-				pointer-events: none;
-			}
-
-			//hold content of column header
-			.tabulator-col-content{
-				box-sizing:border-box;
-				position: relative;
-				padding:8px;
-
-				//hold title of column header
-				.tabulator-col-title{
-					box-sizing:border-box;
-					width: 100%;
-
-					white-space: nowrap;
-					overflow: hidden;
-					text-overflow: ellipsis;
-					vertical-align:bottom;
-
-					//element to hold title editor
-					.tabulator-title-editor{
-						box-sizing: border-box;
-						width: 100%;
-
-						border:1px solid #999;
-
-						padding:1px;
-
-						background: #fff;
-					}
-				}
-
-				//column sorter arrow
-				.tabulator-arrow{
-					display: inline-block;
-					position: absolute;
-					top:14px;
-					right:8px;
-					width: 0;
-					height: 0;
-					border-left: 6px solid transparent;
-					border-right: 6px solid transparent;
-					border-bottom: 6px solid $sortArrowInactive;
-				}
-
-			}
-
-			//complex header column group
-			&.tabulator-col-group{
-
-				//gelement to hold sub columns in column group
-				.tabulator-col-group-cols{
-					position:relative;
-					display: flex;
-
-					border-top:1px solid $headerBorderColor;
-					overflow: hidden;
-
-					.tabulator-col:last-child{
-						margin-right:-1px;
-					}
-				}
-			}
-
-			//hide left resize handle on first column
-			&:first-child{
-				.tabulator-col-resize-handle.prev{
-					display: none;
-				}
-			}
-
-			//placeholder element for sortable columns
-			&.ui-sortable-helper{
-				position: absolute;
-				background-color: $headerBackgroundColor !important;
-				border:1px solid $headerBorderColor;
-			}
-
-			//header filter containing element
-			.tabulator-header-filter{
-				position: relative;
-				box-sizing: border-box;
-				margin-top:2px;
-				width:100%;
-				text-align: center;
-
-				//styling adjustment for inbuilt editors
-				textarea{
-					height:auto !important;
-				}
-
-				svg{
-					margin-top: 3px;
-				}
-
-				input{
-					&::-ms-clear {
-					  width : 0;
-					  height: 0;
-					}
-				}
-			}
-
-			//styling child elements for sortable columns
-			&.tabulator-sortable{
-				.tabulator-col-title{
-					padding-right:25px;
-				}
-
-				&:hover{
-					cursor:pointer;
-					background-color:darken($headerBackgroundColor, 10%);
-				}
-
-				&[aria-sort="none"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: none;
-						border-bottom: 6px solid $sortArrowInactive;
-					}
-				}
-
-				&[aria-sort="asc"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: none;
-						border-bottom: 6px solid $sortArrowActive;
-					}
-				}
-
-				&[aria-sort="desc"]{
-					.tabulator-col-content .tabulator-arrow{
-						border-top: 6px solid $sortArrowActive;
-						border-bottom: none;
-					}
-				}
-			}
-
-			&.tabulator-col-vertical{
-				.tabulator-col-content{
-					.tabulator-col-title{
-						writing-mode: vertical-rl;
-						text-orientation: mixed;
-
-						display:flex;
-						align-items:center;
-						justify-content:center;
-					}
-				}
-
-				&.tabulator-col-vertical-flip{
-					.tabulator-col-title{
-						transform: rotate(180deg);
-					}
-				}
-
-				&.tabulator-sortable{
-					.tabulator-col-title{
-						padding-right:0;
-						padding-top:20px;
-					}
-
-					&.tabulator-col-vertical-flip{
-						.tabulator-col-title{
-							padding-right:0;
-							padding-bottom:20px;
-						}
-
-					}
-
-					.tabulator-arrow{
-						right:calc(50% - 6px);
-					}
-				}
-			}
-
-		}
-
-		.tabulator-frozen{
-			display: inline-block;
-			position: absolute;
-
-			// background-color: inherit;
-
-			z-index: 10;
-
-			&.tabulator-frozen-left{
-				border-right:2px solid $rowBorderColor;
-			}
-
-			&.tabulator-frozen-right{
-				border-left:2px solid $rowBorderColor;
-			}
-		}
-
-		.tabulator-calcs-holder{
-			box-sizing:border-box;
-			min-width:400%;
-
-			background:lighten($headerBackgroundColor, 10%) !important;
-
-			.tabulator-row{
-				background:lighten($headerBackgroundColor, 10%) !important;
-
-				.tabulator-col-resize-handle{
-					display: none;
-				}
-			}
-
-			border-top:1px solid $rowBorderColor;
-			// border-bottom:1px solid $headerBorderColor;
-
-			overflow: hidden;
-		}
-
-		.tabulator-frozen-rows-holder{
-			min-width:400%;
-
-			&:empty{
-				display: none;
-			}
-		}
-	}
-
-	//scrolling element to hold table
-	.tabulator-tableHolder{
-		position:relative;
-		width:100%;
-		white-space: nowrap;
-		overflow:auto;
-		-webkit-overflow-scrolling: touch;
-
-		&:focus{
-			outline: none;
-		}
-
-		//default placeholder element
-		.tabulator-placeholder{
-			box-sizing:border-box;
-			display: flex;
-			align-items:center;
-
-			&[tabulator-render-mode="virtual"]{
-				position: absolute;
-				top:0;
-				left:0;
-				height:100%;
-			}
-
-			width:100%;
-
-			span{
-				display: inline-block;
-
-				margin:0 auto;
-				padding:10px;
-
-				color:$headerSeperatorColor;
-				font-weight: bold;
-				font-size: 20px;
-			}
-		}
-
-		//element to hold table rows
-		.tabulator-table{
-			position:relative;
-			display:inline-block;
-			background-color:$rowBackgroundColor;
-			white-space: nowrap;
-			overflow:visible;
-			color:$rowTextColor;
-
-			.tabulator-row{
-				&.tabulator-calcs{
-					font-weight: bold;
-					background:lighten($headerBackgroundColor, 15%) !important;
-					color:$headerTextColor;
-				}
-			}
-		}
-	}
-
-
-	//footer element
-	.tabulator-footer{
-		padding:5px 10px;
-		padding-top:8px;
-		border-top:3px solid $footerSeperatorColor;
-		background-color: $footerBackgroundColor;
-		text-align:right;
-		color: $footerTextColor;
-		font-weight:bold;
-		white-space:nowrap;
-		user-select:none;
-
-		-moz-user-select: none;
-		-khtml-user-select: none;
-		-webkit-user-select: none;
-		-o-user-select: none;
-
-		.tabulator-calcs-holder{
-			box-sizing:border-box;
-			width:calc(100% + 20px);
-			margin:-8px -10px 8px -10px;
-
-			text-align: left;
-
-			background:lighten($footerBackgroundColor, 10%) !important;
-
-			.tabulator-row{
-				background:lighten($footerBackgroundColor, 10%) !important;
-				color:$headerTextColor !important;
-
-				.tabulator-col-resize-handle{
-					display: none;
-				}
-			}
-
-			// border-top:1px solid $rowBorderColor;
-			border-bottom:1px solid $rowBorderColor;
-
-			overflow: hidden;
-
-			&:only-child{
-				margin-bottom:-5px;
-				border-bottom:none;
-			}
-		}
-
-		//pagination container element
-		.tabulator-pages{
-			margin:0 7px;
-		}
-
-		//pagination button
-		.tabulator-page{
-			display:inline-block;
-
-			margin:0 2px;
-			padding:2px 5px;
-
-			border:1px solid $footerBorderColor;
-			border-radius:3px;
-
-			background:#fff;
-
-			color: $footerTextColor;
-			font-family:inherit;
-			font-weight:inherit;
-			font-size:inherit;
-
-			&.active{
-				color:$footerActiveColor;
-			}
-
-			&:disabled{
-				opacity:.5;
-			}
-
-			&:not(.disabled){
-				&:hover{
-					cursor:pointer;
-					background:rgba(0,0,0,.2);
-					color:#fff;
-				}
-			}
-		}
-	}
-
-	//column resize handles
-	.tabulator-col-resize-handle{
-		position:absolute;
-		right:0;
-		top:0;
-		bottom:0;
-		width:5px;
-
-		&.prev{
-			left:0;
-			right:auto;
-		}
-
-		&:hover{
-			cursor:ew-resize;
-		}
-	}
-
-
-	//holding div that contains loader and covers tabulator element to prevent interaction
-	.tabulator-loader{
-		position:absolute;
-		display: flex;
-		align-items:center;
-
-		top:0;
-		left:0;
-		z-index:100;
-
-		height:100%;
-		width:100%;
-		background:rgba(0,0,0,.4);
-		text-align:center;
-
-		//loading message element
-		.tabulator-loader-msg{
-			display:inline-block;
-
-			margin:0 auto;
-			padding:10px 20px;
-
-			border-radius:10px;
-
-			background:#fff;
-			font-weight:bold;
-			font-size:16px;
-
-			//loading message
-			&.tabulator-loading{
-				border:4px solid #333;
-				color:#000;
-			}
-
-			//error message
-			&.tabulator-error{
-				border:4px solid #D00;
-				color:#590000;
-			}
-		}
-	}
-}
-
-//row element
-.tabulator-row{
-	position: relative;
-	box-sizing: border-box;
-	min-height:$textSize + ($headerMargin * 2);
-	background-color: $rowBackgroundColor;
-
-
-	&.tabulator-row-even{
-		background-color: $rowAltBackgroundColor;
-	}
-
-	&.tabulator-selectable:hover{
-		background-color:$rowHoverBackground;
-		cursor: pointer;
-	}
-
-	&.tabulator-selected{
-		background-color:$rowSelectedBackground;
-	}
-
-	&.tabulator-selected:hover{
-		background-color:$rowSelectedBackgroundHover;
-		cursor: pointer;
-	}
-
-	&.tabulator-row-moving{
-		border:1px solid #000;
-		background:#fff;
-	}
-
-	&.tabulator-moving{
-		position: absolute;
-
-		border-top:1px solid  $rowBorderColor;
-		border-bottom:1px solid  $rowBorderColor;
-
-		pointer-events: none !important;
-		z-index:15;
-	}
-
-	//row resize handles
-	.tabulator-row-resize-handle{
-		position:absolute;
-		right:0;
-		bottom:0;
-		left:0;
-		height:5px;
-
-		&.prev{
-			top:0;
-			bottom:auto;
-		}
-
-		&:hover{
-			cursor:ns-resize;
-		}
-	}
-
-	.tabulator-frozen{
-		display: inline-block;
-		position: absolute;
-
-		background-color: inherit;
-
-		z-index: 10;
-
-		&.tabulator-frozen-left{
-			border-right:2px solid $rowBorderColor;
-		}
-
-		&.tabulator-frozen-right{
-			border-left:2px solid $rowBorderColor;
-		}
-	}
-
-	.tabulator-responsive-collapse{
-		box-sizing:border-box;
-
-		padding:5px;
-
-		border-top:1px solid $rowBorderColor;
-		border-bottom:1px solid $rowBorderColor;
-
-		&:empty{
-			display:none;
-		}
-
-		table{
-			font-size:$textSize;
-
-			tr{
-				td{
-					position: relative;
-
-					&:first-of-type{
-						padding-right:10px;
-					}
-				}
-			}
-		}
-	}
-
-	//cell element
-	.tabulator-cell{
-		display:inline-block;
-		position: relative;
-		box-sizing:border-box;
-		padding:6px;
-		border-right:1px solid $rowBorderColor;
-		vertical-align:middle;
-		white-space:nowrap;
-		overflow:hidden;
-		text-overflow:ellipsis;
-
-
-		&.tabulator-editing{
-			border:1px solid  $editBoxColor;
-			padding: 0;
-
-			input, select{
-				border:1px;
-				background:transparent;
-			}
-		}
-
-		&.tabulator-validation-fail{
-			border:1px solid $errorColor;
-			input, select{
-				border:1px;
-				background:transparent;
-
-				color: $errorColor;
-			}
-		}
-
-		//hide left resize handle on first column
-		&:first-child{
-			.tabulator-col-resize-handle.prev{
-				display: none;
-			}
-		}
-
-		//movable row handle
-		&.tabulator-row-handle{
-
-			display: inline-flex;
-			align-items:center;
-
-			-moz-user-select: none;
-			-khtml-user-select: none;
-			-webkit-user-select: none;
-			-o-user-select: none;
-
-			//handle holder
-			.tabulator-row-handle-box{
-				width:80%;
-
-				//Hamburger element
-				.tabulator-row-handle-bar{
-					width:100%;
-					height:3px;
-					margin-top:2px;
-					background:$sortArrowActive;
-				}
-			}
-		}
-
-		.tabulator-data-tree-branch{
-			display:inline-block;
-			vertical-align:middle;
-
-			height:9px;
-			width:7px;
-
-			margin-top:-9px;
-			margin-right:5px;
-
-			border-bottom-left-radius:1px;
-
-			border-left:2px solid $rowBorderColor;
-			border-bottom:2px solid $rowBorderColor;
-		}
-
-		.tabulator-data-tree-control{
-
-			display:inline-flex;
-			justify-content:center;
-			align-items:center;
-			vertical-align:middle;
-
-			height:11px;
-			width:11px;
-
-			margin-right:5px;
-
-			border:1px solid $rowTextColor;
-			border-radius:2px;
-			background:rgba(0, 0, 0, .1);
-
-			overflow:hidden;
-
-			&:hover{
-				cursor:pointer;
-				background:rgba(0, 0, 0, .2);
-			}
-
-			.tabulator-data-tree-control-collapse{
-				display:inline-block;
-				position: relative;
-
-				height: 7px;
-				width: 1px;
-
-				background: transparent;
-
-				&:after {
-					position: absolute;
-					content: "";
-					left: -3px;
-					top: 3px;
-
-					height: 1px;
-					width: 7px;
-
-					background: $rowTextColor;
-				}
-			}
-
-			.tabulator-data-tree-control-expand{
-				display:inline-block;
-				position: relative;
-
-				height: 7px;
-				width: 1px;
-
-				background: $rowTextColor;
-
-				&:after {
-					position: absolute;
-					content: "";
-					left: -3px;
-					top: 3px;
-
-					height: 1px;
-					width: 7px;
-
-					background: $rowTextColor;
-				}
-			}
-
-		}
-
-		.tabulator-responsive-collapse-toggle{
-			display: inline-flex;
-			align-items:center;
-			justify-content:center;
-
-			-moz-user-select: none;
-			-khtml-user-select: none;
-			-webkit-user-select: none;
-			-o-user-select: none;
-
-			height:15px;
-			width:15px;
-
-			border-radius:20px;
-			background:#666;
-
-			color:$rowBackgroundColor;
-			font-weight:bold;
-			font-size:1.1em;
-
-			&:hover{
-				opacity:.7;
-			}
-
-			&.open{
-				.tabulator-responsive-collapse-toggle-close{
-					display:initial;
-				}
-
-				.tabulator-responsive-collapse-toggle-open{
-					display:none;
-				}
-			}
-
-			.tabulator-responsive-collapse-toggle-close{
-				display:none;
-			}
-		}
-	}
-
-	//row grouping element
-	&.tabulator-group{
-		box-sizing:border-box;
-		border-right:1px solid $rowBorderColor;
-		border-top:1px solid #000;
-		border-bottom:2px solid $headerSeperatorColor;
-		padding:5px;
-		padding-left:10px;
-		background:$headerBackgroundColor;
-		color:$headerTextColor;
-		font-weight:bold;
-
-		min-width: 100%;
-
-		&:hover{
-			cursor:pointer;
-			background-color:darken($headerBackgroundColor, 10%);
-		}
-
-		&.tabulator-group-visible{
-			.tabulator-arrow{
-				margin-right:10px;
-				border-left: 6px solid transparent;
-				border-right: 6px solid transparent;
-				border-top: 6px solid $sortArrowActive;
-				border-bottom: 0;
-			}
-		}
-
-		&.tabulator-group-level-1{
-			.tabulator-arrow{
-				margin-left:20px;
-			}
-		}
-
-		&.tabulator-group-level-2{
-			.tabulator-arrow{
-				margin-left:40px;
-			}
-		}
-
-		&.tabulator-group-level-3{
-			.tabulator-arrow{
-				margin-left:60px;
-			}
-		}
-
-		&.tabulator-group-level-4{
-			.tabulator-arrow{
-				margin-left:80px;
-			}
-		}
-
-		&.tabulator-group-level-5{
-			.tabulator-arrow{
-				margin-left:100px;
-			}
-		}
-
-		//sorting arrow
-		.tabulator-arrow{
-			display: inline-block;
-			width: 0;
-			height: 0;
-			margin-right:16px;
-			border-top: 6px solid transparent;
-			border-bottom: 6px solid transparent;
-			border-right: 0;
-			border-left: 6px solid $sortArrowActive;
-			vertical-align:middle;
-		}
-
-		span{
-			margin-left:10px;
-			color:$headerSeperatorColor;
-		}
-	}
-
-}
-
-.tabulator-edit-select-list{
-	position: absolute;
-	display:inline-block;
-	box-sizing:border-box;
-
-	max-height:200px;
-
-	background:$rowBackgroundColor;
-	border:1px solid $rowBorderColor;
-
-	font-size:$textSize;
-
-	overflow-y:auto;
-	-webkit-overflow-scrolling: touch;
-
-	z-index: 10000;
-
-	.tabulator-edit-select-list-item{
-		padding:4px;
-
-		color:$rowTextColor;
-
-		&.active{
-			color:$rowBackgroundColor;
-			background:$editBoxColor;
-		}
-
-		&:hover{
-			cursor:pointer;
-
-			color:$rowBackgroundColor;
-			background:$editBoxColor;
-		}
-	}
-
-	.tabulator-edit-select-list-group{
-		border-bottom:1px solid $rowBorderColor;
-
-		padding:4px;
-		padding-top:6px;
-
-		color:$rowTextColor;
-		font-weight:bold;
-	}
-}
\ No newline at end of file
diff --git a/Gems/AssetMemoryAnalyzer/External/tabulator-master/yarn.lock b/Gems/AssetMemoryAnalyzer/External/tabulator-master/yarn.lock
deleted file mode 100644
index 01198bc3c7..0000000000
--- a/Gems/AssetMemoryAnalyzer/External/tabulator-master/yarn.lock
+++ /dev/null
@@ -1,5974 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-"@gulp-sourcemaps/identity-map@1.X":
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz#1e6fe5d8027b1f285dc0d31762f566bccd73d5a9"
-  dependencies:
-    acorn "^5.0.3"
-    css "^2.2.1"
-    normalize-path "^2.1.1"
-    source-map "^0.6.0"
-    through2 "^2.0.3"
-
-"@gulp-sourcemaps/map-sources@1.X":
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz#890ae7c5d8c877f6d384860215ace9d7ec945bda"
-  dependencies:
-    normalize-path "^2.0.1"
-    through2 "^2.0.3"
-
-abbrev@1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
-
-acorn@5.X, acorn@^5.0.3:
-  version "5.7.3"
-  resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
-
-ajv@^5.1.0, ajv@^5.3.0:
-  version "5.5.2"
-  resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
-  dependencies:
-    co "^4.6.0"
-    fast-deep-equal "^1.0.0"
-    fast-json-stable-stringify "^2.0.0"
-    json-schema-traverse "^0.3.0"
-
-align-text@^0.1.1, align-text@^0.1.3:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
-  dependencies:
-    kind-of "^3.0.2"
-    longest "^1.0.1"
-    repeat-string "^1.5.2"
-
-alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
-
-amdefine@>=0.0.4:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-
-ansi-colors@^1.0.1:
-  version "1.1.0"
-  resolved "http://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz#6374b4dd5d4718ff3ce27a671a3b1cad077132a9"
-  dependencies:
-    ansi-wrap "^0.1.0"
-
-ansi-cyan@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873"
-  dependencies:
-    ansi-wrap "0.1.0"
-
-ansi-gray@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251"
-  dependencies:
-    ansi-wrap "0.1.0"
-
-ansi-red@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c"
-  dependencies:
-    ansi-wrap "0.1.0"
-
-ansi-regex@^0.2.0, ansi-regex@^0.2.1:
-  version "0.2.1"
-  resolved "http://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9"
-
-ansi-regex@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-
-ansi-regex@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
-
-ansi-styles@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de"
-
-ansi-styles@^2.2.1:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-
-ansi-styles@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
-  dependencies:
-    color-convert "^1.9.0"
-
-ansi-wrap@0.1.0, ansi-wrap@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf"
-
-aproba@^1.0.3:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
-
-archive-type@^3.0.0, archive-type@^3.0.1:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-3.2.0.tgz#9cd9c006957ebe95fadad5bd6098942a813737f6"
-  dependencies:
-    file-type "^3.1.0"
-
-archy@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
-
-are-we-there-yet@~1.1.2:
-  version "1.1.5"
-  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
-  dependencies:
-    delegates "^1.0.0"
-    readable-stream "^2.0.6"
-
-argparse@^1.0.7:
-  version "1.0.10"
-  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
-  dependencies:
-    sprintf-js "~1.0.2"
-
-arr-diff@^1.0.1:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a"
-  dependencies:
-    arr-flatten "^1.0.1"
-    array-slice "^0.2.3"
-
-arr-diff@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
-  dependencies:
-    arr-flatten "^1.0.1"
-
-arr-diff@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
-
-arr-flatten@^1.0.1, arr-flatten@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
-
-arr-union@^2.0.1:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d"
-
-arr-union@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
-
-array-differ@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
-
-array-each@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f"
-
-array-find-index@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
-
-array-slice@^0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5"
-
-array-slice@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4"
-
-array-union@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
-  dependencies:
-    array-uniq "^1.0.1"
-
-array-uniq@^1.0.0, array-uniq@^1.0.1, array-uniq@^1.0.2:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
-
-array-unique@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-
-array-unique@^0.3.2:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
-
-arrify@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
-
-asn1@~0.2.3:
-  version "0.2.4"
-  resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
-  dependencies:
-    safer-buffer "~2.1.0"
-
-assert-plus@1.0.0, assert-plus@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-
-assign-symbols@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
-
-async-each-series@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/async-each-series/-/async-each-series-1.1.0.tgz#f42fd8155d38f21a5b8ea07c28e063ed1700b138"
-
-async-foreach@^0.1.3:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
-
-async@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/async/-/async-1.0.0.tgz#f8fc04ca3a13784ade9e1641af98578cfbd647a9"
-
-asynckit@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-
-atob@^2.1.1:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
-
-autoprefixer@^6.0.0, autoprefixer@^6.3.1:
-  version "6.7.7"
-  resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
-  dependencies:
-    browserslist "^1.7.6"
-    caniuse-db "^1.0.30000634"
-    normalize-range "^0.1.2"
-    num2fraction "^1.2.2"
-    postcss "^5.2.16"
-    postcss-value-parser "^3.2.3"
-
-aws-sign2@~0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
-
-aws4@^1.6.0, aws4@^1.8.0:
-  version "1.8.0"
-  resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
-
-babel-code-frame@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
-  dependencies:
-    chalk "^1.1.3"
-    esutils "^2.0.2"
-    js-tokens "^3.0.2"
-
-babel-core@^6.23.1, babel-core@^6.26.0:
-  version "6.26.3"
-  resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
-  dependencies:
-    babel-code-frame "^6.26.0"
-    babel-generator "^6.26.0"
-    babel-helpers "^6.24.1"
-    babel-messages "^6.23.0"
-    babel-register "^6.26.0"
-    babel-runtime "^6.26.0"
-    babel-template "^6.26.0"
-    babel-traverse "^6.26.0"
-    babel-types "^6.26.0"
-    babylon "^6.18.0"
-    convert-source-map "^1.5.1"
-    debug "^2.6.9"
-    json5 "^0.5.1"
-    lodash "^4.17.4"
-    minimatch "^3.0.4"
-    path-is-absolute "^1.0.1"
-    private "^0.1.8"
-    slash "^1.0.0"
-    source-map "^0.5.7"
-
-babel-generator@^6.26.0:
-  version "6.26.1"
-  resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
-  dependencies:
-    babel-messages "^6.23.0"
-    babel-runtime "^6.26.0"
-    babel-types "^6.26.0"
-    detect-indent "^4.0.0"
-    jsesc "^1.3.0"
-    lodash "^4.17.4"
-    source-map "^0.5.7"
-    trim-right "^1.0.1"
-
-babel-helper-bindify-decorators@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330"
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-traverse "^6.24.1"
-    babel-types "^6.24.1"
-
-babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
-  dependencies:
-    babel-helper-explode-assignable-expression "^6.24.1"
-    babel-runtime "^6.22.0"
-    babel-types "^6.24.1"
-
-babel-helper-call-delegate@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
-  dependencies:
-    babel-helper-hoist-variables "^6.24.1"
-    babel-runtime "^6.22.0"
-    babel-traverse "^6.24.1"
-    babel-types "^6.24.1"
-
-babel-helper-define-map@^6.24.1:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
-  dependencies:
-    babel-helper-function-name "^6.24.1"
-    babel-runtime "^6.26.0"
-    babel-types "^6.26.0"
-    lodash "^4.17.4"
-
-babel-helper-explode-assignable-expression@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-traverse "^6.24.1"
-    babel-types "^6.24.1"
-
-babel-helper-explode-class@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb"
-  dependencies:
-    babel-helper-bindify-decorators "^6.24.1"
-    babel-runtime "^6.22.0"
-    babel-traverse "^6.24.1"
-    babel-types "^6.24.1"
-
-babel-helper-function-name@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
-  dependencies:
-    babel-helper-get-function-arity "^6.24.1"
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
-    babel-traverse "^6.24.1"
-    babel-types "^6.24.1"
-
-babel-helper-get-function-arity@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-types "^6.24.1"
-
-babel-helper-hoist-variables@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-types "^6.24.1"
-
-babel-helper-optimise-call-expression@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-types "^6.24.1"
-
-babel-helper-regex@^6.24.1:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
-  dependencies:
-    babel-runtime "^6.26.0"
-    babel-types "^6.26.0"
-    lodash "^4.17.4"
-
-babel-helper-remap-async-to-generator@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
-  dependencies:
-    babel-helper-function-name "^6.24.1"
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
-    babel-traverse "^6.24.1"
-    babel-types "^6.24.1"
-
-babel-helper-replace-supers@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
-  dependencies:
-    babel-helper-optimise-call-expression "^6.24.1"
-    babel-messages "^6.23.0"
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
-    babel-traverse "^6.24.1"
-    babel-types "^6.24.1"
-
-babel-helpers@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
-
-babel-messages@^6.23.0:
-  version "6.23.0"
-  resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-plugin-check-es2015-constants@^6.22.0:
-  version "6.22.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-plugin-syntax-async-functions@^6.8.0:
-  version "6.13.0"
-  resolved "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
-
-babel-plugin-syntax-async-generators@^6.5.0:
-  version "6.13.0"
-  resolved "http://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a"
-
-babel-plugin-syntax-class-properties@^6.8.0:
-  version "6.13.0"
-  resolved "http://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
-
-babel-plugin-syntax-decorators@^6.13.0:
-  version "6.13.0"
-  resolved "http://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b"
-
-babel-plugin-syntax-dynamic-import@^6.18.0:
-  version "6.18.0"
-  resolved "http://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
-
-babel-plugin-syntax-exponentiation-operator@^6.8.0:
-  version "6.13.0"
-  resolved "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
-
-babel-plugin-syntax-object-rest-spread@^6.8.0:
-  version "6.13.0"
-  resolved "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
-
-babel-plugin-syntax-trailing-function-commas@^6.22.0:
-  version "6.22.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
-
-babel-plugin-transform-async-generator-functions@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db"
-  dependencies:
-    babel-helper-remap-async-to-generator "^6.24.1"
-    babel-plugin-syntax-async-generators "^6.5.0"
-    babel-runtime "^6.22.0"
-
-babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
-  dependencies:
-    babel-helper-remap-async-to-generator "^6.24.1"
-    babel-plugin-syntax-async-functions "^6.8.0"
-    babel-runtime "^6.22.0"
-
-babel-plugin-transform-class-properties@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac"
-  dependencies:
-    babel-helper-function-name "^6.24.1"
-    babel-plugin-syntax-class-properties "^6.8.0"
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
-
-babel-plugin-transform-decorators@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d"
-  dependencies:
-    babel-helper-explode-class "^6.24.1"
-    babel-plugin-syntax-decorators "^6.13.0"
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
-    babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-arrow-functions@^6.22.0:
-  version "6.22.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
-  version "6.22.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.24.1:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
-  dependencies:
-    babel-runtime "^6.26.0"
-    babel-template "^6.26.0"
-    babel-traverse "^6.26.0"
-    babel-types "^6.26.0"
-    lodash "^4.17.4"
-
-babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
-  dependencies:
-    babel-helper-define-map "^6.24.1"
-    babel-helper-function-name "^6.24.1"
-    babel-helper-optimise-call-expression "^6.24.1"
-    babel-helper-replace-supers "^6.24.1"
-    babel-messages "^6.23.0"
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
-    babel-traverse "^6.24.1"
-    babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
-
-babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.0:
-  version "6.23.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2015-duplicate-keys@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.23.0:
-  version "6.23.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
-  dependencies:
-    babel-helper-function-name "^6.24.1"
-    babel-runtime "^6.22.0"
-    babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-literals@^6.22.0:
-  version "6.22.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
-  dependencies:
-    babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
-
-babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
-  version "6.26.2"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
-  dependencies:
-    babel-plugin-transform-strict-mode "^6.24.1"
-    babel-runtime "^6.26.0"
-    babel-template "^6.26.0"
-    babel-types "^6.26.0"
-
-babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
-  dependencies:
-    babel-helper-hoist-variables "^6.24.1"
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
-
-babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
-  dependencies:
-    babel-plugin-transform-es2015-modules-amd "^6.24.1"
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
-
-babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
-  dependencies:
-    babel-helper-replace-supers "^6.24.1"
-    babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
-  dependencies:
-    babel-helper-call-delegate "^6.24.1"
-    babel-helper-get-function-arity "^6.24.1"
-    babel-runtime "^6.22.0"
-    babel-template "^6.24.1"
-    babel-traverse "^6.24.1"
-    babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-spread@^6.22.0:
-  version "6.22.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es2015-sticky-regex@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
-  dependencies:
-    babel-helper-regex "^6.24.1"
-    babel-runtime "^6.22.0"
-    babel-types "^6.24.1"
-
-babel-plugin-transform-es2015-template-literals@^6.22.0:
-  version "6.22.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.23.0:
-  version "6.23.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
-  dependencies:
-    babel-runtime "^6.22.0"
-
-babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es2015-unicode-regex@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
-  dependencies:
-    babel-helper-regex "^6.24.1"
-    babel-runtime "^6.22.0"
-    regexpu-core "^2.0.0"
-
-babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
-  dependencies:
-    babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
-    babel-plugin-syntax-exponentiation-operator "^6.8.0"
-    babel-runtime "^6.22.0"
-
-babel-plugin-transform-object-rest-spread@^6.22.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
-  dependencies:
-    babel-plugin-syntax-object-rest-spread "^6.8.0"
-    babel-runtime "^6.26.0"
-
-babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
-  dependencies:
-    regenerator-transform "^0.10.0"
-
-babel-plugin-transform-strict-mode@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
-  dependencies:
-    babel-runtime "^6.22.0"
-    babel-types "^6.24.1"
-
-babel-preset-env@^1.4.0:
-  version "1.7.0"
-  resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a"
-  dependencies:
-    babel-plugin-check-es2015-constants "^6.22.0"
-    babel-plugin-syntax-trailing-function-commas "^6.22.0"
-    babel-plugin-transform-async-to-generator "^6.22.0"
-    babel-plugin-transform-es2015-arrow-functions "^6.22.0"
-    babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
-    babel-plugin-transform-es2015-block-scoping "^6.23.0"
-    babel-plugin-transform-es2015-classes "^6.23.0"
-    babel-plugin-transform-es2015-computed-properties "^6.22.0"
-    babel-plugin-transform-es2015-destructuring "^6.23.0"
-    babel-plugin-transform-es2015-duplicate-keys "^6.22.0"
-    babel-plugin-transform-es2015-for-of "^6.23.0"
-    babel-plugin-transform-es2015-function-name "^6.22.0"
-    babel-plugin-transform-es2015-literals "^6.22.0"
-    babel-plugin-transform-es2015-modules-amd "^6.22.0"
-    babel-plugin-transform-es2015-modules-commonjs "^6.23.0"
-    babel-plugin-transform-es2015-modules-systemjs "^6.23.0"
-    babel-plugin-transform-es2015-modules-umd "^6.23.0"
-    babel-plugin-transform-es2015-object-super "^6.22.0"
-    babel-plugin-transform-es2015-parameters "^6.23.0"
-    babel-plugin-transform-es2015-shorthand-properties "^6.22.0"
-    babel-plugin-transform-es2015-spread "^6.22.0"
-    babel-plugin-transform-es2015-sticky-regex "^6.22.0"
-    babel-plugin-transform-es2015-template-literals "^6.22.0"
-    babel-plugin-transform-es2015-typeof-symbol "^6.23.0"
-    babel-plugin-transform-es2015-unicode-regex "^6.22.0"
-    babel-plugin-transform-exponentiation-operator "^6.22.0"
-    babel-plugin-transform-regenerator "^6.22.0"
-    browserslist "^3.2.6"
-    invariant "^2.2.2"
-    semver "^5.3.0"
-
-babel-preset-es2015@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939"
-  dependencies:
-    babel-plugin-check-es2015-constants "^6.22.0"
-    babel-plugin-transform-es2015-arrow-functions "^6.22.0"
-    babel-plugin-transform-es2015-block-scoped-functions "^6.22.0"
-    babel-plugin-transform-es2015-block-scoping "^6.24.1"
-    babel-plugin-transform-es2015-classes "^6.24.1"
-    babel-plugin-transform-es2015-computed-properties "^6.24.1"
-    babel-plugin-transform-es2015-destructuring "^6.22.0"
-    babel-plugin-transform-es2015-duplicate-keys "^6.24.1"
-    babel-plugin-transform-es2015-for-of "^6.22.0"
-    babel-plugin-transform-es2015-function-name "^6.24.1"
-    babel-plugin-transform-es2015-literals "^6.22.0"
-    babel-plugin-transform-es2015-modules-amd "^6.24.1"
-    babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
-    babel-plugin-transform-es2015-modules-systemjs "^6.24.1"
-    babel-plugin-transform-es2015-modules-umd "^6.24.1"
-    babel-plugin-transform-es2015-object-super "^6.24.1"
-    babel-plugin-transform-es2015-parameters "^6.24.1"
-    babel-plugin-transform-es2015-shorthand-properties "^6.24.1"
-    babel-plugin-transform-es2015-spread "^6.22.0"
-    babel-plugin-transform-es2015-sticky-regex "^6.24.1"
-    babel-plugin-transform-es2015-template-literals "^6.22.0"
-    babel-plugin-transform-es2015-typeof-symbol "^6.22.0"
-    babel-plugin-transform-es2015-unicode-regex "^6.24.1"
-    babel-plugin-transform-regenerator "^6.24.1"
-
-babel-preset-stage-2@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1"
-  dependencies:
-    babel-plugin-syntax-dynamic-import "^6.18.0"
-    babel-plugin-transform-class-properties "^6.24.1"
-    babel-plugin-transform-decorators "^6.24.1"
-    babel-preset-stage-3 "^6.24.1"
-
-babel-preset-stage-3@^6.24.1:
-  version "6.24.1"
-  resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395"
-  dependencies:
-    babel-plugin-syntax-trailing-function-commas "^6.22.0"
-    babel-plugin-transform-async-generator-functions "^6.24.1"
-    babel-plugin-transform-async-to-generator "^6.24.1"
-    babel-plugin-transform-exponentiation-operator "^6.24.1"
-    babel-plugin-transform-object-rest-spread "^6.22.0"
-
-babel-register@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
-  dependencies:
-    babel-core "^6.26.0"
-    babel-runtime "^6.26.0"
-    core-js "^2.5.0"
-    home-or-tmp "^2.0.0"
-    lodash "^4.17.4"
-    mkdirp "^0.5.1"
-    source-map-support "^0.4.15"
-
-babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
-  dependencies:
-    core-js "^2.4.0"
-    regenerator-runtime "^0.11.0"
-
-babel-template@^6.24.1, babel-template@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
-  dependencies:
-    babel-runtime "^6.26.0"
-    babel-traverse "^6.26.0"
-    babel-types "^6.26.0"
-    babylon "^6.18.0"
-    lodash "^4.17.4"
-
-babel-traverse@^6.24.1, babel-traverse@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
-  dependencies:
-    babel-code-frame "^6.26.0"
-    babel-messages "^6.23.0"
-    babel-runtime "^6.26.0"
-    babel-types "^6.26.0"
-    babylon "^6.18.0"
-    debug "^2.6.8"
-    globals "^9.18.0"
-    invariant "^2.2.2"
-    lodash "^4.17.4"
-
-babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
-  version "6.26.0"
-  resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
-  dependencies:
-    babel-runtime "^6.26.0"
-    esutils "^2.0.2"
-    lodash "^4.17.4"
-    to-fast-properties "^1.0.3"
-
-babylon@^6.18.0:
-  version "6.18.0"
-  resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
-
-balanced-match@^0.4.2:
-  version "0.4.2"
-  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
-
-balanced-match@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
-
-base@^0.11.1:
-  version "0.11.2"
-  resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
-  dependencies:
-    cache-base "^1.0.1"
-    class-utils "^0.3.5"
-    component-emitter "^1.2.1"
-    define-property "^1.0.0"
-    isobject "^3.0.1"
-    mixin-deep "^1.2.0"
-    pascalcase "^0.1.1"
-
-bcrypt-pbkdf@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
-  dependencies:
-    tweetnacl "^0.14.3"
-
-beeper@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809"
-
-bin-build@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/bin-build/-/bin-build-2.2.0.tgz#11f8dd61f70ffcfa2bdcaa5b46f5e8fedd4221cc"
-  dependencies:
-    archive-type "^3.0.1"
-    decompress "^3.0.0"
-    download "^4.1.2"
-    exec-series "^1.0.0"
-    rimraf "^2.2.6"
-    tempfile "^1.0.0"
-    url-regex "^3.0.0"
-
-bin-check@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/bin-check/-/bin-check-2.0.0.tgz#86f8e6f4253893df60dc316957f5af02acb05930"
-  dependencies:
-    executable "^1.0.0"
-
-bin-version-check@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/bin-version-check/-/bin-version-check-2.1.0.tgz#e4e5df290b9069f7d111324031efc13fdd11a5b0"
-  dependencies:
-    bin-version "^1.0.0"
-    minimist "^1.1.0"
-    semver "^4.0.3"
-    semver-truncate "^1.0.0"
-
-bin-version@^1.0.0:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/bin-version/-/bin-version-1.0.4.tgz#9eb498ee6fd76f7ab9a7c160436f89579435d78e"
-  dependencies:
-    find-versions "^1.0.0"
-
-bin-wrapper@^3.0.0:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/bin-wrapper/-/bin-wrapper-3.0.2.tgz#67d3306262e4b1a5f2f88ee23464f6a655677aeb"
-  dependencies:
-    bin-check "^2.0.0"
-    bin-version-check "^2.1.0"
-    download "^4.0.0"
-    each-async "^1.1.1"
-    lazy-req "^1.0.0"
-    os-filter-obj "^1.0.0"
-
-bl@^1.0.0:
-  version "1.2.2"
-  resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c"
-  dependencies:
-    readable-stream "^2.3.5"
-    safe-buffer "^5.1.1"
-
-block-stream@*:
-  version "0.0.9"
-  resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
-  dependencies:
-    inherits "~2.0.0"
-
-bluebird@^3.0.5:
-  version "3.5.2"
-  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a"
-
-body-parser@~1.14.0:
-  version "1.14.2"
-  resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.14.2.tgz#1015cb1fe2c443858259581db53332f8d0cf50f9"
-  dependencies:
-    bytes "2.2.0"
-    content-type "~1.0.1"
-    debug "~2.2.0"
-    depd "~1.1.0"
-    http-errors "~1.3.1"
-    iconv-lite "0.4.13"
-    on-finished "~2.3.0"
-    qs "5.2.0"
-    raw-body "~2.1.5"
-    type-is "~1.6.10"
-
-brace-expansion@^1.0.0, brace-expansion@^1.1.7:
-  version "1.1.11"
-  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
-  dependencies:
-    balanced-match "^1.0.0"
-    concat-map "0.0.1"
-
-braces@^1.8.2:
-  version "1.8.5"
-  resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
-  dependencies:
-    expand-range "^1.8.1"
-    preserve "^0.2.0"
-    repeat-element "^1.1.2"
-
-braces@^2.3.1:
-  version "2.3.2"
-  resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
-  dependencies:
-    arr-flatten "^1.1.0"
-    array-unique "^0.3.2"
-    extend-shallow "^2.0.1"
-    fill-range "^4.0.0"
-    isobject "^3.0.1"
-    repeat-element "^1.1.2"
-    snapdragon "^0.8.1"
-    snapdragon-node "^2.0.1"
-    split-string "^3.0.2"
-    to-regex "^3.0.1"
-
-browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
-  version "1.7.7"
-  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
-  dependencies:
-    caniuse-db "^1.0.30000639"
-    electron-to-chromium "^1.2.7"
-
-browserslist@^3.2.6:
-  version "3.2.8"
-  resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6"
-  dependencies:
-    caniuse-lite "^1.0.30000844"
-    electron-to-chromium "^1.3.47"
-
-buffer-alloc-unsafe@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
-
-buffer-alloc@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec"
-  dependencies:
-    buffer-alloc-unsafe "^1.1.0"
-    buffer-fill "^1.0.0"
-
-buffer-crc32@~0.2.3:
-  version "0.2.13"
-  resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
-
-buffer-fill@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
-
-buffer-from@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
-
-buffer-to-vinyl@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz#00f15faee3ab7a1dda2cde6d9121bffdd07b2262"
-  dependencies:
-    file-type "^3.1.0"
-    readable-stream "^2.0.2"
-    uuid "^2.0.1"
-    vinyl "^1.0.0"
-
-builtin-modules@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
-
-bytes@2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.2.0.tgz#fd35464a403f6f9117c2de3609ecff9cae000588"
-
-bytes@2.4.0:
-  version "2.4.0"
-  resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339"
-
-cache-base@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
-  dependencies:
-    collection-visit "^1.0.0"
-    component-emitter "^1.2.1"
-    get-value "^2.0.6"
-    has-value "^1.0.0"
-    isobject "^3.0.1"
-    set-value "^2.0.0"
-    to-object-path "^0.3.0"
-    union-value "^1.0.0"
-    unset-value "^1.0.0"
-
-cache-swap@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/cache-swap/-/cache-swap-0.3.0.tgz#1c541aa108a50106f630bdd98fe1dec8ba133f51"
-  dependencies:
-    graceful-fs "^4.1.2"
-    mkdirp "^0.5.1"
-    object-assign "^4.0.1"
-    rimraf "^2.4.0"
-
-camelcase-keys@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
-  dependencies:
-    camelcase "^2.0.0"
-    map-obj "^1.0.0"
-
-camelcase@^1.0.2:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
-
-camelcase@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
-
-camelcase@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
-
-caniuse-api@^1.5.2:
-  version "1.6.1"
-  resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
-  dependencies:
-    browserslist "^1.3.6"
-    caniuse-db "^1.0.30000529"
-    lodash.memoize "^4.1.2"
-    lodash.uniq "^4.5.0"
-
-caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
-  version "1.0.30000887"
-  resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000887.tgz#9abf538610e3349870ed525f7062de649cc3c570"
-
-caniuse-lite@^1.0.30000844:
-  version "1.0.30000887"
-  resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000887.tgz#1769458c27bbdcf61b0cb6b5072bb6cd11fd9c23"
-
-capture-stack-trace@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
-
-caseless@~0.12.0:
-  version "0.12.0"
-  resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
-
-caw@^1.0.1:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/caw/-/caw-1.2.0.tgz#ffb226fe7efc547288dc62ee3e97073c212d1034"
-  dependencies:
-    get-proxy "^1.0.1"
-    is-obj "^1.0.0"
-    object-assign "^3.0.0"
-    tunnel-agent "^0.4.0"
-
-center-align@^0.1.1:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
-  dependencies:
-    align-text "^0.1.3"
-    lazy-cache "^1.0.3"
-
-chalk@^0.5.0, chalk@^0.5.1:
-  version "0.5.1"
-  resolved "http://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174"
-  dependencies:
-    ansi-styles "^1.1.0"
-    escape-string-regexp "^1.0.0"
-    has-ansi "^0.1.0"
-    strip-ansi "^0.3.0"
-    supports-color "^0.2.0"
-
-chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
-  version "1.1.3"
-  resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
-  dependencies:
-    ansi-styles "^2.2.1"
-    escape-string-regexp "^1.0.2"
-    has-ansi "^2.0.0"
-    strip-ansi "^3.0.0"
-    supports-color "^2.0.0"
-
-chalk@^2.1.0:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
-  dependencies:
-    ansi-styles "^3.2.1"
-    escape-string-regexp "^1.0.5"
-    supports-color "^5.3.0"
-
-clap@^1.0.9:
-  version "1.2.3"
-  resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
-  dependencies:
-    chalk "^1.1.3"
-
-class-utils@^0.3.5:
-  version "0.3.6"
-  resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
-  dependencies:
-    arr-union "^3.1.0"
-    define-property "^0.2.5"
-    isobject "^3.0.0"
-    static-extend "^0.1.1"
-
-cli@~1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14"
-  dependencies:
-    exit "0.1.2"
-    glob "^7.1.1"
-
-cliui@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
-  dependencies:
-    center-align "^0.1.1"
-    right-align "^0.1.1"
-    wordwrap "0.0.2"
-
-cliui@^3.2.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
-  dependencies:
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-    wrap-ansi "^2.0.0"
-
-clone-buffer@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58"
-
-clone-stats@^0.0.1, clone-stats@~0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1"
-
-clone-stats@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680"
-
-clone@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f"
-
-clone@^1.0.0, clone@^1.0.2:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
-
-clone@^2.1.1:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
-
-cloneable-readable@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65"
-  dependencies:
-    inherits "^2.0.1"
-    process-nextick-args "^2.0.0"
-    readable-stream "^2.3.5"
-
-co@3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/co/-/co-3.1.0.tgz#4ea54ea5a08938153185e15210c68d9092bc1b78"
-
-co@^4.6.0:
-  version "4.6.0"
-  resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-
-coa@~1.0.1:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
-  dependencies:
-    q "^1.1.2"
-
-code-point-at@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-
-collection-visit@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
-  dependencies:
-    map-visit "^1.0.0"
-    object-visit "^1.0.0"
-
-color-convert@^1.3.0, color-convert@^1.9.0:
-  version "1.9.3"
-  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
-  dependencies:
-    color-name "1.1.3"
-
-color-name@1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
-
-color-name@^1.0.0:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
-
-color-string@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
-  dependencies:
-    color-name "^1.0.0"
-
-color-support@^1.1.3:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
-
-color@^0.11.0:
-  version "0.11.4"
-  resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
-  dependencies:
-    clone "^1.0.2"
-    color-convert "^1.3.0"
-    color-string "^0.3.0"
-
-colormin@^1.0.5:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
-  dependencies:
-    color "^0.11.0"
-    css-color-names "0.0.4"
-    has "^1.0.1"
-
-colors@1.0.x:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
-
-colors@~1.1.2:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
-
-combined-stream@1.0.6:
-  version "1.0.6"
-  resolved "http://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818"
-  dependencies:
-    delayed-stream "~1.0.0"
-
-combined-stream@~1.0.5, combined-stream@~1.0.6:
-  version "1.0.7"
-  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
-  dependencies:
-    delayed-stream "~1.0.0"
-
-commander@~2.8.1:
-  version "2.8.1"
-  resolved "http://registry.npmjs.org/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4"
-  dependencies:
-    graceful-readlink ">= 1.0.0"
-
-component-emitter@^1.2.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
-
-concat-map@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-
-concat-stream@1.6.2, concat-stream@^1.4.6, concat-stream@^1.4.7:
-  version "1.6.2"
-  resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
-  dependencies:
-    buffer-from "^1.0.0"
-    inherits "^2.0.3"
-    readable-stream "^2.2.2"
-    typedarray "^0.0.6"
-
-concat-with-sourcemaps@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz#d4ea93f05ae25790951b99e7b3b09e3908a4082e"
-  dependencies:
-    source-map "^0.6.1"
-
-console-browserify@1.1.x:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
-  dependencies:
-    date-now "^0.1.4"
-
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
-
-console-stream@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/console-stream/-/console-stream-0.1.1.tgz#a095fe07b20465955f2fafd28b5d72bccd949d44"
-
-content-type@~1.0.1:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
-
-convert-source-map@1.X, convert-source-map@^1.1.1, convert-source-map@^1.5.1:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
-  dependencies:
-    safe-buffer "~5.1.1"
-
-copy-descriptor@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
-
-core-js@^2.4.0, core-js@^2.5.0:
-  version "2.5.7"
-  resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e"
-
-core-util-is@1.0.2, core-util-is@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-
-create-error-class@^3.0.1:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
-  dependencies:
-    capture-stack-trace "^1.0.0"
-
-cross-spawn@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
-  dependencies:
-    lru-cache "^4.0.1"
-    which "^1.2.9"
-
-cross-spawn@^5.0.1:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
-  dependencies:
-    lru-cache "^4.0.1"
-    shebang-command "^1.2.0"
-    which "^1.2.9"
-
-css-color-names@0.0.4:
-  version "0.0.4"
-  resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
-
-css@2.X, css@^2.2.1:
-  version "2.2.4"
-  resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929"
-  dependencies:
-    inherits "^2.0.3"
-    source-map "^0.6.1"
-    source-map-resolve "^0.5.2"
-    urix "^0.1.0"
-
-cssnano@^3.0.0:
-  version "3.10.0"
-  resolved "http://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
-  dependencies:
-    autoprefixer "^6.3.1"
-    decamelize "^1.1.2"
-    defined "^1.0.0"
-    has "^1.0.1"
-    object-assign "^4.0.1"
-    postcss "^5.0.14"
-    postcss-calc "^5.2.0"
-    postcss-colormin "^2.1.8"
-    postcss-convert-values "^2.3.4"
-    postcss-discard-comments "^2.0.4"
-    postcss-discard-duplicates "^2.0.1"
-    postcss-discard-empty "^2.0.1"
-    postcss-discard-overridden "^0.1.1"
-    postcss-discard-unused "^2.2.1"
-    postcss-filter-plugins "^2.0.0"
-    postcss-merge-idents "^2.1.5"
-    postcss-merge-longhand "^2.0.1"
-    postcss-merge-rules "^2.0.3"
-    postcss-minify-font-values "^1.0.2"
-    postcss-minify-gradients "^1.0.1"
-    postcss-minify-params "^1.0.4"
-    postcss-minify-selectors "^2.0.4"
-    postcss-normalize-charset "^1.1.0"
-    postcss-normalize-url "^3.0.7"
-    postcss-ordered-values "^2.1.0"
-    postcss-reduce-idents "^2.2.2"
-    postcss-reduce-initial "^1.0.0"
-    postcss-reduce-transforms "^1.0.3"
-    postcss-svgo "^2.1.1"
-    postcss-unique-selectors "^2.0.2"
-    postcss-value-parser "^3.2.3"
-    postcss-zindex "^2.0.1"
-
-csso@~2.3.1:
-  version "2.3.2"
-  resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
-  dependencies:
-    clap "^1.0.9"
-    source-map "^0.5.3"
-
-currently-unhandled@^0.4.1:
-  version "0.4.1"
-  resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
-  dependencies:
-    array-find-index "^1.0.1"
-
-cycle@1.0.x:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/cycle/-/cycle-1.0.3.tgz#21e80b2be8580f98b468f379430662b046c34ad2"
-
-d@1:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
-  dependencies:
-    es5-ext "^0.10.9"
-
-dashdash@^1.12.0:
-  version "1.14.1"
-  resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
-  dependencies:
-    assert-plus "^1.0.0"
-
-date-now@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
-
-dateformat@^1.0.7-1.2.3:
-  version "1.0.12"
-  resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
-  dependencies:
-    get-stdin "^4.0.1"
-    meow "^3.3.0"
-
-dateformat@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062"
-
-debug-fabulous@1.X:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/debug-fabulous/-/debug-fabulous-1.1.0.tgz#af8a08632465224ef4174a9f06308c3c2a1ebc8e"
-  dependencies:
-    debug "3.X"
-    memoizee "0.4.X"
-    object-assign "4.X"
-
-debug@2.6.9, debug@^2.1.0, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
-  version "2.6.9"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
-  dependencies:
-    ms "2.0.0"
-
-debug@3.X:
-  version "3.2.5"
-  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.5.tgz#c2418fbfd7a29f4d4f70ff4cea604d4b64c46407"
-  dependencies:
-    ms "^2.1.1"
-
-debug@~2.2.0:
-  version "2.2.0"
-  resolved "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
-  dependencies:
-    ms "0.7.1"
-
-decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-
-decode-uri-component@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
-
-decompress-tar@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/decompress-tar/-/decompress-tar-3.1.0.tgz#217c789f9b94450efaadc5c5e537978fc333c466"
-  dependencies:
-    is-tar "^1.0.0"
-    object-assign "^2.0.0"
-    strip-dirs "^1.0.0"
-    tar-stream "^1.1.1"
-    through2 "^0.6.1"
-    vinyl "^0.4.3"
-
-decompress-tarbz2@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz#8b23935681355f9f189d87256a0f8bdd96d9666d"
-  dependencies:
-    is-bzip2 "^1.0.0"
-    object-assign "^2.0.0"
-    seek-bzip "^1.0.3"
-    strip-dirs "^1.0.0"
-    tar-stream "^1.1.1"
-    through2 "^0.6.1"
-    vinyl "^0.4.3"
-
-decompress-targz@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/decompress-targz/-/decompress-targz-3.1.0.tgz#b2c13df98166268991b715d6447f642e9696f5a0"
-  dependencies:
-    is-gzip "^1.0.0"
-    object-assign "^2.0.0"
-    strip-dirs "^1.0.0"
-    tar-stream "^1.1.1"
-    through2 "^0.6.1"
-    vinyl "^0.4.3"
-
-decompress-unzip@^3.0.0:
-  version "3.4.0"
-  resolved "https://registry.yarnpkg.com/decompress-unzip/-/decompress-unzip-3.4.0.tgz#61475b4152066bbe3fee12f9d629d15fe6478eeb"
-  dependencies:
-    is-zip "^1.0.0"
-    read-all-stream "^3.0.0"
-    stat-mode "^0.2.0"
-    strip-dirs "^1.0.0"
-    through2 "^2.0.0"
-    vinyl "^1.0.0"
-    yauzl "^2.2.1"
-
-decompress@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/decompress/-/decompress-3.0.0.tgz#af1dd50d06e3bfc432461d37de11b38c0d991bed"
-  dependencies:
-    buffer-to-vinyl "^1.0.0"
-    concat-stream "^1.4.6"
-    decompress-tar "^3.0.0"
-    decompress-tarbz2 "^3.0.0"
-    decompress-targz "^3.0.0"
-    decompress-unzip "^3.0.0"
-    stream-combiner2 "^1.1.1"
-    vinyl-assign "^1.0.1"
-    vinyl-fs "^2.2.0"
-
-deep-extend@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
-
-defaults@^1.0.0:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
-  dependencies:
-    clone "^1.0.2"
-
-define-property@^0.2.5:
-  version "0.2.5"
-  resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
-  dependencies:
-    is-descriptor "^0.1.0"
-
-define-property@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
-  dependencies:
-    is-descriptor "^1.0.0"
-
-define-property@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
-  dependencies:
-    is-descriptor "^1.0.2"
-    isobject "^3.0.1"
-
-defined@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
-
-del@^2.2.2:
-  version "2.2.2"
-  resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
-  dependencies:
-    globby "^5.0.0"
-    is-path-cwd "^1.0.0"
-    is-path-in-cwd "^1.0.0"
-    object-assign "^4.0.1"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-    rimraf "^2.2.8"
-
-delayed-stream@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-
-delegates@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-
-depd@~1.1.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
-
-deprecated@^0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19"
-
-detect-file@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
-
-detect-indent@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
-  dependencies:
-    repeating "^2.0.0"
-
-detect-newline@2.X:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2"
-
-dom-serializer@0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
-  dependencies:
-    domelementtype "~1.1.1"
-    entities "~1.1.1"
-
-domelementtype@1:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
-
-domelementtype@~1.1.1:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
-
-domhandler@2.3:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738"
-  dependencies:
-    domelementtype "1"
-
-domutils@1.5:
-  version "1.5.1"
-  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
-  dependencies:
-    dom-serializer "0"
-    domelementtype "1"
-
-download@^4.0.0, download@^4.1.2:
-  version "4.4.3"
-  resolved "https://registry.yarnpkg.com/download/-/download-4.4.3.tgz#aa55fdad392d95d4b68e8c2be03e0c2aa21ba9ac"
-  dependencies:
-    caw "^1.0.1"
-    concat-stream "^1.4.7"
-    each-async "^1.0.0"
-    filenamify "^1.0.1"
-    got "^5.0.0"
-    gulp-decompress "^1.2.0"
-    gulp-rename "^1.2.0"
-    is-url "^1.2.0"
-    object-assign "^4.0.1"
-    read-all-stream "^3.0.0"
-    readable-stream "^2.0.2"
-    stream-combiner2 "^1.1.1"
-    vinyl "^1.0.0"
-    vinyl-fs "^2.2.0"
-    ware "^1.2.0"
-
-duplexer2@0.0.2:
-  version "0.0.2"
-  resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
-  dependencies:
-    readable-stream "~1.1.9"
-
-duplexer2@^0.1.4, duplexer2@~0.1.0:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
-  dependencies:
-    readable-stream "^2.0.2"
-
-duplexer@^0.1.1, duplexer@~0.1.1:
-  version "0.1.1"
-  resolved "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
-
-duplexify@^3.2.0:
-  version "3.6.0"
-  resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410"
-  dependencies:
-    end-of-stream "^1.0.0"
-    inherits "^2.0.1"
-    readable-stream "^2.0.0"
-    stream-shift "^1.0.0"
-
-each-async@^1.0.0, each-async@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/each-async/-/each-async-1.1.1.tgz#dee5229bdf0ab6ba2012a395e1b869abf8813473"
-  dependencies:
-    onetime "^1.0.0"
-    set-immediate-shim "^1.0.0"
-
-ecc-jsbn@~0.1.1:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
-  dependencies:
-    jsbn "~0.1.0"
-    safer-buffer "^2.1.0"
-
-ee-first@1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
-
-electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47:
-  version "1.3.71"
-  resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.71.tgz#baecb282e8b27247bbfcf2f3e0254d6fe9a76789"
-
-end-of-stream@^1.0.0:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
-  dependencies:
-    once "^1.4.0"
-
-end-of-stream@~0.1.5:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf"
-  dependencies:
-    once "~1.3.0"
-
-entities@1.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26"
-
-entities@~1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
-
-error-ex@^1.2.0:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
-  dependencies:
-    is-arrayish "^0.2.1"
-
-es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2:
-  version "0.10.46"
-  resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz#efd99f67c5a7ec789baa3daa7f79870388f7f572"
-  dependencies:
-    es6-iterator "~2.0.3"
-    es6-symbol "~3.1.1"
-    next-tick "1"
-
-es6-iterator@^2.0.1, es6-iterator@~2.0.3:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
-  dependencies:
-    d "1"
-    es5-ext "^0.10.35"
-    es6-symbol "^3.1.1"
-
-es6-promise@^4.0.3:
-  version "4.2.5"
-  resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054"
-
-es6-symbol@^3.1.1, es6-symbol@~3.1.1:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
-  dependencies:
-    d "1"
-    es5-ext "~0.10.14"
-
-es6-weak-map@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
-  dependencies:
-    d "1"
-    es5-ext "^0.10.14"
-    es6-iterator "^2.0.1"
-    es6-symbol "^3.1.1"
-
-escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-
-esprima@^2.6.0:
-  version "2.7.3"
-  resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
-
-esutils@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
-
-event-emitter@^0.3.5:
-  version "0.3.5"
-  resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
-  dependencies:
-    d "1"
-    es5-ext "~0.10.14"
-
-event-stream@^3.1.7:
-  version "3.3.6"
-  resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.6.tgz#cac1230890e07e73ec9cacd038f60a5b66173eef"
-  dependencies:
-    duplexer "^0.1.1"
-    flatmap-stream "^0.1.0"
-    from "^0.1.7"
-    map-stream "0.0.7"
-    pause-stream "^0.0.11"
-    split "^1.0.1"
-    stream-combiner "^0.2.2"
-    through "^2.3.8"
-
-event-stream@~3.1.0:
-  version "3.1.7"
-  resolved "http://registry.npmjs.org/event-stream/-/event-stream-3.1.7.tgz#b4c540012d0fe1498420f3d8946008db6393c37a"
-  dependencies:
-    duplexer "~0.1.1"
-    from "~0"
-    map-stream "~0.1.0"
-    pause-stream "0.0.11"
-    split "0.2"
-    stream-combiner "~0.0.4"
-    through "~2.3.1"
-
-exec-buffer@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/exec-buffer/-/exec-buffer-3.2.0.tgz#b1686dbd904c7cf982e652c1f5a79b1e5573082b"
-  dependencies:
-    execa "^0.7.0"
-    p-finally "^1.0.0"
-    pify "^3.0.0"
-    rimraf "^2.5.4"
-    tempfile "^2.0.0"
-
-exec-series@^1.0.0:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/exec-series/-/exec-series-1.0.3.tgz#6d257a9beac482a872c7783bc8615839fc77143a"
-  dependencies:
-    async-each-series "^1.1.0"
-    object-assign "^4.1.0"
-
-execa@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
-  dependencies:
-    cross-spawn "^5.0.1"
-    get-stream "^3.0.0"
-    is-stream "^1.1.0"
-    npm-run-path "^2.0.0"
-    p-finally "^1.0.0"
-    signal-exit "^3.0.0"
-    strip-eof "^1.0.0"
-
-executable@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/executable/-/executable-1.1.0.tgz#877980e9112f3391066da37265de7ad8434ab4d9"
-  dependencies:
-    meow "^3.1.0"
-
-exit@0.1.2, exit@0.1.x:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
-
-expand-brackets@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
-  dependencies:
-    is-posix-bracket "^0.1.0"
-
-expand-brackets@^2.1.4:
-  version "2.1.4"
-  resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
-  dependencies:
-    debug "^2.3.3"
-    define-property "^0.2.5"
-    extend-shallow "^2.0.1"
-    posix-character-classes "^0.1.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-expand-range@^1.8.1:
-  version "1.8.2"
-  resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
-  dependencies:
-    fill-range "^2.1.0"
-
-expand-tilde@^2.0.0, expand-tilde@^2.0.2:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
-  dependencies:
-    homedir-polyfill "^1.0.1"
-
-extend-shallow@^1.1.2:
-  version "1.1.4"
-  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071"
-  dependencies:
-    kind-of "^1.1.0"
-
-extend-shallow@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
-  dependencies:
-    is-extendable "^0.1.0"
-
-extend-shallow@^3.0.0, extend-shallow@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
-  dependencies:
-    assign-symbols "^1.0.0"
-    is-extendable "^1.0.1"
-
-extend@^3.0.0, extend@~3.0.1, extend@~3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
-
-extglob@^0.3.1:
-  version "0.3.2"
-  resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
-  dependencies:
-    is-extglob "^1.0.0"
-
-extglob@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
-  dependencies:
-    array-unique "^0.3.2"
-    define-property "^1.0.0"
-    expand-brackets "^2.1.4"
-    extend-shallow "^2.0.1"
-    fragment-cache "^0.2.1"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-extract-zip@^1.6.5:
-  version "1.6.7"
-  resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9"
-  dependencies:
-    concat-stream "1.6.2"
-    debug "2.6.9"
-    mkdirp "0.5.1"
-    yauzl "2.4.1"
-
-extsprintf@1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
-
-extsprintf@^1.2.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
-
-eyes@0.1.x:
-  version "0.1.8"
-  resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
-
-fancy-log@^1.1.0, fancy-log@^1.3.2:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1"
-  dependencies:
-    ansi-gray "^0.1.1"
-    color-support "^1.1.3"
-    time-stamp "^1.0.0"
-
-fast-deep-equal@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
-
-fast-json-stable-stringify@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
-
-faye-websocket@~0.7.2:
-  version "0.7.3"
-  resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.7.3.tgz#cc4074c7f4a4dfd03af54dd65c354b135132ce11"
-  dependencies:
-    websocket-driver ">=0.3.6"
-
-fd-slicer@~1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
-  dependencies:
-    pend "~1.2.0"
-
-fd-slicer@~1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
-  dependencies:
-    pend "~1.2.0"
-
-figures@^1.3.5:
-  version "1.7.0"
-  resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
-  dependencies:
-    escape-string-regexp "^1.0.5"
-    object-assign "^4.1.0"
-
-file-type@^3.1.0:
-  version "3.9.0"
-  resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
-
-file-type@^4.1.0:
-  version "4.4.0"
-  resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5"
-
-filename-regex@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
-
-filename-reserved-regex@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4"
-
-filenamify@^1.0.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-1.2.1.tgz#a9f2ffd11c503bed300015029272378f1f1365a5"
-  dependencies:
-    filename-reserved-regex "^1.0.0"
-    strip-outer "^1.0.0"
-    trim-repeated "^1.0.0"
-
-fill-range@^2.1.0:
-  version "2.2.4"
-  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
-  dependencies:
-    is-number "^2.1.0"
-    isobject "^2.0.0"
-    randomatic "^3.0.0"
-    repeat-element "^1.1.2"
-    repeat-string "^1.5.2"
-
-fill-range@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-number "^3.0.0"
-    repeat-string "^1.6.1"
-    to-regex-range "^2.1.0"
-
-find-index@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4"
-
-find-up@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
-  dependencies:
-    path-exists "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-find-versions@^1.0.0:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-1.2.1.tgz#cbde9f12e38575a0af1be1b9a2c5d5fd8f186b62"
-  dependencies:
-    array-uniq "^1.0.0"
-    get-stdin "^4.0.1"
-    meow "^3.5.0"
-    semver-regex "^1.0.0"
-
-findup-sync@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc"
-  dependencies:
-    detect-file "^1.0.0"
-    is-glob "^3.1.0"
-    micromatch "^3.0.4"
-    resolve-dir "^1.0.1"
-
-fined@^1.0.1:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476"
-  dependencies:
-    expand-tilde "^2.0.2"
-    is-plain-object "^2.0.3"
-    object.defaults "^1.1.0"
-    object.pick "^1.2.0"
-    parse-filepath "^1.0.1"
-
-first-chunk-stream@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e"
-
-flagged-respawn@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.0.tgz#4e79ae9b2eb38bf86b3bb56bf3e0a56aa5fcabd7"
-
-flatmap-stream@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/flatmap-stream/-/flatmap-stream-0.1.0.tgz#ed54e01422cd29281800914fcb968d58b685d5f1"
-
-flatten@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
-
-for-in@^1.0.1, for-in@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
-
-for-own@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
-  dependencies:
-    for-in "^1.0.1"
-
-for-own@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b"
-  dependencies:
-    for-in "^1.0.1"
-
-forever-agent@~0.6.1:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-
-form-data@~2.3.1, form-data@~2.3.2:
-  version "2.3.2"
-  resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099"
-  dependencies:
-    asynckit "^0.4.0"
-    combined-stream "1.0.6"
-    mime-types "^2.1.12"
-
-fragment-cache@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
-  dependencies:
-    map-cache "^0.2.2"
-
-from@^0.1.7, from@~0:
-  version "0.1.7"
-  resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe"
-
-fs-constants@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
-
-fs-extra@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-1.0.0.tgz#cd3ce5f7e7cb6145883fcae3191e9877f8587950"
-  dependencies:
-    graceful-fs "^4.1.2"
-    jsonfile "^2.1.0"
-    klaw "^1.0.0"
-
-fs.realpath@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-
-fstream@^1.0.0, fstream@^1.0.2:
-  version "1.0.11"
-  resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
-  dependencies:
-    graceful-fs "^4.1.2"
-    inherits "~2.0.0"
-    mkdirp ">=0.5 0"
-    rimraf "2"
-
-function-bind@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
-
-gauge@~2.7.3:
-  version "2.7.4"
-  resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
-  dependencies:
-    aproba "^1.0.3"
-    console-control-strings "^1.0.0"
-    has-unicode "^2.0.0"
-    object-assign "^4.1.0"
-    signal-exit "^3.0.0"
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-    wide-align "^1.1.0"
-
-gaze@^0.5.1:
-  version "0.5.2"
-  resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f"
-  dependencies:
-    globule "~0.1.0"
-
-gaze@^1.0.0:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
-  dependencies:
-    globule "^1.0.0"
-
-get-caller-file@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
-
-get-proxy@^1.0.1:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-1.1.0.tgz#894854491bc591b0f147d7ae570f5c678b7256eb"
-  dependencies:
-    rc "^1.1.2"
-
-get-stdin@^4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
-
-get-stream@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
-
-get-value@^2.0.3, get-value@^2.0.6:
-  version "2.0.6"
-  resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
-
-getpass@^0.1.1:
-  version "0.1.7"
-  resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
-  dependencies:
-    assert-plus "^1.0.0"
-
-gifsicle@^3.0.0:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/gifsicle/-/gifsicle-3.0.4.tgz#f45cb5ed10165b665dc929e0e9328b6c821dfa3b"
-  dependencies:
-    bin-build "^2.0.0"
-    bin-wrapper "^3.0.0"
-    logalot "^2.0.0"
-
-glob-base@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
-  dependencies:
-    glob-parent "^2.0.0"
-    is-glob "^2.0.0"
-
-glob-parent@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
-  dependencies:
-    is-glob "^2.0.0"
-
-glob-parent@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
-  dependencies:
-    is-glob "^3.1.0"
-    path-dirname "^1.0.0"
-
-glob-stream@^3.1.5:
-  version "3.1.18"
-  resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b"
-  dependencies:
-    glob "^4.3.1"
-    glob2base "^0.0.12"
-    minimatch "^2.0.1"
-    ordered-read-streams "^0.1.0"
-    through2 "^0.6.1"
-    unique-stream "^1.0.0"
-
-glob-stream@^5.3.2:
-  version "5.3.5"
-  resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-5.3.5.tgz#a55665a9a8ccdc41915a87c701e32d4e016fad22"
-  dependencies:
-    extend "^3.0.0"
-    glob "^5.0.3"
-    glob-parent "^3.0.0"
-    micromatch "^2.3.7"
-    ordered-read-streams "^0.3.0"
-    through2 "^0.6.0"
-    to-absolute-glob "^0.1.1"
-    unique-stream "^2.0.2"
-
-glob-watcher@^0.0.6:
-  version "0.0.6"
-  resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b"
-  dependencies:
-    gaze "^0.5.1"
-
-glob2base@^0.0.12:
-  version "0.0.12"
-  resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"
-  dependencies:
-    find-index "^0.1.1"
-
-glob@^4.3.1:
-  version "4.5.3"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f"
-  dependencies:
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^2.0.1"
-    once "^1.3.0"
-
-glob@^5.0.12, glob@^5.0.3:
-  version "5.0.15"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
-  dependencies:
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "2 || 3"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1:
-  version "7.1.3"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
-  dependencies:
-    fs.realpath "^1.0.0"
-    inflight "^1.0.4"
-    inherits "2"
-    minimatch "^3.0.4"
-    once "^1.3.0"
-    path-is-absolute "^1.0.0"
-
-glob@~3.1.21:
-  version "3.1.21"
-  resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd"
-  dependencies:
-    graceful-fs "~1.2.0"
-    inherits "1"
-    minimatch "~0.2.11"
-
-global-modules@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
-  dependencies:
-    global-prefix "^1.0.1"
-    is-windows "^1.0.1"
-    resolve-dir "^1.0.0"
-
-global-prefix@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
-  dependencies:
-    expand-tilde "^2.0.2"
-    homedir-polyfill "^1.0.1"
-    ini "^1.3.4"
-    is-windows "^1.0.1"
-    which "^1.2.14"
-
-globals@^9.18.0:
-  version "9.18.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
-
-globby@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
-  dependencies:
-    array-union "^1.0.1"
-    arrify "^1.0.0"
-    glob "^7.0.3"
-    object-assign "^4.0.1"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-globby@^6.1.0:
-  version "6.1.0"
-  resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
-  dependencies:
-    array-union "^1.0.1"
-    glob "^7.0.3"
-    object-assign "^4.0.1"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-globule@^1.0.0:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d"
-  dependencies:
-    glob "~7.1.1"
-    lodash "~4.17.10"
-    minimatch "~3.0.2"
-
-globule@~0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5"
-  dependencies:
-    glob "~3.1.21"
-    lodash "~1.0.1"
-    minimatch "~0.2.11"
-
-glogg@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810"
-  dependencies:
-    sparkles "^1.0.0"
-
-got@^5.0.0:
-  version "5.7.1"
-  resolved "http://registry.npmjs.org/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35"
-  dependencies:
-    create-error-class "^3.0.1"
-    duplexer2 "^0.1.4"
-    is-redirect "^1.0.0"
-    is-retry-allowed "^1.0.0"
-    is-stream "^1.0.0"
-    lowercase-keys "^1.0.0"
-    node-status-codes "^1.0.0"
-    object-assign "^4.0.1"
-    parse-json "^2.1.0"
-    pinkie-promise "^2.0.0"
-    read-all-stream "^3.0.0"
-    readable-stream "^2.0.5"
-    timed-out "^3.0.0"
-    unzip-response "^1.0.2"
-    url-parse-lax "^1.0.0"
-
-graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
-  version "4.1.11"
-  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
-
-graceful-fs@^3.0.0:
-  version "3.0.11"
-  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818"
-  dependencies:
-    natives "^1.1.0"
-
-graceful-fs@~1.2.0:
-  version "1.2.3"
-  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364"
-
-"graceful-readlink@>= 1.0.0":
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
-
-growly@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
-
-gulp-autoprefixer@^3.1.1:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/gulp-autoprefixer/-/gulp-autoprefixer-3.1.1.tgz#75230051cd0d171343d783b7e9b5d1120eeef9b0"
-  dependencies:
-    autoprefixer "^6.0.0"
-    gulp-util "^3.0.0"
-    postcss "^5.0.4"
-    through2 "^2.0.0"
-    vinyl-sourcemaps-apply "^0.2.0"
-
-gulp-babel@^6.1.2:
-  version "6.1.3"
-  resolved "https://registry.yarnpkg.com/gulp-babel/-/gulp-babel-6.1.3.tgz#5aad8acb0db6b7f2f0be19eeee9528f2064df631"
-  dependencies:
-    babel-core "^6.23.1"
-    object-assign "^4.0.1"
-    plugin-error "^1.0.1"
-    replace-ext "0.0.1"
-    through2 "^2.0.0"
-    vinyl-sourcemaps-apply "^0.2.0"
-
-gulp-cache@^0.4.6:
-  version "0.4.6"
-  resolved "https://registry.yarnpkg.com/gulp-cache/-/gulp-cache-0.4.6.tgz#2d03b52db4f6a553ae1d5bef01e483e907e9f796"
-  dependencies:
-    bluebird "^3.0.5"
-    cache-swap "^0.3.0"
-    gulp-util "^3.0.7"
-    object-assign "^4.0.1"
-    object.omit "^2.0.0"
-    object.pick "^1.1.1"
-    readable-stream "^2.0.4"
-    try-json-parse "^0.1.1"
-    vinyl "^1.1.0"
-
-gulp-concat@^2.6.1:
-  version "2.6.1"
-  resolved "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.6.1.tgz#633d16c95d88504628ad02665663cee5a4793353"
-  dependencies:
-    concat-with-sourcemaps "^1.0.0"
-    through2 "^2.0.0"
-    vinyl "^2.0.0"
-
-gulp-cssnano@^2.1.2:
-  version "2.1.3"
-  resolved "https://registry.yarnpkg.com/gulp-cssnano/-/gulp-cssnano-2.1.3.tgz#02007e2817af09b3688482b430ad7db807aebf72"
-  dependencies:
-    buffer-from "^1.0.0"
-    cssnano "^3.0.0"
-    object-assign "^4.0.1"
-    plugin-error "^1.0.1"
-    vinyl-sourcemaps-apply "^0.2.1"
-
-gulp-decompress@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/gulp-decompress/-/gulp-decompress-1.2.0.tgz#8eeb65a5e015f8ed8532cafe28454960626f0dc7"
-  dependencies:
-    archive-type "^3.0.0"
-    decompress "^3.0.0"
-    gulp-util "^3.0.1"
-    readable-stream "^2.0.2"
-
-gulp-imagemin@^3.2.0:
-  version "3.4.0"
-  resolved "https://registry.yarnpkg.com/gulp-imagemin/-/gulp-imagemin-3.4.0.tgz#23a8d4c5133f50a2a708aca87ca4b2d6eb7c4403"
-  dependencies:
-    chalk "^2.1.0"
-    gulp-util "^3.0.8"
-    imagemin "^5.3.1"
-    plur "^2.1.2"
-    pretty-bytes "^4.0.2"
-    through2-concurrent "^1.1.1"
-  optionalDependencies:
-    imagemin-gifsicle "^5.2.0"
-    imagemin-jpegtran "^5.0.2"
-    imagemin-optipng "^5.2.1"
-    imagemin-svgo "^5.2.2"
-
-gulp-include@^2.3.1:
-  version "2.3.1"
-  resolved "https://registry.yarnpkg.com/gulp-include/-/gulp-include-2.3.1.tgz#f1e0ed3f0fd074c347c7e59f9cf038d3dbdb3e30"
-  dependencies:
-    event-stream "~3.1.0"
-    glob "^5.0.12"
-    gulp-util "~2.2.10"
-    source-map "^0.5.1"
-    strip-bom "^2.0.0"
-    vinyl-sourcemaps-apply "^0.2.0"
-
-gulp-insert@^0.5.0:
-  version "0.5.0"
-  resolved "https://registry.yarnpkg.com/gulp-insert/-/gulp-insert-0.5.0.tgz#32313f13e4a23cf5acca5ce5f0c080923c778602"
-  dependencies:
-    readable-stream "^1.0.26-4"
-    streamqueue "0.0.6"
-
-gulp-jshint@^2.0.4:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/gulp-jshint/-/gulp-jshint-2.1.0.tgz#bfaf927f78eee263c5bbac5f63e314d44a7bd41e"
-  dependencies:
-    lodash "^4.12.0"
-    minimatch "^3.0.3"
-    plugin-error "^0.1.2"
-    rcloader "^0.2.2"
-    through2 "^2.0.0"
-
-gulp-livereload@^3.8.1:
-  version "3.8.1"
-  resolved "https://registry.yarnpkg.com/gulp-livereload/-/gulp-livereload-3.8.1.tgz#00f744b2d749d3e9e3746589c8a44acac779b50f"
-  dependencies:
-    chalk "^0.5.1"
-    debug "^2.1.0"
-    event-stream "^3.1.7"
-    gulp-util "^3.0.2"
-    lodash.assign "^3.0.0"
-    mini-lr "^0.1.8"
-
-gulp-notify@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/gulp-notify/-/gulp-notify-3.2.0.tgz#2ae8225009df881eef59be5dd5a2f1337387764e"
-  dependencies:
-    ansi-colors "^1.0.1"
-    fancy-log "^1.3.2"
-    lodash.template "^4.4.0"
-    node-notifier "^5.2.1"
-    node.extend "^2.0.0"
-    plugin-error "^0.1.2"
-    through2 "^2.0.3"
-
-gulp-plumber@^1.1.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/gulp-plumber/-/gulp-plumber-1.2.0.tgz#18ea03912c9ee483f8a5499973b5954cd90f6ad8"
-  dependencies:
-    chalk "^1.1.3"
-    fancy-log "^1.3.2"
-    plugin-error "^0.1.2"
-    through2 "^2.0.3"
-
-gulp-rename@^1.2.0, gulp-rename@^1.2.2:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/gulp-rename/-/gulp-rename-1.4.0.tgz#de1c718e7c4095ae861f7296ef4f3248648240bd"
-
-gulp-sass@^3.1.0:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/gulp-sass/-/gulp-sass-3.2.1.tgz#2e3688a96fd8be1c0c01340750c191b2e79fab94"
-  dependencies:
-    gulp-util "^3.0"
-    lodash.clonedeep "^4.3.2"
-    node-sass "^4.8.3"
-    through2 "^2.0.0"
-    vinyl-sourcemaps-apply "^0.2.0"
-
-gulp-sourcemaps@1.6.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz#b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c"
-  dependencies:
-    convert-source-map "^1.1.1"
-    graceful-fs "^4.1.2"
-    strip-bom "^2.0.0"
-    through2 "^2.0.0"
-    vinyl "^1.0.0"
-
-gulp-sourcemaps@^2.6.0:
-  version "2.6.4"
-  resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-2.6.4.tgz#cbb2008450b1bcce6cd23bf98337be751bf6e30a"
-  dependencies:
-    "@gulp-sourcemaps/identity-map" "1.X"
-    "@gulp-sourcemaps/map-sources" "1.X"
-    acorn "5.X"
-    convert-source-map "1.X"
-    css "2.X"
-    debug-fabulous "1.X"
-    detect-newline "2.X"
-    graceful-fs "4.X"
-    source-map "~0.6.0"
-    strip-bom-string "1.X"
-    through2 "2.X"
-
-gulp-uglify@^2.1.2:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/gulp-uglify/-/gulp-uglify-2.1.2.tgz#6db85b1d0ee63d18058592b658649d65c2ec4541"
-  dependencies:
-    gulplog "^1.0.0"
-    has-gulplog "^0.1.0"
-    lodash "^4.13.1"
-    make-error-cause "^1.1.1"
-    through2 "^2.0.0"
-    uglify-js "~2.8.10"
-    uglify-save-license "^0.4.1"
-    vinyl-sourcemaps-apply "^0.2.0"
-
-gulp-util@^3.0, gulp-util@^3.0.0, gulp-util@^3.0.1, gulp-util@^3.0.2, gulp-util@^3.0.7, gulp-util@^3.0.8:
-  version "3.0.8"
-  resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f"
-  dependencies:
-    array-differ "^1.0.0"
-    array-uniq "^1.0.2"
-    beeper "^1.0.0"
-    chalk "^1.0.0"
-    dateformat "^2.0.0"
-    fancy-log "^1.1.0"
-    gulplog "^1.0.0"
-    has-gulplog "^0.1.0"
-    lodash._reescape "^3.0.0"
-    lodash._reevaluate "^3.0.0"
-    lodash._reinterpolate "^3.0.0"
-    lodash.template "^3.0.0"
-    minimist "^1.1.0"
-    multipipe "^0.1.2"
-    object-assign "^3.0.0"
-    replace-ext "0.0.1"
-    through2 "^2.0.0"
-    vinyl "^0.5.0"
-
-gulp-util@~2.2.10:
-  version "2.2.20"
-  resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-2.2.20.tgz#d7146e5728910bd8f047a6b0b1e549bc22dbd64c"
-  dependencies:
-    chalk "^0.5.0"
-    dateformat "^1.0.7-1.2.3"
-    lodash._reinterpolate "^2.4.1"
-    lodash.template "^2.4.1"
-    minimist "^0.2.0"
-    multipipe "^0.1.0"
-    through2 "^0.5.0"
-    vinyl "^0.2.1"
-
-gulp@^3.9.1:
-  version "3.9.1"
-  resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4"
-  dependencies:
-    archy "^1.0.0"
-    chalk "^1.0.0"
-    deprecated "^0.0.1"
-    gulp-util "^3.0.0"
-    interpret "^1.0.0"
-    liftoff "^2.1.0"
-    minimist "^1.1.0"
-    orchestrator "^0.3.0"
-    pretty-hrtime "^1.0.0"
-    semver "^4.1.0"
-    tildify "^1.0.0"
-    v8flags "^2.0.2"
-    vinyl-fs "^0.3.0"
-
-gulplog@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5"
-  dependencies:
-    glogg "^1.0.0"
-
-har-schema@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
-
-har-validator@~5.0.3:
-  version "5.0.3"
-  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
-  dependencies:
-    ajv "^5.1.0"
-    har-schema "^2.0.0"
-
-har-validator@~5.1.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29"
-  dependencies:
-    ajv "^5.3.0"
-    har-schema "^2.0.0"
-
-has-ansi@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e"
-  dependencies:
-    ansi-regex "^0.2.0"
-
-has-ansi@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
-  dependencies:
-    ansi-regex "^2.0.0"
-
-has-flag@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
-
-has-flag@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
-
-has-gulplog@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce"
-  dependencies:
-    sparkles "^1.0.0"
-
-has-unicode@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-
-has-value@^0.3.1:
-  version "0.3.1"
-  resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
-  dependencies:
-    get-value "^2.0.3"
-    has-values "^0.1.4"
-    isobject "^2.0.0"
-
-has-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
-  dependencies:
-    get-value "^2.0.6"
-    has-values "^1.0.0"
-    isobject "^3.0.0"
-
-has-values@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
-
-has-values@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
-  dependencies:
-    is-number "^3.0.0"
-    kind-of "^4.0.0"
-
-has@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
-  dependencies:
-    function-bind "^1.1.1"
-
-hasha@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/hasha/-/hasha-2.2.0.tgz#78d7cbfc1e6d66303fe79837365984517b2f6ee1"
-  dependencies:
-    is-stream "^1.0.1"
-    pinkie-promise "^2.0.0"
-
-home-or-tmp@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
-  dependencies:
-    os-homedir "^1.0.0"
-    os-tmpdir "^1.0.1"
-
-homedir-polyfill@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
-  dependencies:
-    parse-passwd "^1.0.0"
-
-hosted-git-info@^2.1.4:
-  version "2.7.1"
-  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
-
-html-comment-regex@^1.1.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
-
-htmlparser2@3.8.x:
-  version "3.8.3"
-  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068"
-  dependencies:
-    domelementtype "1"
-    domhandler "2.3"
-    domutils "1.5"
-    entities "1.0"
-    readable-stream "1.1"
-
-http-errors@~1.3.1:
-  version "1.3.1"
-  resolved "http://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz#197e22cdebd4198585e8694ef6786197b91ed942"
-  dependencies:
-    inherits "~2.0.1"
-    statuses "1"
-
-http-parser-js@>=0.4.0:
-  version "0.4.13"
-  resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137"
-
-http-signature@~1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
-  dependencies:
-    assert-plus "^1.0.0"
-    jsprim "^1.2.2"
-    sshpk "^1.7.0"
-
-iconv-lite@0.4.13:
-  version "0.4.13"
-  resolved "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
-
-imagemin-gifsicle@^5.2.0:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/imagemin-gifsicle/-/imagemin-gifsicle-5.2.0.tgz#3781524c457612ef04916af34241a2b42bfcb40a"
-  dependencies:
-    exec-buffer "^3.0.0"
-    gifsicle "^3.0.0"
-    is-gif "^1.0.0"
-
-imagemin-jpegtran@^5.0.2:
-  version "5.0.2"
-  resolved "https://registry.yarnpkg.com/imagemin-jpegtran/-/imagemin-jpegtran-5.0.2.tgz#e6882263b8f7916fddb800640cf75d2e970d2ad6"
-  dependencies:
-    exec-buffer "^3.0.0"
-    is-jpg "^1.0.0"
-    jpegtran-bin "^3.0.0"
-
-imagemin-optipng@^5.2.1:
-  version "5.2.1"
-  resolved "https://registry.yarnpkg.com/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz#d22da412c09f5ff00a4339960b98a88b1dbe8695"
-  dependencies:
-    exec-buffer "^3.0.0"
-    is-png "^1.0.0"
-    optipng-bin "^3.0.0"
-
-imagemin-svgo@^5.2.2:
-  version "5.2.4"
-  resolved "https://registry.yarnpkg.com/imagemin-svgo/-/imagemin-svgo-5.2.4.tgz#6cd5d342cae4bcd8b483594e5315695df02b9e9b"
-  dependencies:
-    is-svg "^2.0.0"
-    svgo "^0.7.0"
-
-imagemin@^5.3.1:
-  version "5.3.1"
-  resolved "https://registry.yarnpkg.com/imagemin/-/imagemin-5.3.1.tgz#f19c2eee1e71ba6c6558c515f9fc96680189a6d4"
-  dependencies:
-    file-type "^4.1.0"
-    globby "^6.1.0"
-    make-dir "^1.0.0"
-    p-pipe "^1.1.0"
-    pify "^2.3.0"
-    replace-ext "^1.0.0"
-
-in-publish@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
-
-indent-string@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
-  dependencies:
-    repeating "^2.0.0"
-
-indexes-of@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
-
-inflight@^1.0.4:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
-  dependencies:
-    once "^1.3.0"
-    wrappy "1"
-
-inherits@1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
-
-inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-
-ini@^1.3.4, ini@~1.3.0:
-  version "1.3.5"
-  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
-
-interpret@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
-
-invariant@^2.2.2:
-  version "2.2.4"
-  resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
-  dependencies:
-    loose-envify "^1.0.0"
-
-invert-kv@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-
-ip-regex@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd"
-
-irregular-plurals@^1.0.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-1.4.0.tgz#2ca9b033651111855412f16be5d77c62a458a766"
-
-is-absolute-url@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
-
-is-absolute@^0.1.5:
-  version "0.1.7"
-  resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.1.7.tgz#847491119fccb5fb436217cc737f7faad50f603f"
-  dependencies:
-    is-relative "^0.1.0"
-
-is-absolute@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576"
-  dependencies:
-    is-relative "^1.0.0"
-    is-windows "^1.0.1"
-
-is-accessor-descriptor@^0.1.6:
-  version "0.1.6"
-  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
-  dependencies:
-    kind-of "^3.0.2"
-
-is-accessor-descriptor@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
-  dependencies:
-    kind-of "^6.0.0"
-
-is-arrayish@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-
-is-buffer@^1.1.5:
-  version "1.1.6"
-  resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
-
-is-builtin-module@^1.0.0:
-  version "1.0.0"
-  resolved "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
-  dependencies:
-    builtin-modules "^1.0.0"
-
-is-bzip2@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-bzip2/-/is-bzip2-1.0.0.tgz#5ee58eaa5a2e9c80e21407bedf23ae5ac091b3fc"
-
-is-data-descriptor@^0.1.4:
-  version "0.1.4"
-  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
-  dependencies:
-    kind-of "^3.0.2"
-
-is-data-descriptor@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
-  dependencies:
-    kind-of "^6.0.0"
-
-is-descriptor@^0.1.0:
-  version "0.1.6"
-  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
-  dependencies:
-    is-accessor-descriptor "^0.1.6"
-    is-data-descriptor "^0.1.4"
-    kind-of "^5.0.0"
-
-is-descriptor@^1.0.0, is-descriptor@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
-  dependencies:
-    is-accessor-descriptor "^1.0.0"
-    is-data-descriptor "^1.0.0"
-    kind-of "^6.0.2"
-
-is-dotfile@^1.0.0:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
-
-is-equal-shallow@^0.1.3:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
-  dependencies:
-    is-primitive "^2.0.0"
-
-is-extendable@^0.1.0, is-extendable@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
-
-is-extendable@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
-  dependencies:
-    is-plain-object "^2.0.4"
-
-is-extglob@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
-
-is-extglob@^2.1.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
-
-is-finite@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
-  dependencies:
-    number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
-  dependencies:
-    number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
-
-is-gif@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-gif/-/is-gif-1.0.0.tgz#a6d2ae98893007bffa97a1d8c01d63205832097e"
-
-is-glob@^2.0.0, is-glob@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
-  dependencies:
-    is-extglob "^1.0.0"
-
-is-glob@^3.1.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
-  dependencies:
-    is-extglob "^2.1.0"
-
-is-gzip@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83"
-
-is-jpg@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-jpg/-/is-jpg-1.0.1.tgz#296d57fdd99ce010434a7283e346ab9a1035e975"
-
-is-natural-number@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/is-natural-number/-/is-natural-number-2.1.1.tgz#7d4c5728377ef386c3e194a9911bf57c6dc335e7"
-
-is-number@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
-  dependencies:
-    kind-of "^3.0.2"
-
-is-number@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
-  dependencies:
-    kind-of "^3.0.2"
-
-is-number@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
-
-is-obj@^1.0.0:
-  version "1.0.1"
-  resolved "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
-
-is-path-cwd@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
-
-is-path-in-cwd@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
-  dependencies:
-    is-path-inside "^1.0.0"
-
-is-path-inside@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
-  dependencies:
-    path-is-inside "^1.0.1"
-
-is-plain-obj@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
-
-is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
-  dependencies:
-    isobject "^3.0.1"
-
-is-png@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/is-png/-/is-png-1.1.0.tgz#d574b12bf275c0350455570b0e5b57ab062077ce"
-
-is-posix-bracket@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
-
-is-primitive@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
-
-is-promise@^2.1:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
-
-is-redirect@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
-
-is-relative@^0.1.0:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.1.3.tgz#905fee8ae86f45b3ec614bc3c15c869df0876e82"
-
-is-relative@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d"
-  dependencies:
-    is-unc-path "^1.0.0"
-
-is-retry-allowed@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
-
-is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
-
-is-svg@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
-  dependencies:
-    html-comment-regex "^1.1.0"
-
-is-tar@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-tar/-/is-tar-1.0.0.tgz#2f6b2e1792c1f5bb36519acaa9d65c0d26fe853d"
-
-is-typedarray@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-
-is-unc-path@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d"
-  dependencies:
-    unc-path-regex "^0.1.2"
-
-is-url@^1.2.0:
-  version "1.2.4"
-  resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52"
-
-is-utf8@^0.2.0:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
-
-is-valid-glob@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-0.3.0.tgz#d4b55c69f51886f9b65c70d6c2622d37e29f48fe"
-
-is-windows@^1.0.1, is-windows@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
-
-is-zip@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/is-zip/-/is-zip-1.0.0.tgz#47b0a8ff4d38a76431ccfd99a8e15a4c86ba2325"
-
-is@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/is/-/is-3.2.1.tgz#d0ac2ad55eb7b0bec926a5266f6c662aaa83dca5"
-
-isarray@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
-
-isarray@1.0.0, isarray@~1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-
-isexe@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
-
-isobject@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
-  dependencies:
-    isarray "1.0.0"
-
-isobject@^3.0.0, isobject@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
-
-isstream@0.1.x, isstream@~0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-
-jpegtran-bin@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/jpegtran-bin/-/jpegtran-bin-3.2.0.tgz#f60ecf4ae999c0bdad2e9fbcdf2b6f0981e7a29b"
-  dependencies:
-    bin-build "^2.0.0"
-    bin-wrapper "^3.0.0"
-    logalot "^2.0.0"
-
-js-base64@^2.1.8, js-base64@^2.1.9:
-  version "2.4.9"
-  resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03"
-
-"js-tokens@^3.0.0 || ^4.0.0":
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
-
-js-tokens@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
-
-js-yaml@~3.7.0:
-  version "3.7.0"
-  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
-  dependencies:
-    argparse "^1.0.7"
-    esprima "^2.6.0"
-
-jsbn@~0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
-
-jsesc@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
-
-jsesc@~0.5.0:
-  version "0.5.0"
-  resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
-
-jshint@^2.9.4:
-  version "2.9.6"
-  resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.9.6.tgz#19b34e578095a34928fe006135a6cb70137b9c08"
-  dependencies:
-    cli "~1.0.0"
-    console-browserify "1.1.x"
-    exit "0.1.x"
-    htmlparser2 "3.8.x"
-    lodash "~4.17.10"
-    minimatch "~3.0.2"
-    shelljs "0.3.x"
-    strip-json-comments "1.0.x"
-    unicode-5.2.0 "^0.7.5"
-  optionalDependencies:
-    phantom "~4.0.1"
-    phantomjs-prebuilt "~2.1.7"
-
-json-schema-traverse@^0.3.0:
-  version "0.3.1"
-  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
-
-json-schema@0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-
-json-stable-stringify@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
-  dependencies:
-    jsonify "~0.0.0"
-
-json-stringify-safe@~5.0.1:
-  version "5.0.1"
-  resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-
-json5@^0.5.1:
-  version "0.5.1"
-  resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
-
-jsonfile@^2.1.0:
-  version "2.4.0"
-  resolved "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
-  optionalDependencies:
-    graceful-fs "^4.1.6"
-
-jsonify@~0.0.0:
-  version "0.0.0"
-  resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
-
-jsprim@^1.2.2:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
-  dependencies:
-    assert-plus "1.0.0"
-    extsprintf "1.3.0"
-    json-schema "0.2.3"
-    verror "1.10.0"
-
-kew@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
-
-kind-of@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44"
-
-kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
-  version "3.2.2"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
-  dependencies:
-    is-buffer "^1.1.5"
-
-kind-of@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
-  dependencies:
-    is-buffer "^1.1.5"
-
-kind-of@^5.0.0:
-  version "5.1.0"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
-
-kind-of@^6.0.0, kind-of@^6.0.2:
-  version "6.0.2"
-  resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
-
-klaw@^1.0.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
-  optionalDependencies:
-    graceful-fs "^4.1.9"
-
-lazy-cache@^1.0.3:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
-
-lazy-req@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac"
-
-lazystream@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4"
-  dependencies:
-    readable-stream "^2.0.5"
-
-lcid@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
-  dependencies:
-    invert-kv "^1.0.0"
-
-liftoff@^2.1.0:
-  version "2.5.0"
-  resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec"
-  dependencies:
-    extend "^3.0.0"
-    findup-sync "^2.0.0"
-    fined "^1.0.1"
-    flagged-respawn "^1.0.0"
-    is-plain-object "^2.0.4"
-    object.map "^1.0.0"
-    rechoir "^0.6.2"
-    resolve "^1.1.7"
-
-livereload-js@^2.2.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.3.0.tgz#c3ab22e8aaf5bf3505d80d098cbad67726548c9a"
-
-load-json-file@^1.0.0:
-  version "1.1.0"
-  resolved "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
-  dependencies:
-    graceful-fs "^4.1.2"
-    parse-json "^2.2.0"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-    strip-bom "^2.0.0"
-
-lodash._baseassign@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e"
-  dependencies:
-    lodash._basecopy "^3.0.0"
-    lodash.keys "^3.0.0"
-
-lodash._basecopy@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
-
-lodash._basetostring@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5"
-
-lodash._basevalues@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7"
-
-lodash._bindcallback@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e"
-
-lodash._createassigner@^3.0.0:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11"
-  dependencies:
-    lodash._bindcallback "^3.0.0"
-    lodash._isiterateecall "^3.0.0"
-    lodash.restparam "^3.0.0"
-
-lodash._escapehtmlchar@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz#df67c3bb6b7e8e1e831ab48bfa0795b92afe899d"
-  dependencies:
-    lodash._htmlescapes "~2.4.1"
-
-lodash._escapestringchar@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz#ecfe22618a2ade50bfeea43937e51df66f0edb72"
-
-lodash._getnative@^3.0.0:
-  version "3.9.1"
-  resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
-
-lodash._htmlescapes@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz#32d14bf0844b6de6f8b62a051b4f67c228b624cb"
-
-lodash._isiterateecall@^3.0.0:
-  version "3.0.9"
-  resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
-
-lodash._isnative@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash._isnative/-/lodash._isnative-2.4.1.tgz#3ea6404b784a7be836c7b57580e1cdf79b14832c"
-
-lodash._objecttypes@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz#7c0b7f69d98a1f76529f890b0cdb1b4dfec11c11"
-
-lodash._reescape@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a"
-
-lodash._reevaluate@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed"
-
-lodash._reinterpolate@^2.4.1, lodash._reinterpolate@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz#4f1227aa5a8711fc632f5b07a1f4607aab8b3222"
-
-lodash._reinterpolate@^3.0.0, lodash._reinterpolate@~3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
-
-lodash._reunescapedhtml@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz#747c4fc40103eb3bb8a0976e571f7a2659e93ba7"
-  dependencies:
-    lodash._htmlescapes "~2.4.1"
-    lodash.keys "~2.4.1"
-
-lodash._root@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
-
-lodash._shimkeys@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz#6e9cc9666ff081f0b5a6c978b83e242e6949d203"
-  dependencies:
-    lodash._objecttypes "~2.4.1"
-
-lodash.assign@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa"
-  dependencies:
-    lodash._baseassign "^3.0.0"
-    lodash._createassigner "^3.0.0"
-    lodash.keys "^3.0.0"
-
-lodash.assign@^4.2.0:
-  version "4.2.0"
-  resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
-
-lodash.clonedeep@^4.3.2:
-  version "4.5.0"
-  resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
-
-lodash.defaults@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-2.4.1.tgz#a7e8885f05e68851144b6e12a8f3678026bc4c54"
-  dependencies:
-    lodash._objecttypes "~2.4.1"
-    lodash.keys "~2.4.1"
-
-lodash.escape@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698"
-  dependencies:
-    lodash._root "^3.0.0"
-
-lodash.escape@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-2.4.1.tgz#2ce12c5e084db0a57dda5e5d1eeeb9f5d175a3b4"
-  dependencies:
-    lodash._escapehtmlchar "~2.4.1"
-    lodash._reunescapedhtml "~2.4.1"
-    lodash.keys "~2.4.1"
-
-lodash.isarguments@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
-
-lodash.isarray@^3.0.0:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
-
-lodash.isequal@^4.0.0:
-  version "4.5.0"
-  resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
-
-lodash.isobject@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d"
-
-lodash.isobject@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-2.4.1.tgz#5a2e47fe69953f1ee631a7eba1fe64d2d06558f5"
-  dependencies:
-    lodash._objecttypes "~2.4.1"
-
-lodash.keys@^3.0.0:
-  version "3.1.2"
-  resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
-  dependencies:
-    lodash._getnative "^3.0.0"
-    lodash.isarguments "^3.0.0"
-    lodash.isarray "^3.0.0"
-
-lodash.keys@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-2.4.1.tgz#48dea46df8ff7632b10d706b8acb26591e2b3727"
-  dependencies:
-    lodash._isnative "~2.4.1"
-    lodash._shimkeys "~2.4.1"
-    lodash.isobject "~2.4.1"
-
-lodash.memoize@^4.1.2:
-  version "4.1.2"
-  resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
-
-lodash.merge@^4.6.0:
-  version "4.6.1"
-  resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54"
-
-lodash.mergewith@^4.6.0:
-  version "4.6.1"
-  resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
-
-lodash.restparam@^3.0.0:
-  version "3.6.1"
-  resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
-
-lodash.template@^2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-2.4.1.tgz#9e611007edf629129a974ab3c48b817b3e1cf20d"
-  dependencies:
-    lodash._escapestringchar "~2.4.1"
-    lodash._reinterpolate "~2.4.1"
-    lodash.defaults "~2.4.1"
-    lodash.escape "~2.4.1"
-    lodash.keys "~2.4.1"
-    lodash.templatesettings "~2.4.1"
-    lodash.values "~2.4.1"
-
-lodash.template@^3.0.0:
-  version "3.6.2"
-  resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f"
-  dependencies:
-    lodash._basecopy "^3.0.0"
-    lodash._basetostring "^3.0.0"
-    lodash._basevalues "^3.0.0"
-    lodash._isiterateecall "^3.0.0"
-    lodash._reinterpolate "^3.0.0"
-    lodash.escape "^3.0.0"
-    lodash.keys "^3.0.0"
-    lodash.restparam "^3.0.0"
-    lodash.templatesettings "^3.0.0"
-
-lodash.template@^4.4.0:
-  version "4.4.0"
-  resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
-  dependencies:
-    lodash._reinterpolate "~3.0.0"
-    lodash.templatesettings "^4.0.0"
-
-lodash.templatesettings@^3.0.0:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5"
-  dependencies:
-    lodash._reinterpolate "^3.0.0"
-    lodash.escape "^3.0.0"
-
-lodash.templatesettings@^4.0.0:
-  version "4.1.0"
-  resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316"
-  dependencies:
-    lodash._reinterpolate "~3.0.0"
-
-lodash.templatesettings@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz#ea76c75d11eb86d4dbe89a83893bb861929ac699"
-  dependencies:
-    lodash._reinterpolate "~2.4.1"
-    lodash.escape "~2.4.1"
-
-lodash.uniq@^4.5.0:
-  version "4.5.0"
-  resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
-
-lodash.values@~2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-2.4.1.tgz#abf514436b3cb705001627978cbcf30b1280eea4"
-  dependencies:
-    lodash.keys "~2.4.1"
-
-lodash@^4.0.0, lodash@^4.12.0, lodash@^4.13.1, lodash@^4.17.4, lodash@~4.17.10:
-  version "4.17.11"
-  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
-
-lodash@~1.0.1:
-  version "1.0.2"
-  resolved "http://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551"
-
-logalot@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/logalot/-/logalot-2.1.0.tgz#5f8e8c90d304edf12530951a5554abb8c5e3f552"
-  dependencies:
-    figures "^1.3.5"
-    squeak "^1.0.0"
-
-longest@^1.0.0, longest@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-
-loose-envify@^1.0.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
-  dependencies:
-    js-tokens "^3.0.0 || ^4.0.0"
-
-loud-rejection@^1.0.0:
-  version "1.6.0"
-  resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
-  dependencies:
-    currently-unhandled "^0.4.1"
-    signal-exit "^3.0.0"
-
-lowercase-keys@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
-
-lpad-align@^1.0.1:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/lpad-align/-/lpad-align-1.1.2.tgz#21f600ac1c3095c3c6e497ee67271ee08481fe9e"
-  dependencies:
-    get-stdin "^4.0.1"
-    indent-string "^2.1.0"
-    longest "^1.0.0"
-    meow "^3.3.0"
-
-lru-cache@2:
-  version "2.7.3"
-  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
-
-lru-cache@^4.0.1:
-  version "4.1.3"
-  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
-  dependencies:
-    pseudomap "^1.0.2"
-    yallist "^2.1.2"
-
-lru-queue@0.1:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3"
-  dependencies:
-    es5-ext "~0.10.2"
-
-make-dir@^1.0.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
-  dependencies:
-    pify "^3.0.0"
-
-make-error-cause@^1.1.1:
-  version "1.2.2"
-  resolved "https://registry.yarnpkg.com/make-error-cause/-/make-error-cause-1.2.2.tgz#df0388fcd0b37816dff0a5fb8108939777dcbc9d"
-  dependencies:
-    make-error "^1.2.0"
-
-make-error@^1.2.0:
-  version "1.3.5"
-  resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8"
-
-make-iterator@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6"
-  dependencies:
-    kind-of "^6.0.2"
-
-map-cache@^0.2.0, map-cache@^0.2.2:
-  version "0.2.2"
-  resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
-
-map-obj@^1.0.0, map-obj@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
-
-map-stream@0.0.7:
-  version "0.0.7"
-  resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.0.7.tgz#8a1f07896d82b10926bd3744a2420009f88974a8"
-
-map-stream@~0.1.0:
-  version "0.1.0"
-  resolved "http://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194"
-
-map-visit@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
-  dependencies:
-    object-visit "^1.0.0"
-
-math-expression-evaluator@^1.2.14:
-  version "1.2.17"
-  resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
-
-math-random@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac"
-
-media-typer@0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
-
-memoizee@0.4.X:
-  version "0.4.14"
-  resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57"
-  dependencies:
-    d "1"
-    es5-ext "^0.10.45"
-    es6-weak-map "^2.0.2"
-    event-emitter "^0.3.5"
-    is-promise "^2.1"
-    lru-queue "0.1"
-    next-tick "1"
-    timers-ext "^0.1.5"
-
-meow@^3.1.0, meow@^3.3.0, meow@^3.5.0, meow@^3.7.0:
-  version "3.7.0"
-  resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
-  dependencies:
-    camelcase-keys "^2.0.0"
-    decamelize "^1.1.2"
-    loud-rejection "^1.0.0"
-    map-obj "^1.0.1"
-    minimist "^1.1.3"
-    normalize-package-data "^2.3.4"
-    object-assign "^4.0.1"
-    read-pkg-up "^1.0.1"
-    redent "^1.0.0"
-    trim-newlines "^1.0.0"
-
-merge-stream@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1"
-  dependencies:
-    readable-stream "^2.0.1"
-
-micromatch@^2.3.7:
-  version "2.3.11"
-  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
-  dependencies:
-    arr-diff "^2.0.0"
-    array-unique "^0.2.1"
-    braces "^1.8.2"
-    expand-brackets "^0.1.4"
-    extglob "^0.3.1"
-    filename-regex "^2.0.0"
-    is-extglob "^1.0.0"
-    is-glob "^2.0.1"
-    kind-of "^3.0.2"
-    normalize-path "^2.0.1"
-    object.omit "^2.0.0"
-    parse-glob "^3.0.4"
-    regex-cache "^0.4.2"
-
-micromatch@^3.0.4:
-  version "3.1.10"
-  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
-  dependencies:
-    arr-diff "^4.0.0"
-    array-unique "^0.3.2"
-    braces "^2.3.1"
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    extglob "^2.0.4"
-    fragment-cache "^0.2.1"
-    kind-of "^6.0.2"
-    nanomatch "^1.2.9"
-    object.pick "^1.3.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.2"
-
-mime-db@~1.36.0:
-  version "1.36.0"
-  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397"
-
-mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19:
-  version "2.1.20"
-  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19"
-  dependencies:
-    mime-db "~1.36.0"
-
-mini-lr@^0.1.8:
-  version "0.1.9"
-  resolved "https://registry.yarnpkg.com/mini-lr/-/mini-lr-0.1.9.tgz#02199d27347953d1fd1d6dbded4261f187b2d0f6"
-  dependencies:
-    body-parser "~1.14.0"
-    debug "^2.2.0"
-    faye-websocket "~0.7.2"
-    livereload-js "^2.2.0"
-    parseurl "~1.3.0"
-    qs "~2.2.3"
-
-"minimatch@2 || 3", minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
-  dependencies:
-    brace-expansion "^1.1.7"
-
-minimatch@^2.0.1:
-  version "2.0.10"
-  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
-  dependencies:
-    brace-expansion "^1.0.0"
-
-minimatch@~0.2.11:
-  version "0.2.14"
-  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a"
-  dependencies:
-    lru-cache "2"
-    sigmund "~1.0.0"
-
-minimist@0.0.8:
-  version "0.0.8"
-  resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-
-minimist@^0.2.0:
-  version "0.2.0"
-  resolved "http://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz#4dffe525dae2b864c66c2e23c6271d7afdecefce"
-
-minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0:
-  version "1.2.0"
-  resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-
-mixin-deep@^1.2.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
-  dependencies:
-    for-in "^1.0.2"
-    is-extendable "^1.0.1"
-
-mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
-  version "0.5.1"
-  resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
-  dependencies:
-    minimist "0.0.8"
-
-ms@0.7.1:
-  version "0.7.1"
-  resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
-
-ms@2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
-
-ms@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
-
-multipipe@^0.1.0, multipipe@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"
-  dependencies:
-    duplexer2 "0.0.2"
-
-nan@^2.10.0:
-  version "2.11.0"
-  resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.0.tgz#574e360e4d954ab16966ec102c0c049fd961a099"
-
-nanomatch@^1.2.9:
-  version "1.2.13"
-  resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
-  dependencies:
-    arr-diff "^4.0.0"
-    array-unique "^0.3.2"
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    fragment-cache "^0.2.1"
-    is-windows "^1.0.2"
-    kind-of "^6.0.2"
-    object.pick "^1.3.0"
-    regex-not "^1.0.0"
-    snapdragon "^0.8.1"
-    to-regex "^3.0.1"
-
-natives@^1.1.0:
-  version "1.1.5"
-  resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.5.tgz#3bdbdb4104023e5dd239b56fc7ef3d9a17acc6aa"
-
-next-tick@1:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
-
-node-gyp@^3.8.0:
-  version "3.8.0"
-  resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
-  dependencies:
-    fstream "^1.0.0"
-    glob "^7.0.3"
-    graceful-fs "^4.1.2"
-    mkdirp "^0.5.0"
-    nopt "2 || 3"
-    npmlog "0 || 1 || 2 || 3 || 4"
-    osenv "0"
-    request "^2.87.0"
-    rimraf "2"
-    semver "~5.3.0"
-    tar "^2.0.0"
-    which "1"
-
-node-notifier@^5.2.1:
-  version "5.2.1"
-  resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea"
-  dependencies:
-    growly "^1.3.0"
-    semver "^5.4.1"
-    shellwords "^0.1.1"
-    which "^1.3.0"
-
-node-sass@^4.8.3:
-  version "4.9.3"
-  resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.9.3.tgz#f407cf3d66f78308bb1e346b24fa428703196224"
-  dependencies:
-    async-foreach "^0.1.3"
-    chalk "^1.1.1"
-    cross-spawn "^3.0.0"
-    gaze "^1.0.0"
-    get-stdin "^4.0.1"
-    glob "^7.0.3"
-    in-publish "^2.0.0"
-    lodash.assign "^4.2.0"
-    lodash.clonedeep "^4.3.2"
-    lodash.mergewith "^4.6.0"
-    meow "^3.7.0"
-    mkdirp "^0.5.1"
-    nan "^2.10.0"
-    node-gyp "^3.8.0"
-    npmlog "^4.0.0"
-    request "2.87.0"
-    sass-graph "^2.2.4"
-    stdout-stream "^1.4.0"
-    "true-case-path" "^1.0.2"
-
-node-status-codes@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f"
-
-node.extend@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/node.extend/-/node.extend-2.0.0.tgz#7525a2875677ea534784a5e10ac78956139614df"
-  dependencies:
-    is "^3.2.1"
-
-"nopt@2 || 3":
-  version "3.0.6"
-  resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
-  dependencies:
-    abbrev "1"
-
-normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
-  version "2.4.0"
-  resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
-  dependencies:
-    hosted-git-info "^2.1.4"
-    is-builtin-module "^1.0.0"
-    semver "2 || 3 || 4 || 5"
-    validate-npm-package-license "^3.0.1"
-
-normalize-path@^2.0.1, normalize-path@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
-  dependencies:
-    remove-trailing-separator "^1.0.1"
-
-normalize-range@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
-
-normalize-url@^1.4.0:
-  version "1.9.1"
-  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
-  dependencies:
-    object-assign "^4.0.1"
-    prepend-http "^1.0.0"
-    query-string "^4.1.0"
-    sort-keys "^1.0.0"
-
-npm-run-path@^2.0.0:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
-  dependencies:
-    path-key "^2.0.0"
-
-"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0:
-  version "4.1.2"
-  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
-  dependencies:
-    are-we-there-yet "~1.1.2"
-    console-control-strings "~1.1.0"
-    gauge "~2.7.3"
-    set-blocking "~2.0.0"
-
-num2fraction@^1.2.2:
-  version "1.2.2"
-  resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
-
-number-is-nan@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-
-oauth-sign@~0.8.2:
-  version "0.8.2"
-  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
-
-oauth-sign@~0.9.0:
-  version "0.9.0"
-  resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
-
-object-assign@4.X, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0:
-  version "4.1.1"
-  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
-
-object-assign@^2.0.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
-
-object-assign@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
-
-object-copy@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
-  dependencies:
-    copy-descriptor "^0.1.0"
-    define-property "^0.2.5"
-    kind-of "^3.0.3"
-
-object-visit@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
-  dependencies:
-    isobject "^3.0.0"
-
-object.defaults@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf"
-  dependencies:
-    array-each "^1.0.1"
-    array-slice "^1.0.0"
-    for-own "^1.0.0"
-    isobject "^3.0.0"
-
-object.map@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37"
-  dependencies:
-    for-own "^1.0.0"
-    make-iterator "^1.0.0"
-
-object.omit@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
-  dependencies:
-    for-own "^0.1.4"
-    is-extendable "^0.1.1"
-
-object.pick@^1.1.1, object.pick@^1.2.0, object.pick@^1.3.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
-  dependencies:
-    isobject "^3.0.1"
-
-on-finished@~2.3.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
-  dependencies:
-    ee-first "1.1.1"
-
-once@^1.3.0, once@^1.4.0:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
-  dependencies:
-    wrappy "1"
-
-once@~1.3.0:
-  version "1.3.3"
-  resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
-  dependencies:
-    wrappy "1"
-
-onetime@^1.0.0:
-  version "1.1.0"
-  resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
-
-optipng-bin@^3.0.0:
-  version "3.1.4"
-  resolved "https://registry.yarnpkg.com/optipng-bin/-/optipng-bin-3.1.4.tgz#95d34f2c488704f6fd70606bfea0c659f1d95d84"
-  dependencies:
-    bin-build "^2.0.0"
-    bin-wrapper "^3.0.0"
-    logalot "^2.0.0"
-
-orchestrator@^0.3.0:
-  version "0.3.8"
-  resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e"
-  dependencies:
-    end-of-stream "~0.1.5"
-    sequencify "~0.0.7"
-    stream-consume "~0.1.0"
-
-ordered-read-streams@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126"
-
-ordered-read-streams@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz#7137e69b3298bb342247a1bbee3881c80e2fd78b"
-  dependencies:
-    is-stream "^1.0.1"
-    readable-stream "^2.0.1"
-
-os-filter-obj@^1.0.0:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/os-filter-obj/-/os-filter-obj-1.0.3.tgz#5915330d90eced557d2d938a31c6dd214d9c63ad"
-
-os-homedir@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
-
-os-locale@^1.4.0:
-  version "1.4.0"
-  resolved "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
-  dependencies:
-    lcid "^1.0.0"
-
-os-tmpdir@^1.0.0, os-tmpdir@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
-
-osenv@0:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
-  dependencies:
-    os-homedir "^1.0.0"
-    os-tmpdir "^1.0.0"
-
-p-finally@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
-
-p-pipe@^1.1.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/p-pipe/-/p-pipe-1.2.0.tgz#4b1a11399a11520a67790ee5a0c1d5881d6befe9"
-
-parse-filepath@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891"
-  dependencies:
-    is-absolute "^1.0.0"
-    map-cache "^0.2.0"
-    path-root "^0.1.1"
-
-parse-glob@^3.0.4:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
-  dependencies:
-    glob-base "^0.3.0"
-    is-dotfile "^1.0.0"
-    is-extglob "^1.0.0"
-    is-glob "^2.0.0"
-
-parse-json@^2.1.0, parse-json@^2.2.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
-  dependencies:
-    error-ex "^1.2.0"
-
-parse-passwd@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
-
-parseurl@~1.3.0:
-  version "1.3.2"
-  resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
-
-pascalcase@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
-
-path-dirname@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
-
-path-exists@^2.0.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
-  dependencies:
-    pinkie-promise "^2.0.0"
-
-path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-
-path-is-inside@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
-
-path-key@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
-
-path-parse@^1.0.5:
-  version "1.0.6"
-  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
-
-path-root-regex@^0.1.0:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"
-
-path-root@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7"
-  dependencies:
-    path-root-regex "^0.1.0"
-
-path-type@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
-  dependencies:
-    graceful-fs "^4.1.2"
-    pify "^2.0.0"
-    pinkie-promise "^2.0.0"
-
-pause-stream@0.0.11, pause-stream@^0.0.11:
-  version "0.0.11"
-  resolved "http://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445"
-  dependencies:
-    through "~2.3"
-
-pend@~1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
-
-performance-now@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
-
-phantom@~4.0.1:
-  version "4.0.12"
-  resolved "https://registry.yarnpkg.com/phantom/-/phantom-4.0.12.tgz#78d18cf3f2a76fea4909f6160fcabf2742d7dbf0"
-  dependencies:
-    phantomjs-prebuilt "^2.1.16"
-    split "^1.0.1"
-    winston "^2.4.0"
-
-phantomjs-prebuilt@^2.1.16, phantomjs-prebuilt@~2.1.7:
-  version "2.1.16"
-  resolved "https://registry.yarnpkg.com/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz#efd212a4a3966d3647684ea8ba788549be2aefef"
-  dependencies:
-    es6-promise "^4.0.3"
-    extract-zip "^1.6.5"
-    fs-extra "^1.0.0"
-    hasha "^2.2.0"
-    kew "^0.7.0"
-    progress "^1.1.8"
-    request "^2.81.0"
-    request-progress "^2.0.1"
-    which "^1.2.10"
-
-pify@^2.0.0, pify@^2.3.0:
-  version "2.3.0"
-  resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
-
-pify@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
-
-pinkie-promise@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
-  dependencies:
-    pinkie "^2.0.0"
-
-pinkie@^2.0.0:
-  version "2.0.4"
-  resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
-
-plugin-error@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace"
-  dependencies:
-    ansi-cyan "^0.1.1"
-    ansi-red "^0.1.1"
-    arr-diff "^1.0.1"
-    arr-union "^2.0.1"
-    extend-shallow "^1.1.2"
-
-plugin-error@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-1.0.1.tgz#77016bd8919d0ac377fdcdd0322328953ca5781c"
-  dependencies:
-    ansi-colors "^1.0.1"
-    arr-diff "^4.0.0"
-    arr-union "^3.1.0"
-    extend-shallow "^3.0.2"
-
-plur@^2.1.2:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/plur/-/plur-2.1.2.tgz#7482452c1a0f508e3e344eaec312c91c29dc655a"
-  dependencies:
-    irregular-plurals "^1.0.0"
-
-posix-character-classes@^0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
-
-postcss-calc@^5.2.0:
-  version "5.3.1"
-  resolved "http://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
-  dependencies:
-    postcss "^5.0.2"
-    postcss-message-helpers "^2.0.0"
-    reduce-css-calc "^1.2.6"
-
-postcss-colormin@^2.1.8:
-  version "2.2.2"
-  resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
-  dependencies:
-    colormin "^1.0.5"
-    postcss "^5.0.13"
-    postcss-value-parser "^3.2.3"
-
-postcss-convert-values@^2.3.4:
-  version "2.6.1"
-  resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
-  dependencies:
-    postcss "^5.0.11"
-    postcss-value-parser "^3.1.2"
-
-postcss-discard-comments@^2.0.4:
-  version "2.0.4"
-  resolved "http://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
-  dependencies:
-    postcss "^5.0.14"
-
-postcss-discard-duplicates@^2.0.1:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
-  dependencies:
-    postcss "^5.0.4"
-
-postcss-discard-empty@^2.0.1:
-  version "2.1.0"
-  resolved "http://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
-  dependencies:
-    postcss "^5.0.14"
-
-postcss-discard-overridden@^0.1.1:
-  version "0.1.1"
-  resolved "http://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
-  dependencies:
-    postcss "^5.0.16"
-
-postcss-discard-unused@^2.2.1:
-  version "2.2.3"
-  resolved "http://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
-  dependencies:
-    postcss "^5.0.14"
-    uniqs "^2.0.0"
-
-postcss-filter-plugins@^2.0.0:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec"
-  dependencies:
-    postcss "^5.0.4"
-
-postcss-merge-idents@^2.1.5:
-  version "2.1.7"
-  resolved "http://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
-  dependencies:
-    has "^1.0.1"
-    postcss "^5.0.10"
-    postcss-value-parser "^3.1.1"
-
-postcss-merge-longhand@^2.0.1:
-  version "2.0.2"
-  resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
-  dependencies:
-    postcss "^5.0.4"
-
-postcss-merge-rules@^2.0.3:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
-  dependencies:
-    browserslist "^1.5.2"
-    caniuse-api "^1.5.2"
-    postcss "^5.0.4"
-    postcss-selector-parser "^2.2.2"
-    vendors "^1.0.0"
-
-postcss-message-helpers@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
-
-postcss-minify-font-values@^1.0.2:
-  version "1.0.5"
-  resolved "http://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
-  dependencies:
-    object-assign "^4.0.1"
-    postcss "^5.0.4"
-    postcss-value-parser "^3.0.2"
-
-postcss-minify-gradients@^1.0.1:
-  version "1.0.5"
-  resolved "http://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
-  dependencies:
-    postcss "^5.0.12"
-    postcss-value-parser "^3.3.0"
-
-postcss-minify-params@^1.0.4:
-  version "1.2.2"
-  resolved "http://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
-  dependencies:
-    alphanum-sort "^1.0.1"
-    postcss "^5.0.2"
-    postcss-value-parser "^3.0.2"
-    uniqs "^2.0.0"
-
-postcss-minify-selectors@^2.0.4:
-  version "2.1.1"
-  resolved "http://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
-  dependencies:
-    alphanum-sort "^1.0.2"
-    has "^1.0.1"
-    postcss "^5.0.14"
-    postcss-selector-parser "^2.0.0"
-
-postcss-normalize-charset@^1.1.0:
-  version "1.1.1"
-  resolved "http://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
-  dependencies:
-    postcss "^5.0.5"
-
-postcss-normalize-url@^3.0.7:
-  version "3.0.8"
-  resolved "http://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
-  dependencies:
-    is-absolute-url "^2.0.0"
-    normalize-url "^1.4.0"
-    postcss "^5.0.14"
-    postcss-value-parser "^3.2.3"
-
-postcss-ordered-values@^2.1.0:
-  version "2.2.3"
-  resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
-  dependencies:
-    postcss "^5.0.4"
-    postcss-value-parser "^3.0.1"
-
-postcss-reduce-idents@^2.2.2:
-  version "2.4.0"
-  resolved "http://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
-  dependencies:
-    postcss "^5.0.4"
-    postcss-value-parser "^3.0.2"
-
-postcss-reduce-initial@^1.0.0:
-  version "1.0.1"
-  resolved "http://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
-  dependencies:
-    postcss "^5.0.4"
-
-postcss-reduce-transforms@^1.0.3:
-  version "1.0.4"
-  resolved "http://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
-  dependencies:
-    has "^1.0.1"
-    postcss "^5.0.8"
-    postcss-value-parser "^3.0.1"
-
-postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
-  version "2.2.3"
-  resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
-  dependencies:
-    flatten "^1.0.2"
-    indexes-of "^1.0.1"
-    uniq "^1.0.1"
-
-postcss-svgo@^2.1.1:
-  version "2.1.6"
-  resolved "http://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
-  dependencies:
-    is-svg "^2.0.0"
-    postcss "^5.0.14"
-    postcss-value-parser "^3.2.3"
-    svgo "^0.7.0"
-
-postcss-unique-selectors@^2.0.2:
-  version "2.0.2"
-  resolved "http://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
-  dependencies:
-    alphanum-sort "^1.0.1"
-    postcss "^5.0.4"
-    uniqs "^2.0.0"
-
-postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
-  version "3.3.0"
-  resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
-
-postcss-zindex@^2.0.1:
-  version "2.2.0"
-  resolved "http://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
-  dependencies:
-    has "^1.0.1"
-    postcss "^5.0.4"
-    uniqs "^2.0.0"
-
-postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.8, postcss@^5.2.16:
-  version "5.2.18"
-  resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
-  dependencies:
-    chalk "^1.1.3"
-    js-base64 "^2.1.9"
-    source-map "^0.5.6"
-    supports-color "^3.2.3"
-
-prepend-http@^1.0.0, prepend-http@^1.0.1:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
-
-preserve@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
-
-pretty-bytes@^4.0.2:
-  version "4.0.2"
-  resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
-
-pretty-hrtime@^1.0.0:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
-
-private@^0.1.6, private@^0.1.8:
-  version "0.1.8"
-  resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
-
-process-nextick-args@^2.0.0, process-nextick-args@~2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
-
-progress@^1.1.8:
-  version "1.1.8"
-  resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
-
-pseudomap@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
-
-psl@^1.1.24:
-  version "1.1.29"
-  resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67"
-
-punycode@^1.4.1:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-
-q@^1.1.2:
-  version "1.5.1"
-  resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
-
-qs@5.2.0:
-  version "5.2.0"
-  resolved "https://registry.yarnpkg.com/qs/-/qs-5.2.0.tgz#a9f31142af468cb72b25b30136ba2456834916be"
-
-qs@~2.2.3:
-  version "2.2.5"
-  resolved "https://registry.yarnpkg.com/qs/-/qs-2.2.5.tgz#1088abaf9dcc0ae5ae45b709e6c6b5888b23923c"
-
-qs@~6.5.1, qs@~6.5.2:
-  version "6.5.2"
-  resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
-
-query-string@^4.1.0:
-  version "4.3.4"
-  resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
-  dependencies:
-    object-assign "^4.1.0"
-    strict-uri-encode "^1.0.0"
-
-randomatic@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116"
-  dependencies:
-    is-number "^4.0.0"
-    kind-of "^6.0.0"
-    math-random "^1.0.1"
-
-raw-body@~2.1.5:
-  version "2.1.7"
-  resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774"
-  dependencies:
-    bytes "2.4.0"
-    iconv-lite "0.4.13"
-    unpipe "1.0.0"
-
-rc@^1.1.2:
-  version "1.2.8"
-  resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
-  dependencies:
-    deep-extend "^0.6.0"
-    ini "~1.3.0"
-    minimist "^1.2.0"
-    strip-json-comments "~2.0.1"
-
-rcfinder@^0.1.6:
-  version "0.1.9"
-  resolved "https://registry.yarnpkg.com/rcfinder/-/rcfinder-0.1.9.tgz#f3e80f387ddf9ae80ae30a4100329642eae81115"
-  dependencies:
-    lodash.clonedeep "^4.3.2"
-
-rcloader@^0.2.2:
-  version "0.2.2"
-  resolved "https://registry.yarnpkg.com/rcloader/-/rcloader-0.2.2.tgz#58d2298b462d0b9bfd2133d2a1ec74fbd705c717"
-  dependencies:
-    lodash.assign "^4.2.0"
-    lodash.isobject "^3.0.2"
-    lodash.merge "^4.6.0"
-    rcfinder "^0.1.6"
-
-read-all-stream@^3.0.0:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa"
-  dependencies:
-    pinkie-promise "^2.0.0"
-    readable-stream "^2.0.0"
-
-read-pkg-up@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
-  dependencies:
-    find-up "^1.0.0"
-    read-pkg "^1.0.0"
-
-read-pkg@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
-  dependencies:
-    load-json-file "^1.0.0"
-    normalize-package-data "^2.3.2"
-    path-type "^1.0.0"
-
-readable-stream@1.1:
-  version "1.1.13"
-  resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e"
-  dependencies:
-    core-util-is "~1.0.0"
-    inherits "~2.0.1"
-    isarray "0.0.1"
-    string_decoder "~0.10.x"
-
-"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.17:
-  version "1.0.34"
-  resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
-  dependencies:
-    core-util-is "~1.0.0"
-    inherits "~2.0.1"
-    isarray "0.0.1"
-    string_decoder "~0.10.x"
-
-readable-stream@^1.0.26-2, readable-stream@^1.0.26-4, readable-stream@~1.1.9:
-  version "1.1.14"
-  resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
-  dependencies:
-    core-util-is "~1.0.0"
-    inherits "~2.0.1"
-    isarray "0.0.1"
-    string_decoder "~0.10.x"
-
-readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5:
-  version "2.3.6"
-  resolved "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
-  dependencies:
-    core-util-is "~1.0.0"
-    inherits "~2.0.3"
-    isarray "~1.0.0"
-    process-nextick-args "~2.0.0"
-    safe-buffer "~5.1.1"
-    string_decoder "~1.1.1"
-    util-deprecate "~1.0.1"
-
-rechoir@^0.6.2:
-  version "0.6.2"
-  resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
-  dependencies:
-    resolve "^1.1.6"
-
-redent@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
-  dependencies:
-    indent-string "^2.1.0"
-    strip-indent "^1.0.1"
-
-reduce-css-calc@^1.2.6:
-  version "1.3.0"
-  resolved "http://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
-  dependencies:
-    balanced-match "^0.4.2"
-    math-expression-evaluator "^1.2.14"
-    reduce-function-call "^1.0.1"
-
-reduce-function-call@^1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
-  dependencies:
-    balanced-match "^0.4.2"
-
-regenerate@^1.2.1:
-  version "1.4.0"
-  resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
-
-regenerator-runtime@^0.11.0:
-  version "0.11.1"
-  resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
-
-regenerator-transform@^0.10.0:
-  version "0.10.1"
-  resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
-  dependencies:
-    babel-runtime "^6.18.0"
-    babel-types "^6.19.0"
-    private "^0.1.6"
-
-regex-cache@^0.4.2:
-  version "0.4.4"
-  resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
-  dependencies:
-    is-equal-shallow "^0.1.3"
-
-regex-not@^1.0.0, regex-not@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
-  dependencies:
-    extend-shallow "^3.0.2"
-    safe-regex "^1.1.0"
-
-regexpu-core@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
-  dependencies:
-    regenerate "^1.2.1"
-    regjsgen "^0.2.0"
-    regjsparser "^0.1.4"
-
-regjsgen@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
-
-regjsparser@^0.1.4:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
-  dependencies:
-    jsesc "~0.5.0"
-
-remove-trailing-separator@^1.0.1:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
-
-repeat-element@^1.1.2:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
-
-repeat-string@^1.5.2, repeat-string@^1.6.1:
-  version "1.6.1"
-  resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
-
-repeating@^2.0.0:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
-  dependencies:
-    is-finite "^1.0.0"
-
-replace-ext@0.0.1:
-  version "0.0.1"
-  resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924"
-
-replace-ext@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb"
-
-request-progress@^2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-2.0.1.tgz#5d36bb57961c673aa5b788dbc8141fdf23b44e08"
-  dependencies:
-    throttleit "^1.0.0"
-
-request@2.87.0:
-  version "2.87.0"
-  resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e"
-  dependencies:
-    aws-sign2 "~0.7.0"
-    aws4 "^1.6.0"
-    caseless "~0.12.0"
-    combined-stream "~1.0.5"
-    extend "~3.0.1"
-    forever-agent "~0.6.1"
-    form-data "~2.3.1"
-    har-validator "~5.0.3"
-    http-signature "~1.2.0"
-    is-typedarray "~1.0.0"
-    isstream "~0.1.2"
-    json-stringify-safe "~5.0.1"
-    mime-types "~2.1.17"
-    oauth-sign "~0.8.2"
-    performance-now "^2.1.0"
-    qs "~6.5.1"
-    safe-buffer "^5.1.1"
-    tough-cookie "~2.3.3"
-    tunnel-agent "^0.6.0"
-    uuid "^3.1.0"
-
-request@^2.81.0, request@^2.87.0:
-  version "2.88.0"
-  resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
-  dependencies:
-    aws-sign2 "~0.7.0"
-    aws4 "^1.8.0"
-    caseless "~0.12.0"
-    combined-stream "~1.0.6"
-    extend "~3.0.2"
-    forever-agent "~0.6.1"
-    form-data "~2.3.2"
-    har-validator "~5.1.0"
-    http-signature "~1.2.0"
-    is-typedarray "~1.0.0"
-    isstream "~0.1.2"
-    json-stringify-safe "~5.0.1"
-    mime-types "~2.1.19"
-    oauth-sign "~0.9.0"
-    performance-now "^2.1.0"
-    qs "~6.5.2"
-    safe-buffer "^5.1.2"
-    tough-cookie "~2.4.3"
-    tunnel-agent "^0.6.0"
-    uuid "^3.3.2"
-
-require-directory@^2.1.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
-
-require-main-filename@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
-
-resolve-dir@^1.0.0, resolve-dir@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
-  dependencies:
-    expand-tilde "^2.0.0"
-    global-modules "^1.0.0"
-
-resolve-url@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
-
-resolve@^1.1.6, resolve@^1.1.7:
-  version "1.8.1"
-  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
-  dependencies:
-    path-parse "^1.0.5"
-
-ret@~0.1.10:
-  version "0.1.15"
-  resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
-
-right-align@^0.1.1:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
-  dependencies:
-    align-text "^0.1.1"
-
-rimraf@2, rimraf@^2.2.6, rimraf@^2.2.8, rimraf@^2.4.0, rimraf@^2.5.4:
-  version "2.6.2"
-  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
-  dependencies:
-    glob "^7.0.5"
-
-safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
-  version "5.1.2"
-  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
-
-safe-regex@^1.1.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
-  dependencies:
-    ret "~0.1.10"
-
-safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
-
-sass-graph@^2.2.4:
-  version "2.2.4"
-  resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"
-  dependencies:
-    glob "^7.0.0"
-    lodash "^4.0.0"
-    scss-tokenizer "^0.2.3"
-    yargs "^7.0.0"
-
-sax@~1.2.1:
-  version "1.2.4"
-  resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
-
-scss-tokenizer@^0.2.3:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
-  dependencies:
-    js-base64 "^2.1.8"
-    source-map "^0.4.2"
-
-seek-bzip@^1.0.3:
-  version "1.0.5"
-  resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc"
-  dependencies:
-    commander "~2.8.1"
-
-semver-regex@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9"
-
-semver-truncate@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/semver-truncate/-/semver-truncate-1.1.2.tgz#57f41de69707a62709a7e0104ba2117109ea47e8"
-  dependencies:
-    semver "^5.3.0"
-
-"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1:
-  version "5.5.1"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
-
-semver@^4.0.3, semver@^4.1.0:
-  version "4.3.6"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
-
-semver@~5.3.0:
-  version "5.3.0"
-  resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
-
-sequencify@~0.0.7:
-  version "0.0.7"
-  resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c"
-
-set-blocking@^2.0.0, set-blocking@~2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
-
-set-immediate-shim@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
-
-set-value@^0.4.3:
-  version "0.4.3"
-  resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-extendable "^0.1.1"
-    is-plain-object "^2.0.1"
-    to-object-path "^0.3.0"
-
-set-value@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
-  dependencies:
-    extend-shallow "^2.0.1"
-    is-extendable "^0.1.1"
-    is-plain-object "^2.0.3"
-    split-string "^3.0.1"
-
-shebang-command@^1.2.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
-  dependencies:
-    shebang-regex "^1.0.0"
-
-shebang-regex@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
-
-shelljs@0.3.x:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1"
-
-shellwords@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
-
-sigmund@~1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
-
-signal-exit@^3.0.0:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
-
-slash@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
-
-snapdragon-node@^2.0.1:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
-  dependencies:
-    define-property "^1.0.0"
-    isobject "^3.0.0"
-    snapdragon-util "^3.0.1"
-
-snapdragon-util@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
-  dependencies:
-    kind-of "^3.2.0"
-
-snapdragon@^0.8.1:
-  version "0.8.2"
-  resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
-  dependencies:
-    base "^0.11.1"
-    debug "^2.2.0"
-    define-property "^0.2.5"
-    extend-shallow "^2.0.1"
-    map-cache "^0.2.2"
-    source-map "^0.5.6"
-    source-map-resolve "^0.5.0"
-    use "^3.1.0"
-
-sort-keys@^1.0.0:
-  version "1.1.2"
-  resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
-  dependencies:
-    is-plain-obj "^1.0.0"
-
-source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
-  version "0.5.2"
-  resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
-  dependencies:
-    atob "^2.1.1"
-    decode-uri-component "^0.2.0"
-    resolve-url "^0.2.1"
-    source-map-url "^0.4.0"
-    urix "^0.1.0"
-
-source-map-support@^0.4.15:
-  version "0.4.18"
-  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
-  dependencies:
-    source-map "^0.5.6"
-
-source-map-url@^0.4.0:
-  version "0.4.0"
-  resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
-
-source-map@^0.4.2:
-  version "0.4.4"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
-  dependencies:
-    amdefine ">=0.0.4"
-
-source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
-  version "0.5.7"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
-
-source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0:
-  version "0.6.1"
-  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
-
-sparkles@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c"
-
-spdx-correct@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82"
-  dependencies:
-    spdx-expression-parse "^3.0.0"
-    spdx-license-ids "^3.0.0"
-
-spdx-exceptions@^2.1.0:
-  version "2.1.0"
-  resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9"
-
-spdx-expression-parse@^3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
-  dependencies:
-    spdx-exceptions "^2.1.0"
-    spdx-license-ids "^3.0.0"
-
-spdx-license-ids@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f"
-
-split-string@^3.0.1, split-string@^3.0.2:
-  version "3.1.0"
-  resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
-  dependencies:
-    extend-shallow "^3.0.0"
-
-split@0.2:
-  version "0.2.10"
-  resolved "http://registry.npmjs.org/split/-/split-0.2.10.tgz#67097c601d697ce1368f418f06cd201cf0521a57"
-  dependencies:
-    through "2"
-
-split@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9"
-  dependencies:
-    through "2"
-
-sprintf-js@~1.0.2:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-
-squeak@^1.0.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/squeak/-/squeak-1.3.0.tgz#33045037b64388b567674b84322a6521073916c3"
-  dependencies:
-    chalk "^1.0.0"
-    console-stream "^0.1.1"
-    lpad-align "^1.0.1"
-
-sshpk@^1.7.0:
-  version "1.14.2"
-  resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98"
-  dependencies:
-    asn1 "~0.2.3"
-    assert-plus "^1.0.0"
-    dashdash "^1.12.0"
-    getpass "^0.1.1"
-    safer-buffer "^2.0.2"
-  optionalDependencies:
-    bcrypt-pbkdf "^1.0.0"
-    ecc-jsbn "~0.1.1"
-    jsbn "~0.1.0"
-    tweetnacl "~0.14.0"
-
-stack-trace@0.0.x:
-  version "0.0.10"
-  resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
-
-stat-mode@^0.2.0:
-  version "0.2.2"
-  resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502"
-
-static-extend@^0.1.1:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
-  dependencies:
-    define-property "^0.2.5"
-    object-copy "^0.1.0"
-
-statuses@1:
-  version "1.5.0"
-  resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
-
-stdout-stream@^1.4.0:
-  version "1.4.1"
-  resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de"
-  dependencies:
-    readable-stream "^2.0.1"
-
-stream-combiner2@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe"
-  dependencies:
-    duplexer2 "~0.1.0"
-    readable-stream "^2.0.2"
-
-stream-combiner@^0.2.2:
-  version "0.2.2"
-  resolved "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz#aec8cbac177b56b6f4fa479ced8c1912cee52858"
-  dependencies:
-    duplexer "~0.1.1"
-    through "~2.3.4"
-
-stream-combiner@~0.0.4:
-  version "0.0.4"
-  resolved "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14"
-  dependencies:
-    duplexer "~0.1.1"
-
-stream-consume@~0.1.0:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz#d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48"
-
-stream-shift@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952"
-
-streamqueue@0.0.6:
-  version "0.0.6"
-  resolved "https://registry.yarnpkg.com/streamqueue/-/streamqueue-0.0.6.tgz#66f5f5ec94e9b8af249e4aec2dd1f741bfe94de3"
-  dependencies:
-    readable-stream "^1.0.26-2"
-
-strict-uri-encode@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
-
-string-width@^1.0.1, string-width@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
-  dependencies:
-    code-point-at "^1.0.0"
-    is-fullwidth-code-point "^1.0.0"
-    strip-ansi "^3.0.0"
-
-"string-width@^1.0.2 || 2":
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
-  dependencies:
-    is-fullwidth-code-point "^2.0.0"
-    strip-ansi "^4.0.0"
-
-string_decoder@~0.10.x:
-  version "0.10.31"
-  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
-
-string_decoder@~1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
-  dependencies:
-    safe-buffer "~5.1.0"
-
-strip-ansi@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220"
-  dependencies:
-    ansi-regex "^0.2.1"
-
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
-  dependencies:
-    ansi-regex "^2.0.0"
-
-strip-ansi@^4.0.0:
-  version "4.0.0"
-  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
-  dependencies:
-    ansi-regex "^3.0.0"
-
-strip-bom-stream@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee"
-  dependencies:
-    first-chunk-stream "^1.0.0"
-    strip-bom "^2.0.0"
-
-strip-bom-string@1.X:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92"
-
-strip-bom@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794"
-  dependencies:
-    first-chunk-stream "^1.0.0"
-    is-utf8 "^0.2.0"
-
-strip-bom@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
-  dependencies:
-    is-utf8 "^0.2.0"
-
-strip-dirs@^1.0.0:
-  version "1.1.1"
-  resolved "http://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz#960bbd1287844f3975a4558aa103a8255e2456a0"
-  dependencies:
-    chalk "^1.0.0"
-    get-stdin "^4.0.1"
-    is-absolute "^0.1.5"
-    is-natural-number "^2.0.0"
-    minimist "^1.1.0"
-    sum-up "^1.0.1"
-
-strip-eof@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
-
-strip-indent@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
-  dependencies:
-    get-stdin "^4.0.1"
-
-strip-json-comments@1.0.x:
-  version "1.0.4"
-  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
-
-strip-json-comments@~2.0.1:
-  version "2.0.1"
-  resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
-
-strip-outer@^1.0.0:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631"
-  dependencies:
-    escape-string-regexp "^1.0.2"
-
-sum-up@^1.0.1:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/sum-up/-/sum-up-1.0.3.tgz#1c661f667057f63bcb7875aa1438bc162525156e"
-  dependencies:
-    chalk "^1.0.0"
-
-supports-color@^0.2.0:
-  version "0.2.0"
-  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a"
-
-supports-color@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
-
-supports-color@^3.2.3:
-  version "3.2.3"
-  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
-  dependencies:
-    has-flag "^1.0.0"
-
-supports-color@^5.3.0:
-  version "5.5.0"
-  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
-  dependencies:
-    has-flag "^3.0.0"
-
-svgo@^0.7.0:
-  version "0.7.2"
-  resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
-  dependencies:
-    coa "~1.0.1"
-    colors "~1.1.2"
-    csso "~2.3.1"
-    js-yaml "~3.7.0"
-    mkdirp "~0.5.1"
-    sax "~1.2.1"
-    whet.extend "~0.9.9"
-
-tar-stream@^1.1.1:
-  version "1.6.2"
-  resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555"
-  dependencies:
-    bl "^1.0.0"
-    buffer-alloc "^1.2.0"
-    end-of-stream "^1.0.0"
-    fs-constants "^1.0.0"
-    readable-stream "^2.3.0"
-    to-buffer "^1.1.1"
-    xtend "^4.0.0"
-
-tar@^2.0.0:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
-  dependencies:
-    block-stream "*"
-    fstream "^1.0.2"
-    inherits "2"
-
-temp-dir@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d"
-
-tempfile@^1.0.0:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2"
-  dependencies:
-    os-tmpdir "^1.0.0"
-    uuid "^2.0.1"
-
-tempfile@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-2.0.0.tgz#6b0446856a9b1114d1856ffcbe509cccb0977265"
-  dependencies:
-    temp-dir "^1.0.0"
-    uuid "^3.0.1"
-
-throttleit@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c"
-
-through2-concurrent@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/through2-concurrent/-/through2-concurrent-1.1.1.tgz#11cb4ea4c9e31bca6e4c1e6dba48d1c728c3524b"
-  dependencies:
-    through2 "^2.0.0"
-
-through2-filter@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec"
-  dependencies:
-    through2 "~2.0.0"
-    xtend "~4.0.0"
-
-through2@2.X, through2@^2.0.0, through2@^2.0.3, through2@~2.0.0:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
-  dependencies:
-    readable-stream "^2.1.5"
-    xtend "~4.0.1"
-
-through2@^0.5.0:
-  version "0.5.1"
-  resolved "https://registry.yarnpkg.com/through2/-/through2-0.5.1.tgz#dfdd012eb9c700e2323fd334f38ac622ab372da7"
-  dependencies:
-    readable-stream "~1.0.17"
-    xtend "~3.0.0"
-
-through2@^0.6.0, through2@^0.6.1:
-  version "0.6.5"
-  resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
-  dependencies:
-    readable-stream ">=1.0.33-1 <1.1.0-0"
-    xtend ">=4.0.0 <4.1.0-0"
-
-through@2, through@^2.3.8, through@~2.3, through@~2.3.1, through@~2.3.4:
-  version "2.3.8"
-  resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
-
-tildify@^1.0.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a"
-  dependencies:
-    os-homedir "^1.0.0"
-
-time-stamp@^1.0.0:
-  version "1.1.0"
-  resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3"
-
-timed-out@^3.0.0:
-  version "3.1.3"
-  resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217"
-
-timers-ext@^0.1.5:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.5.tgz#77147dd4e76b660c2abb8785db96574cbbd12922"
-  dependencies:
-    es5-ext "~0.10.14"
-    next-tick "1"
-
-to-absolute-glob@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f"
-  dependencies:
-    extend-shallow "^2.0.1"
-
-to-buffer@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80"
-
-to-fast-properties@^1.0.3:
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
-
-to-object-path@^0.3.0:
-  version "0.3.0"
-  resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
-  dependencies:
-    kind-of "^3.0.2"
-
-to-regex-range@^2.1.0:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
-  dependencies:
-    is-number "^3.0.0"
-    repeat-string "^1.6.1"
-
-to-regex@^3.0.1, to-regex@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
-  dependencies:
-    define-property "^2.0.2"
-    extend-shallow "^3.0.2"
-    regex-not "^1.0.2"
-    safe-regex "^1.1.0"
-
-tough-cookie@~2.3.3:
-  version "2.3.4"
-  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
-  dependencies:
-    punycode "^1.4.1"
-
-tough-cookie@~2.4.3:
-  version "2.4.3"
-  resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
-  dependencies:
-    psl "^1.1.24"
-    punycode "^1.4.1"
-
-trim-newlines@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
-
-trim-repeated@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21"
-  dependencies:
-    escape-string-regexp "^1.0.2"
-
-trim-right@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
-
-"true-case-path@^1.0.2":
-  version "1.0.3"
-  resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d"
-  dependencies:
-    glob "^7.1.2"
-
-try-json-parse@^0.1.1:
-  version "0.1.1"
-  resolved "https://registry.yarnpkg.com/try-json-parse/-/try-json-parse-0.1.1.tgz#8db01622e877e51b83140caee7c80864ad390c82"
-
-tunnel-agent@^0.4.0:
-  version "0.4.3"
-  resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
-
-tunnel-agent@^0.6.0:
-  version "0.6.0"
-  resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
-  dependencies:
-    safe-buffer "^5.0.1"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
-  version "0.14.5"
-  resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-
-type-is@~1.6.10:
-  version "1.6.16"
-  resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194"
-  dependencies:
-    media-typer "0.3.0"
-    mime-types "~2.1.18"
-
-typedarray@^0.0.6:
-  version "0.0.6"
-  resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-
-uglify-js@~2.8.10:
-  version "2.8.29"
-  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
-  dependencies:
-    source-map "~0.5.1"
-    yargs "~3.10.0"
-  optionalDependencies:
-    uglify-to-browserify "~1.0.0"
-
-uglify-save-license@^0.4.1:
-  version "0.4.1"
-  resolved "https://registry.yarnpkg.com/uglify-save-license/-/uglify-save-license-0.4.1.tgz#95726c17cc6fd171c3617e3bf4d8d82aa8c4cce1"
-
-uglify-to-browserify@~1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-
-unc-path-regex@^0.1.2:
-  version "0.1.2"
-  resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
-
-unicode-5.2.0@^0.7.5:
-  version "0.7.5"
-  resolved "https://registry.yarnpkg.com/unicode-5.2.0/-/unicode-5.2.0-0.7.5.tgz#e0df129431a28a95263d8c480fb5e9ab2b0973f0"
-
-union-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
-  dependencies:
-    arr-union "^3.1.0"
-    get-value "^2.0.6"
-    is-extendable "^0.1.1"
-    set-value "^0.4.3"
-
-uniq@^1.0.1:
-  version "1.0.1"
-  resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
-
-uniqs@^2.0.0:
-  version "2.0.0"
-  resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
-
-unique-stream@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b"
-
-unique-stream@^2.0.2:
-  version "2.2.1"
-  resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369"
-  dependencies:
-    json-stable-stringify "^1.0.0"
-    through2-filter "^2.0.0"
-
-unpipe@1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
-
-unset-value@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
-  dependencies:
-    has-value "^0.3.1"
-    isobject "^3.0.0"
-
-unzip-response@^1.0.2:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
-
-urix@^0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
-
-url-parse-lax@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
-  dependencies:
-    prepend-http "^1.0.1"
-
-url-regex@^3.0.0:
-  version "3.2.0"
-  resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-3.2.0.tgz#dbad1e0c9e29e105dd0b1f09f6862f7fdb482724"
-  dependencies:
-    ip-regex "^1.0.1"
-
-use@^3.1.0:
-  version "3.1.1"
-  resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
-
-user-home@^1.1.1:
-  version "1.1.1"
-  resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
-
-util-deprecate@~1.0.1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-
-uuid@^2.0.1:
-  version "2.0.3"
-  resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
-
-uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2:
-  version "3.3.2"
-  resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
-
-v8flags@^2.0.2:
-  version "2.1.1"
-  resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4"
-  dependencies:
-    user-home "^1.1.1"
-
-vali-date@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6"
-
-validate-npm-package-license@^3.0.1:
-  version "3.0.4"
-  resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
-  dependencies:
-    spdx-correct "^3.0.0"
-    spdx-expression-parse "^3.0.0"
-
-vendors@^1.0.0:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801"
-
-verror@1.10.0:
-  version "1.10.0"
-  resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
-  dependencies:
-    assert-plus "^1.0.0"
-    core-util-is "1.0.2"
-    extsprintf "^1.2.0"
-
-vinyl-assign@^1.0.1:
-  version "1.2.1"
-  resolved "https://registry.yarnpkg.com/vinyl-assign/-/vinyl-assign-1.2.1.tgz#4d198891b5515911d771a8cd9c5480a46a074a45"
-  dependencies:
-    object-assign "^4.0.1"
-    readable-stream "^2.0.0"
-
-vinyl-fs@^0.3.0:
-  version "0.3.14"
-  resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6"
-  dependencies:
-    defaults "^1.0.0"
-    glob-stream "^3.1.5"
-    glob-watcher "^0.0.6"
-    graceful-fs "^3.0.0"
-    mkdirp "^0.5.0"
-    strip-bom "^1.0.0"
-    through2 "^0.6.1"
-    vinyl "^0.4.0"
-
-vinyl-fs@^2.2.0:
-  version "2.4.4"
-  resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-2.4.4.tgz#be6ff3270cb55dfd7d3063640de81f25d7532239"
-  dependencies:
-    duplexify "^3.2.0"
-    glob-stream "^5.3.2"
-    graceful-fs "^4.0.0"
-    gulp-sourcemaps "1.6.0"
-    is-valid-glob "^0.3.0"
-    lazystream "^1.0.0"
-    lodash.isequal "^4.0.0"
-    merge-stream "^1.0.0"
-    mkdirp "^0.5.0"
-    object-assign "^4.0.0"
-    readable-stream "^2.0.4"
-    strip-bom "^2.0.0"
-    strip-bom-stream "^1.0.0"
-    through2 "^2.0.0"
-    through2-filter "^2.0.0"
-    vali-date "^1.0.0"
-    vinyl "^1.0.0"
-
-vinyl-sourcemaps-apply@^0.2.0, vinyl-sourcemaps-apply@^0.2.1:
-  version "0.2.1"
-  resolved "https://registry.yarnpkg.com/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz#ab6549d61d172c2b1b87be5c508d239c8ef87705"
-  dependencies:
-    source-map "^0.5.1"
-
-vinyl@^0.2.1:
-  version "0.2.3"
-  resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.2.3.tgz#bca938209582ec5a49ad538a00fa1f125e513252"
-  dependencies:
-    clone-stats "~0.0.1"
-
-vinyl@^0.4.0, vinyl@^0.4.3:
-  version "0.4.6"
-  resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847"
-  dependencies:
-    clone "^0.2.0"
-    clone-stats "^0.0.1"
-
-vinyl@^0.5.0:
-  version "0.5.3"
-  resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde"
-  dependencies:
-    clone "^1.0.0"
-    clone-stats "^0.0.1"
-    replace-ext "0.0.1"
-
-vinyl@^1.0.0, vinyl@^1.1.0:
-  version "1.2.0"
-  resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884"
-  dependencies:
-    clone "^1.0.0"
-    clone-stats "^0.0.1"
-    replace-ext "0.0.1"
-
-vinyl@^2.0.0:
-  version "2.2.0"
-  resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86"
-  dependencies:
-    clone "^2.1.1"
-    clone-buffer "^1.0.0"
-    clone-stats "^1.0.0"
-    cloneable-readable "^1.0.0"
-    remove-trailing-separator "^1.0.1"
-    replace-ext "^1.0.0"
-
-ware@^1.2.0:
-  version "1.3.0"
-  resolved "https://registry.yarnpkg.com/ware/-/ware-1.3.0.tgz#d1b14f39d2e2cb4ab8c4098f756fe4b164e473d4"
-  dependencies:
-    wrap-fn "^0.1.0"
-
-websocket-driver@>=0.3.6:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"
-  dependencies:
-    http-parser-js ">=0.4.0"
-    websocket-extensions ">=0.1.1"
-
-websocket-extensions@>=0.1.1:
-  version "0.1.3"
-  resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
-
-whet.extend@~0.9.9:
-  version "0.9.9"
-  resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
-
-which-module@^1.0.0:
-  version "1.0.0"
-  resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
-
-which@1, which@^1.2.10, which@^1.2.14, which@^1.2.9, which@^1.3.0:
-  version "1.3.1"
-  resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
-  dependencies:
-    isexe "^2.0.0"
-
-wide-align@^1.1.0:
-  version "1.1.3"
-  resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
-  dependencies:
-    string-width "^1.0.2 || 2"
-
-window-size@0.1.0:
-  version "0.1.0"
-  resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
-
-winston@^2.4.0:
-  version "2.4.4"
-  resolved "https://registry.yarnpkg.com/winston/-/winston-2.4.4.tgz#a01e4d1d0a103cf4eada6fc1f886b3110d71c34b"
-  dependencies:
-    async "~1.0.0"
-    colors "1.0.x"
-    cycle "1.0.x"
-    eyes "0.1.x"
-    isstream "0.1.x"
-    stack-trace "0.0.x"
-
-wordwrap@0.0.2:
-  version "0.0.2"
-  resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-
-wrap-ansi@^2.0.0:
-  version "2.1.0"
-  resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
-  dependencies:
-    string-width "^1.0.1"
-    strip-ansi "^3.0.1"
-
-wrap-fn@^0.1.0:
-  version "0.1.5"
-  resolved "https://registry.yarnpkg.com/wrap-fn/-/wrap-fn-0.1.5.tgz#f21b6e41016ff4a7e31720dbc63a09016bdf9845"
-  dependencies:
-    co "3.1.0"
-
-wrappy@1:
-  version "1.0.2"
-  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-
-"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
-
-xtend@~3.0.0:
-  version "3.0.0"
-  resolved "https://registry.yarnpkg.com/xtend/-/xtend-3.0.0.tgz#5cce7407baf642cba7becda568111c493f59665a"
-
-y18n@^3.2.1:
-  version "3.2.1"
-  resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
-
-yallist@^2.1.2:
-  version "2.1.2"
-  resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
-
-yargs-parser@^5.0.0:
-  version "5.0.0"
-  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
-  dependencies:
-    camelcase "^3.0.0"
-
-yargs@^7.0.0:
-  version "7.1.0"
-  resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
-  dependencies:
-    camelcase "^3.0.0"
-    cliui "^3.2.0"
-    decamelize "^1.1.1"
-    get-caller-file "^1.0.1"
-    os-locale "^1.4.0"
-    read-pkg-up "^1.0.1"
-    require-directory "^2.1.1"
-    require-main-filename "^1.0.1"
-    set-blocking "^2.0.0"
-    string-width "^1.0.2"
-    which-module "^1.0.0"
-    y18n "^3.2.1"
-    yargs-parser "^5.0.0"
-
-yargs@~3.10.0:
-  version "3.10.0"
-  resolved "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
-  dependencies:
-    camelcase "^1.0.2"
-    cliui "^2.1.0"
-    decamelize "^1.0.0"
-    window-size "0.1.0"
-
-yauzl@2.4.1:
-  version "2.4.1"
-  resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
-  dependencies:
-    fd-slicer "~1.0.1"
-
-yauzl@^2.2.1:
-  version "2.10.0"
-  resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
-  dependencies:
-    buffer-crc32 "~0.2.3"
-    fd-slicer "~1.1.0"
diff --git a/Gems/AssetMemoryAnalyzer/gem.json b/Gems/AssetMemoryAnalyzer/gem.json
deleted file mode 100644
index 443eeced18..0000000000
--- a/Gems/AssetMemoryAnalyzer/gem.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-    "gem_name": "AssetMemoryAnalyzer",
-    "display_name": "Asset Memory Analyzer",
-    "license": "Apache-2.0 Or MIT",
-    "license_url": "https://github.com/o3de/o3de/blob/development/LICENSE.txt",
-    "origin": "Open 3D Engine - o3de.org",
-    "type": "Code",
-    "summary": "The Asset Memory Analyzer Gem provides tools to profile asset memory usage in Open 3D Engine through ImGUI (Immediate Mode Graphical User Interface).",
-    "canonical_tags": [
-        "Gem"
-    ],
-    "user_tags": [
-        "Debug",
-        "Utility",
-        "Tools"
-    ],
-    "icon_path": "preview.png",
-    "requirements": "",
-    "documentation_url": "https://o3de.org/docs/user-guide/gems/reference/debug/asset-memory-analyzer/",
-    "dependencies": [
-        "ImGui"
-    ]
-}
diff --git a/Gems/AssetMemoryAnalyzer/preview.png b/Gems/AssetMemoryAnalyzer/preview.png
deleted file mode 100644
index 2f1ed47754..0000000000
--- a/Gems/AssetMemoryAnalyzer/preview.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:6d6204c6730e5675791765ca194e9b1cbec282208e280507de830afc2805e5fa
-size 41127
diff --git a/Gems/AssetMemoryAnalyzer/www/AssetMemoryViewer/index.html b/Gems/AssetMemoryAnalyzer/www/AssetMemoryViewer/index.html
deleted file mode 100644
index 85a4e47db8..0000000000
--- a/Gems/AssetMemoryAnalyzer/www/AssetMemoryViewer/index.html
+++ /dev/null
@@ -1,268 +0,0 @@
-
-
-Lumberyard Asset Memory Viewer
-
-
-
-
-
-
-
-
-
-
-
- Drop your assetmem JSON file here, or click to browse to it. -
- - - - -
- -
-
- - - - diff --git a/Gems/Atom/Feature/Common/Code/Source/ACES/AcesDisplayMapperFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/ACES/AcesDisplayMapperFeatureProcessor.cpp index c6c41edb31..50fc8cafef 100644 --- a/Gems/Atom/Feature/Common/Code/Source/ACES/AcesDisplayMapperFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/ACES/AcesDisplayMapperFeatureProcessor.cpp @@ -16,7 +16,6 @@ #include #include -#include #include namespace @@ -81,7 +80,7 @@ namespace AZ::Render void AcesDisplayMapperFeatureProcessor::Simulate(const FeatureProcessor::SimulatePacket& packet) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(AzRender); AZ_UNUSED(packet); } diff --git a/Gems/Atom/Feature/Common/Code/Source/AuxGeom/AuxGeomDrawQueue.cpp b/Gems/Atom/Feature/Common/Code/Source/AuxGeom/AuxGeomDrawQueue.cpp index f17e15dafa..fedbf849eb 100644 --- a/Gems/Atom/Feature/Common/Code/Source/AuxGeom/AuxGeomDrawQueue.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/AuxGeom/AuxGeomDrawQueue.cpp @@ -11,7 +11,6 @@ #include -#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/AuxGeom/AuxGeomFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/AuxGeom/AuxGeomFeatureProcessor.cpp index a4720ad131..8de0fdfea8 100644 --- a/Gems/Atom/Feature/Common/Code/Source/AuxGeom/AuxGeomFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/AuxGeom/AuxGeomFeatureProcessor.cpp @@ -16,8 +16,6 @@ #include -#include - namespace AZ { namespace Render diff --git a/Gems/Atom/Feature/Common/Code/Source/AuxGeom/FixedShapeProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/AuxGeom/FixedShapeProcessor.cpp index 2e7c0759db..076c2044b5 100644 --- a/Gems/Atom/Feature/Common/Code/Source/AuxGeom/FixedShapeProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/AuxGeom/FixedShapeProcessor.cpp @@ -9,7 +9,6 @@ #include "FixedShapeProcessor.h" #include "AuxGeomDrawProcessorShared.h" -#include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/CapsuleLightFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/CoreLights/CapsuleLightFeatureProcessor.cpp index bbea462ac8..b279d7106f 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/CapsuleLightFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/CapsuleLightFeatureProcessor.cpp @@ -8,8 +8,6 @@ #include -#include - #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/DirectionalLightFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/CoreLights/DirectionalLightFeatureProcessor.cpp index 8a1ff95f29..ee60ff412a 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/DirectionalLightFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/DirectionalLightFeatureProcessor.cpp @@ -23,7 +23,6 @@ #include #include #include -#include #include namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/DiskLightFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/CoreLights/DiskLightFeatureProcessor.cpp index e362ee3afc..168a7ea00a 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/DiskLightFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/DiskLightFeatureProcessor.cpp @@ -8,8 +8,6 @@ #include -#include - #include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/PointLightFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/CoreLights/PointLightFeatureProcessor.cpp index c5d6c3bf78..9df176f82d 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/PointLightFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/PointLightFeatureProcessor.cpp @@ -8,8 +8,6 @@ #include -#include - #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/PolygonLightFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/CoreLights/PolygonLightFeatureProcessor.cpp index f3c05eeeec..1fb22024af 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/PolygonLightFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/PolygonLightFeatureProcessor.cpp @@ -9,8 +9,6 @@ #include #include -#include - #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/QuadLightFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/CoreLights/QuadLightFeatureProcessor.cpp index 787e150646..66e22c3106 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/QuadLightFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/QuadLightFeatureProcessor.cpp @@ -9,8 +9,6 @@ #include #include -#include - #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/SimplePointLightFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/CoreLights/SimplePointLightFeatureProcessor.cpp index bc13d3d508..60cf3a0353 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/SimplePointLightFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/SimplePointLightFeatureProcessor.cpp @@ -8,8 +8,6 @@ #include -#include - #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/CoreLights/SimpleSpotLightFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/CoreLights/SimpleSpotLightFeatureProcessor.cpp index 49b7f7d12c..c9826761d8 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CoreLights/SimpleSpotLightFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CoreLights/SimpleSpotLightFeatureProcessor.cpp @@ -8,8 +8,6 @@ #include -#include - #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalFeatureProcessor.cpp index f00c902a73..8e446435fa 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalFeatureProcessor.cpp @@ -8,8 +8,6 @@ #include -#include - #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp index e9bc1a1277..393104907a 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Decals/DecalTextureArrayFeatureProcessor.cpp @@ -7,7 +7,6 @@ */ #include -#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/ImGui/ImGuiPass.cpp b/Gems/Atom/Feature/Common/Code/Source/ImGui/ImGuiPass.cpp index d3615bfaa9..5dcb0dc2bb 100644 --- a/Gems/Atom/Feature/Common/Code/Source/ImGui/ImGuiPass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/ImGui/ImGuiPass.cpp @@ -29,8 +29,6 @@ #include -#include - namespace AZ { namespace Render diff --git a/Gems/Atom/Feature/Common/Code/Source/ImageBasedLights/ImageBasedLightFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/ImageBasedLights/ImageBasedLightFeatureProcessor.cpp index 6a2eda8f22..b8d6d323c3 100644 --- a/Gems/Atom/Feature/Common/Code/Source/ImageBasedLights/ImageBasedLightFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/ImageBasedLights/ImageBasedLightFeatureProcessor.cpp @@ -11,8 +11,6 @@ #include #include -#include - namespace AZ { namespace Render diff --git a/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp index 262e003cdb..c11d223458 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Mesh/MeshFeatureProcessor.cpp @@ -24,7 +24,6 @@ #include #include -#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/PostProcess/Bloom/BloomSettings.cpp b/Gems/Atom/Feature/Common/Code/Source/PostProcess/Bloom/BloomSettings.cpp index ecc1683bc4..d7314bc574 100644 --- a/Gems/Atom/Feature/Common/Code/Source/PostProcess/Bloom/BloomSettings.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/PostProcess/Bloom/BloomSettings.cpp @@ -7,7 +7,6 @@ */ -#include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/PostProcess/DepthOfField/DepthOfFieldSettings.cpp b/Gems/Atom/Feature/Common/Code/Source/PostProcess/DepthOfField/DepthOfFieldSettings.cpp index 98b527868d..2869408080 100644 --- a/Gems/Atom/Feature/Common/Code/Source/PostProcess/DepthOfField/DepthOfFieldSettings.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/PostProcess/DepthOfField/DepthOfFieldSettings.cpp @@ -7,7 +7,6 @@ */ -#include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/PostProcess/ExposureControl/ExposureControlSettings.cpp b/Gems/Atom/Feature/Common/Code/Source/PostProcess/ExposureControl/ExposureControlSettings.cpp index 26c2a61d54..5f52fb02a7 100644 --- a/Gems/Atom/Feature/Common/Code/Source/PostProcess/ExposureControl/ExposureControlSettings.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/PostProcess/ExposureControl/ExposureControlSettings.cpp @@ -6,7 +6,6 @@ * */ -#include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/PostProcess/LookModification/LookModificationSettings.cpp b/Gems/Atom/Feature/Common/Code/Source/PostProcess/LookModification/LookModificationSettings.cpp index cbc357db61..fb56ce8c55 100644 --- a/Gems/Atom/Feature/Common/Code/Source/PostProcess/LookModification/LookModificationSettings.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/PostProcess/LookModification/LookModificationSettings.cpp @@ -6,7 +6,6 @@ * */ -#include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/PostProcess/PostProcessFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/PostProcess/PostProcessFeatureProcessor.cpp index c8e683e1d1..1979e56180 100644 --- a/Gems/Atom/Feature/Common/Code/Source/PostProcess/PostProcessFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/PostProcess/PostProcessFeatureProcessor.cpp @@ -15,8 +15,6 @@ // Using ebus as a temporary workaround #include -#include - namespace AZ { namespace Render diff --git a/Gems/Atom/Feature/Common/Code/Source/PostProcess/Ssao/SsaoSettings.cpp b/Gems/Atom/Feature/Common/Code/Source/PostProcess/Ssao/SsaoSettings.cpp index 14b50d7c88..1975b3a73f 100644 --- a/Gems/Atom/Feature/Common/Code/Source/PostProcess/Ssao/SsaoSettings.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/PostProcess/Ssao/SsaoSettings.cpp @@ -7,7 +7,6 @@ */ -#include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/PostProcessing/ExposureControlRenderProxy.cpp b/Gems/Atom/Feature/Common/Code/Source/PostProcessing/ExposureControlRenderProxy.cpp index 924af4ab98..49e2db810a 100644 --- a/Gems/Atom/Feature/Common/Code/Source/PostProcessing/ExposureControlRenderProxy.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/PostProcessing/ExposureControlRenderProxy.cpp @@ -15,7 +15,6 @@ #include -#include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/PostProcessing/SMAAFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/PostProcessing/SMAAFeatureProcessor.cpp index ad059fbec0..afe8aa0079 100644 --- a/Gems/Atom/Feature/Common/Code/Source/PostProcessing/SMAAFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/PostProcessing/SMAAFeatureProcessor.cpp @@ -12,8 +12,6 @@ #include #include -#include - #include #include @@ -66,7 +64,7 @@ namespace AZ void SMAAFeatureProcessor::Simulate(const FeatureProcessor::SimulatePacket& packet) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(AzRender); AZ_UNUSED(packet); } diff --git a/Gems/Atom/Feature/Common/Code/Source/RayTracing/RayTracingFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/RayTracing/RayTracingFeatureProcessor.cpp index af53fc3ce1..b3bcd44d88 100644 --- a/Gems/Atom/Feature/Common/Code/Source/RayTracing/RayTracingFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/RayTracing/RayTracingFeatureProcessor.cpp @@ -7,7 +7,6 @@ */ #include -#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/ReflectionProbe/ReflectionProbe.cpp b/Gems/Atom/Feature/Common/Code/Source/ReflectionProbe/ReflectionProbe.cpp index 4ac5782b04..77031ca3af 100644 --- a/Gems/Atom/Feature/Common/Code/Source/ReflectionProbe/ReflectionProbe.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/ReflectionProbe/ReflectionProbe.cpp @@ -7,7 +7,6 @@ */ #include -#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/ReflectionProbe/ReflectionProbeFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/ReflectionProbe/ReflectionProbeFeatureProcessor.cpp index e9038858ad..0f9356428a 100644 --- a/Gems/Atom/Feature/Common/Code/Source/ReflectionProbe/ReflectionProbeFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/ReflectionProbe/ReflectionProbeFeatureProcessor.cpp @@ -17,8 +17,6 @@ #include #include #include -#include - namespace AZ { namespace Render diff --git a/Gems/Atom/Feature/Common/Code/Source/ScreenSpace/DeferredFogSettings.cpp b/Gems/Atom/Feature/Common/Code/Source/ScreenSpace/DeferredFogSettings.cpp index 4cde65b9da..fff1c41150 100644 --- a/Gems/Atom/Feature/Common/Code/Source/ScreenSpace/DeferredFogSettings.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/ScreenSpace/DeferredFogSettings.cpp @@ -6,7 +6,6 @@ * */ -#include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/Shadows/ProjectedShadowFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/Shadows/ProjectedShadowFeatureProcessor.cpp index c0cc93d7e0..17866cdd1c 100644 --- a/Gems/Atom/Feature/Common/Code/Source/Shadows/ProjectedShadowFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/Shadows/ProjectedShadowFeatureProcessor.cpp @@ -8,7 +8,6 @@ #include -#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshFeatureProcessor.cpp index c135b017fa..37b18291dc 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshFeatureProcessor.cpp @@ -25,7 +25,6 @@ #include -#include #include #include #include diff --git a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshRenderProxy.cpp b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshRenderProxy.cpp index c9bfebe25b..2f8ccc12ed 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshRenderProxy.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/SkinnedMesh/SkinnedMeshRenderProxy.cpp @@ -18,8 +18,6 @@ #include #include -#include - namespace AZ { namespace Render @@ -35,7 +33,7 @@ namespace AZ bool SkinnedMeshRenderProxy::Init(const RPI::Scene& scene, SkinnedMeshFeatureProcessor* featureProcessor) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(AzRender); if(!m_instance->m_model) { return false; diff --git a/Gems/Atom/Feature/Common/Code/Source/SkyBox/SkyBoxFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/SkyBox/SkyBoxFeatureProcessor.cpp index ca8775a073..3c85f16821 100644 --- a/Gems/Atom/Feature/Common/Code/Source/SkyBox/SkyBoxFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/SkyBox/SkyBoxFeatureProcessor.cpp @@ -8,8 +8,6 @@ #include -#include - #include #include @@ -190,7 +188,7 @@ namespace AZ void SkyBoxFeatureProcessor::Render(const FeatureProcessor::RenderPacket& packet) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(AzRender); AZ_UNUSED(packet); } diff --git a/Gems/Atom/Feature/Common/Code/Source/TransformService/TransformServiceFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/TransformService/TransformServiceFeatureProcessor.cpp index 141acbd744..54ad77d403 100644 --- a/Gems/Atom/Feature/Common/Code/Source/TransformService/TransformServiceFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/TransformService/TransformServiceFeatureProcessor.cpp @@ -14,7 +14,6 @@ #include #include -#include #include namespace AZ diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/MemorySubAllocator.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/MemorySubAllocator.h index 3e464a6974..23caed3031 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/MemorySubAllocator.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/MemorySubAllocator.h @@ -12,8 +12,6 @@ #include #include -#include - namespace AZ { namespace RHI @@ -96,7 +94,7 @@ namespace AZ template typename MemorySubAllocator::memory_allocation MemorySubAllocator::Allocate(size_t sizeInBytes, size_t alignmentInBytes) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); if (RHI::AlignUp(sizeInBytes, alignmentInBytes) > m_descriptor.m_capacityInBytes) { return memory_allocation(); diff --git a/Gems/Atom/RHI/Code/Source/RHI/AliasedHeap.cpp b/Gems/Atom/RHI/Code/Source/RHI/AliasedHeap.cpp index 3e1c94b23d..f3afbabbe2 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/AliasedHeap.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/AliasedHeap.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include namespace AZ diff --git a/Gems/Atom/RHI/Code/Source/RHI/BufferPool.cpp b/Gems/Atom/RHI/Code/Source/RHI/BufferPool.cpp index 94b0b57c37..e1863ba085 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/BufferPool.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/BufferPool.cpp @@ -8,8 +8,6 @@ #include #include -#include - namespace AZ { namespace RHI @@ -119,7 +117,7 @@ namespace AZ ResultCode BufferPool::InitBuffer(const BufferInitRequest& initRequest) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); if (!ValidateInitRequest(initRequest)) { @@ -168,7 +166,7 @@ namespace AZ ResultCode BufferPool::MapBuffer(const BufferMapRequest& request, BufferMapResponse& response) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); if (!ValidateIsInitialized() || !ValidateNotProcessingFrame()) { diff --git a/Gems/Atom/RHI/Code/Source/RHI/CommandListValidator.cpp b/Gems/Atom/RHI/Code/Source/RHI/CommandListValidator.cpp index f885a86800..58c2136e2f 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/CommandListValidator.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/CommandListValidator.cpp @@ -19,8 +19,6 @@ #include #include #include -#include - namespace AZ { namespace RHI @@ -31,7 +29,7 @@ namespace AZ { return; } - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); AZ_Assert(m_scope == nullptr, "BeginScope called twice."); m_scope = &scope; @@ -58,7 +56,7 @@ namespace AZ { return true; } - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); ValidateViewContext context; context.m_scopeName = m_scope->GetId().GetCStr(); context.m_srgName = shaderResourceGroup.GetName().GetCStr(); diff --git a/Gems/Atom/RHI/Code/Source/RHI/Device.cpp b/Gems/Atom/RHI/Code/Source/RHI/Device.cpp index c8497cf7b1..38abdd6968 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/Device.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/Device.cpp @@ -9,7 +9,6 @@ #include #include -#include #include namespace AZ @@ -112,7 +111,7 @@ namespace AZ ResultCode Device::BeginFrame() { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); if (ValidateIsInitialized() && ValidateIsNotInFrame()) { diff --git a/Gems/Atom/RHI/Code/Source/RHI/FrameGraph.cpp b/Gems/Atom/RHI/Code/Source/RHI/FrameGraph.cpp index e4e1a887b0..25158b1b3d 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/FrameGraph.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/FrameGraph.cpp @@ -17,8 +17,6 @@ #include #include #include -#include -#include namespace AZ { @@ -61,7 +59,7 @@ namespace AZ void FrameGraph::Begin() { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); AZ_Assert(m_isBuilding == false, "FrameGraph::Begin called, but End was never called on the previous build cycle!"); AZ_Assert(m_isCompiled == false, "FrameGraph::Clear must be called before reuse."); diff --git a/Gems/Atom/RHI/Code/Source/RHI/FrameGraphAttachmentDatabase.cpp b/Gems/Atom/RHI/Code/Source/RHI/FrameGraphAttachmentDatabase.cpp index 388277ff59..f33aebaee5 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/FrameGraphAttachmentDatabase.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/FrameGraphAttachmentDatabase.cpp @@ -12,8 +12,6 @@ #include #include #include -#include - namespace AZ { namespace RHI diff --git a/Gems/Atom/RHI/Code/Source/RHI/FrameGraphCompiler.cpp b/Gems/Atom/RHI/Code/Source/RHI/FrameGraphCompiler.cpp index d06ec002e4..347d47d19a 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/FrameGraphCompiler.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/FrameGraphCompiler.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -288,7 +287,7 @@ namespace AZ return; } - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); /** * Each attachment declares which queue classes it can be used on. We require that the first scope be on the most diff --git a/Gems/Atom/RHI/Code/Source/RHI/FrameGraphExecuter.cpp b/Gems/Atom/RHI/Code/Source/RHI/FrameGraphExecuter.cpp index 6888531b67..7599e9c8f6 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/FrameGraphExecuter.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/FrameGraphExecuter.cpp @@ -10,8 +10,6 @@ #include #include #include -#include - namespace AZ { namespace RHI diff --git a/Gems/Atom/RHI/Code/Source/RHI/FrameGraphLogger.cpp b/Gems/Atom/RHI/Code/Source/RHI/FrameGraphLogger.cpp index 7b96352eca..57455e43f4 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/FrameGraphLogger.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/FrameGraphLogger.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include namespace AZ diff --git a/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp b/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp index bb7ae4ca27..716582b3ab 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/FrameScheduler.cpp @@ -24,7 +24,6 @@ #include #include -#include #include #include #include diff --git a/Gems/Atom/RHI/Code/Source/RHI/ResourceView.cpp b/Gems/Atom/RHI/Code/Source/RHI/ResourceView.cpp index 2b769a7e31..f64a29bb8c 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/ResourceView.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/ResourceView.cpp @@ -8,8 +8,6 @@ #include #include -#include - namespace AZ { namespace RHI @@ -57,7 +55,7 @@ namespace AZ ResultCode ResourceView::OnResourceInvalidate() { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); ResultCode resultCode = InvalidateInternal(); if (resultCode == ResultCode::Success) { diff --git a/Gems/Atom/RHI/Code/Source/RHI/Scope.cpp b/Gems/Atom/RHI/Code/Source/RHI/Scope.cpp index 63bb44453a..472309929e 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/Scope.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/Scope.cpp @@ -10,8 +10,6 @@ #include #include -#include - namespace AZ { namespace RHI @@ -90,7 +88,7 @@ namespace AZ void Scope::QueueResourcePoolResolves(ResourcePoolDatabase& resourcePoolDatabase) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); const auto queuePoolResolverFunction = [this](ResourcePoolResolver* poolResolver) { diff --git a/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupInvalidateRegistry.cpp b/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupInvalidateRegistry.cpp index a35f73df91..0791fdd34e 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupInvalidateRegistry.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupInvalidateRegistry.cpp @@ -7,8 +7,6 @@ */ #include #include -#include - namespace AZ { namespace RHI @@ -60,7 +58,7 @@ namespace AZ ResultCode ShaderResourceGroupInvalidateRegistry::OnResourceInvalidate() { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); AZ_Assert(m_compileGroupFunction, "No compile function set"); const Resource* resource = *ResourceInvalidateBus::GetCurrentBusId(); diff --git a/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupPool.cpp b/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupPool.cpp index eb80b038eb..3209a30f1a 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupPool.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/ShaderResourceGroupPool.cpp @@ -8,8 +8,6 @@ #include #include #include -#include - namespace AZ { namespace RHI @@ -250,7 +248,7 @@ namespace AZ void ShaderResourceGroupPool::CompileGroupsForInterval(Interval interval) { - AZ_TRACE_METHOD_NAME("CompileGroupsForInterval"); + AZ_PROFILE_SCOPE(RHI, "CompileGroupsForInterval"); AZ_Assert(m_isCompiling, "You must call CompileGroupsBegin() first!"); AZ_Assert( diff --git a/Gems/Atom/RHI/Code/Source/RHI/StreamingImagePool.cpp b/Gems/Atom/RHI/Code/Source/RHI/StreamingImagePool.cpp index 6d67fa7844..6db8da3b55 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/StreamingImagePool.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/StreamingImagePool.cpp @@ -7,8 +7,6 @@ */ #include -#include - namespace AZ { namespace RHI @@ -74,7 +72,7 @@ namespace AZ ResultCode StreamingImagePool::Init(Device& device, const StreamingImagePoolDescriptor& descriptor) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); return ResourcePool::Init( device, descriptor, @@ -93,7 +91,7 @@ namespace AZ ResultCode StreamingImagePool::InitImage(const StreamingImageInitRequest& initRequest) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); if (!ValidateIsInitialized()) { diff --git a/Gems/Atom/RHI/Code/Source/RHI/SwapChain.cpp b/Gems/Atom/RHI/Code/Source/RHI/SwapChain.cpp index 074eedf1b6..6140bf545d 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/SwapChain.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/SwapChain.cpp @@ -8,8 +8,6 @@ #include #include #include -#include - namespace AZ { namespace RHI @@ -185,7 +183,7 @@ namespace AZ void SwapChain::Present() { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); // Due to swapchain recreation, the images are refreshed. // There is no need to present swapchain for this frame. const uint32_t imageCount = aznumeric_cast(m_images.size()); diff --git a/Gems/Atom/RHI/Code/Tests/RHITestFixture.h b/Gems/Atom/RHI/Code/Tests/RHITestFixture.h index 620fc03c6f..da91c9e5f7 100644 --- a/Gems/Atom/RHI/Code/Tests/RHITestFixture.h +++ b/Gems/Atom/RHI/Code/Tests/RHITestFixture.h @@ -14,8 +14,6 @@ #include #include -#include -#include #include #include #include diff --git a/Gems/Atom/RHI/DX12/Code/Source/Platform/Windows/RHI/NsightAftermathGpuCrashTracker_Windows.cpp b/Gems/Atom/RHI/DX12/Code/Source/Platform/Windows/RHI/NsightAftermathGpuCrashTracker_Windows.cpp index 368ad5f4d0..e94ddcd7c7 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/Platform/Windows/RHI/NsightAftermathGpuCrashTracker_Windows.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/Platform/Windows/RHI/NsightAftermathGpuCrashTracker_Windows.cpp @@ -12,8 +12,6 @@ #include #include #include -#include - #if defined(USE_NSIGHT_AFTERMATH) GpuCrashTracker::~GpuCrashTracker() { diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/AliasedHeap.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/AliasedHeap.cpp index d45c58e24c..c988c4e14e 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/AliasedHeap.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/AliasedHeap.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include namespace AZ diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/BufferMemoryAllocator.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/BufferMemoryAllocator.cpp index d0e7d5364e..f03c5f32a8 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/BufferMemoryAllocator.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/BufferMemoryAllocator.cpp @@ -10,7 +10,6 @@ #include #include -#include namespace AZ { @@ -82,7 +81,7 @@ namespace AZ BufferMemoryView BufferMemoryAllocator::Allocate(size_t sizeInBytes, size_t overrideSubAllocAlignment) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); BufferMemoryView bufferMemoryView; @@ -141,7 +140,7 @@ namespace AZ BufferMemoryView BufferMemoryAllocator::AllocateUnique(const RHI::BufferDescriptor& bufferDescriptor) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); const size_t alignedSize = RHI::AlignUp(bufferDescriptor.m_byteCount, Alignment::CommittedBuffer); diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/BufferPool.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/BufferPool.cpp index c7b78a3945..ce09556767 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/BufferPool.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/BufferPool.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include @@ -54,7 +53,7 @@ namespace AZ CpuVirtualAddress MapBuffer(const RHI::BufferMapRequest& request) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); MemoryView stagingMemory = m_device->AcquireStagingMemory(request.m_byteCount, Alignment::Buffer); @@ -247,7 +246,7 @@ namespace AZ RHI::ResultCode BufferPool::InitBufferInternal(RHI::Buffer& bufferBase, const RHI::BufferDescriptor& bufferDescriptor) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); // We need respect the buffer's alignment if the buffer is used for SRV or UAV bool useBufferAlignment = RHI::CheckBitsAny(bufferDescriptor.m_bindFlags, @@ -307,7 +306,7 @@ namespace AZ RHI::ResultCode BufferPool::MapBufferInternal(const RHI::BufferMapRequest& request, RHI::BufferMapResponse& response) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); const RHI::BufferPoolDescriptor& poolDescriptor = GetDescriptor(); Buffer& buffer = *static_cast(request.m_buffer); diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandList.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandList.cpp index 07cf3bf8ad..25b412fbe1 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandList.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandList.cpp @@ -20,7 +20,6 @@ #include #include #include -#include #include #include #include @@ -563,7 +562,7 @@ namespace AZ return; } - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); D3D12_VIEWPORT dx12Viewports[D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE]; const auto& viewports = m_state.m_viewportState.m_states; @@ -588,7 +587,7 @@ namespace AZ return; } - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); D3D12_RECT dx12Scissors[D3D12_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE]; const auto& scissors = m_state.m_scissorState.m_states; diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandListPool.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandListPool.cpp index 20021e71ba..a84e34a811 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandListPool.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandListPool.cpp @@ -9,8 +9,6 @@ #include #include #include -#include - namespace AZ { namespace DX12 @@ -28,7 +26,7 @@ namespace AZ RHI::Ptr CommandAllocatorFactory::CreateObject() { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); Microsoft::WRL::ComPtr allocator; AssertSuccess(m_descriptor.m_dx12Device->CreateCommandAllocator( ConvertHardwareQueueClass(m_descriptor.m_hardwareQueueClass), @@ -39,7 +37,7 @@ namespace AZ void CommandAllocatorFactory::ResetObject(ID3D12CommandAllocator& allocator) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); allocator.Reset(); } diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueueContext.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueueContext.cpp index 5692809443..d640c2d543 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueueContext.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/CommandQueueContext.cpp @@ -7,7 +7,6 @@ */ #include -#include #include #include @@ -57,16 +56,6 @@ namespace AZ m_commandQueues[hardwareQueueIdx]->Init(device, commandQueueDesc); } - Debug::EventTraceDrillerSetupBus::Broadcast( - &Debug::EventTraceDrillerSetupBus::Events::SetThreadName, - EventTrace::GpuQueueIds[static_cast(RHI::HardwareQueueClass::Graphics)], - EventTrace::GpuQueueNames[static_cast(RHI::HardwareQueueClass::Graphics)]); - - Debug::EventTraceDrillerSetupBus::Broadcast( - &Debug::EventTraceDrillerSetupBus::Events::SetThreadName, - EventTrace::GpuQueueIds[static_cast(RHI::HardwareQueueClass::Compute)], - EventTrace::GpuQueueNames[static_cast(RHI::HardwareQueueClass::Compute)]); - CalibrateClocks(); } diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/Device.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/Device.cpp index 3d44e56953..fc4ac81b41 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/Device.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/Device.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -191,7 +190,7 @@ namespace AZ void Device::EndFrameInternal() { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); m_commandQueueContext.End(); m_commandListAllocator.Collect(); @@ -359,7 +358,7 @@ namespace AZ D3D12_RESOURCE_STATES initialState, D3D12_HEAP_TYPE heapType) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); D3D12_RESOURCE_DESC resourceDesc; ConvertImageDescriptor(imageDescriptor, resourceDesc); diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/FrameGraphCompiler.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/FrameGraphCompiler.cpp index a732b888ca..e73978fccc 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/FrameGraphCompiler.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/FrameGraphCompiler.cpp @@ -19,8 +19,6 @@ #include #include #include -#include - // #define AZ_DX12_FRAMESCHEDULER_LOG_TRANSITIONS namespace AZ @@ -694,7 +692,7 @@ namespace AZ { Device& device = static_cast(GetDevice()); - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); CommandQueueContext& context = device.GetCommandQueueContext(); for (RHI::Scope* scopeBase : frameGraph.GetScopes()) diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/FrameGraphExecuter.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/FrameGraphExecuter.cpp index 156dd6e38e..2484890fea 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/FrameGraphExecuter.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/FrameGraphExecuter.cpp @@ -12,8 +12,6 @@ #include #include #include -#include - namespace AZ { diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/ImagePool.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/ImagePool.cpp index bbbc1ac943..7947c84736 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/ImagePool.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/ImagePool.cpp @@ -11,8 +11,6 @@ #include #include #include -#include - namespace AZ { namespace DX12 @@ -33,7 +31,7 @@ namespace AZ RHI::ResultCode UpdateImage(const RHI::ImageUpdateRequest& request, size_t& bytesTransferred) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); AZStd::lock_guard lock(m_imagePacketMutex); diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/MemoryPageAllocator.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/MemoryPageAllocator.cpp index 2715b7063b..931e3e132f 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/MemoryPageAllocator.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/MemoryPageAllocator.cpp @@ -7,8 +7,6 @@ */ #include #include -#include - namespace AZ { namespace DX12 @@ -35,7 +33,7 @@ namespace AZ return nullptr; } - AZ_TRACE_METHOD_NAME("Create Buffer Page"); + AZ_PROFILE_SCOPE(RHI, "Create Buffer Page"); D3D12_RESOURCE_STATES initialResourceState = ConvertInitialResourceState(m_descriptor.m_heapMemoryLevel, m_descriptor.m_hostMemoryAccess); if (RHI::CheckBitsAny(m_descriptor.m_bindFlags, RHI::BufferBindFlags::RayTracingAccelerationStructure)) diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/MemoryView.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/MemoryView.cpp index 6389076408..4b8604fa51 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/MemoryView.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/MemoryView.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include @@ -55,7 +54,7 @@ namespace AZ CpuVirtualAddress MemoryView::Map(RHI::HostMemoryAccess hostAccess) const { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); CpuVirtualAddress cpuAddress = nullptr; D3D12_RANGE readRange = {}; diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/PipelineState.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/PipelineState.cpp index a2876398eb..85df5dde25 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/PipelineState.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/PipelineState.cpp @@ -10,8 +10,6 @@ #include #include #include -#include - namespace AZ { namespace DX12 diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingBlas.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingBlas.cpp index 0f651f9be3..b5b4850470 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingBlas.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingBlas.cpp @@ -5,7 +5,6 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ -#include #include #include #include diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingPipelineState.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingPipelineState.cpp index 37f4e6b49a..24c3cf3d16 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingPipelineState.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingPipelineState.cpp @@ -10,8 +10,6 @@ #include #include #include -#include - namespace AZ { namespace DX12 diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingShaderTable.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingShaderTable.cpp index c84c440c92..38f2f1c219 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingShaderTable.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingShaderTable.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingTlas.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingTlas.cpp index 52e4aa4881..84f8daba04 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingTlas.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/RayTracingTlas.cpp @@ -5,7 +5,6 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ -#include #include #include #include diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/Scope.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/Scope.cpp index e27a756054..95e88af77d 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/Scope.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/Scope.cpp @@ -20,8 +20,6 @@ #include #include #include -#include - namespace AZ { namespace DX12 @@ -305,7 +303,7 @@ namespace AZ uint32_t commandListCount) const { AZ_UNUSED(commandListCount); - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); commandList.GetValidator().BeginScope(*this); @@ -387,7 +385,7 @@ namespace AZ uint32_t commandListIndex, uint32_t commandListCount) const { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); const bool isEpilogue = (commandListIndex + 1) == commandListCount; if (isEpilogue) diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/ShaderResourceGroupPool.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/ShaderResourceGroupPool.cpp index 087a36dc2f..1b50f09ea3 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/ShaderResourceGroupPool.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/ShaderResourceGroupPool.cpp @@ -14,8 +14,6 @@ #include #include #include -#include - namespace AZ { diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/StagingMemoryAllocator.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/StagingMemoryAllocator.cpp index 337b25a793..a7e48916ad 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/StagingMemoryAllocator.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/StagingMemoryAllocator.cpp @@ -9,8 +9,6 @@ #include #include -#include - namespace AZ { namespace DX12 @@ -124,7 +122,7 @@ namespace AZ MemoryView StagingMemoryAllocator::AllocateUnique(size_t sizeInBytes) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); RHI::BufferDescriptor descriptor; descriptor.m_byteCount = sizeInBytes; MemoryView memoryView = m_device->CreateBufferCommitted(descriptor, D3D12_RESOURCE_STATE_GENERIC_READ, D3D12_HEAP_TYPE_UPLOAD); diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/StreamingImagePool.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/StreamingImagePool.cpp index add7364056..6af229cc55 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/StreamingImagePool.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/StreamingImagePool.cpp @@ -12,8 +12,6 @@ #include #include #include -#include - // NOTE: Tiled resources are currently disabled, because RenderDoc does not support them. // #define AZ_RHI_USE_TILED_RESOURCES @@ -121,7 +119,7 @@ namespace AZ D3D12_RESOURCE_ALLOCATION_INFO StreamingImagePool::GetAllocationInfo(const RHI::ImageDescriptor& imageDescriptor, uint32_t residentMipLevel) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); uint32_t alignment = GetFormatDimensionAlignment(imageDescriptor.m_format); @@ -138,9 +136,7 @@ namespace AZ RHI::ResultCode StreamingImagePool::InitInternal([[maybe_unused]] RHI::Device& deviceBase, [[maybe_unused]] const RHI::StreamingImagePoolDescriptor& descriptor) { - AZ_TRACE_METHOD(); - - + AZ_PROFILE_FUNCTION(RHI); #ifdef AZ_RHI_USE_TILED_RESOURCES { @@ -232,7 +228,7 @@ namespace AZ void StreamingImagePool::AllocatePackedImageTiles(Image& image) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); AZ_Assert(image.IsTiled(), "This method is only valid for tiled resources."); AZ_Assert(image.GetDescriptor().m_arraySize == 1, "Not implemented for image arrays."); @@ -305,7 +301,7 @@ namespace AZ RHI::ResultCode StreamingImagePool::InitImageInternal(const RHI::StreamingImageInitRequest& request) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); Image& image = static_cast(*request.m_image); diff --git a/Gems/Atom/RHI/DX12/Code/Source/RHI/SystemComponent.cpp b/Gems/Atom/RHI/DX12/Code/Source/RHI/SystemComponent.cpp index 1f6cea1151..17993d7c1d 100644 --- a/Gems/Atom/RHI/DX12/Code/Source/RHI/SystemComponent.cpp +++ b/Gems/Atom/RHI/DX12/Code/Source/RHI/SystemComponent.cpp @@ -38,7 +38,6 @@ #include #include #include -#include #include namespace AZ diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/AliasedHeap.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/AliasedHeap.cpp index 440615d77f..011dc7a353 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/AliasedHeap.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/AliasedHeap.cpp @@ -8,7 +8,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/AsyncUploadQueue.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/AsyncUploadQueue.cpp index eadd571452..f731d9e9d9 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/AsyncUploadQueue.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/AsyncUploadQueue.cpp @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -120,21 +119,21 @@ namespace AZ m_copyQueue->QueueCommand([=](void* queue) { - AZ_TRACE_METHOD_NAME("Upload Buffer"); + AZ_PROFILE_SCOPE(RHI, "Upload Buffer"); size_t pendingByteOffset = 0; size_t pendingByteCount = byteCount; CommandQueue* commandQueue = static_cast(queue); while (pendingByteCount > 0) { - AZ_TRACE_METHOD_NAME("Upload Buffer Chunk"); + AZ_PROFILE_SCOPE(RHI, "Upload Buffer Chunk"); FramePacket* framePacket = BeginFramePacket(commandQueue); const size_t bytesToCopy = AZStd::min(pendingByteCount, m_descriptor.m_stagingSizeInBytes); { - AZ_TRACE_METHOD_NAME("Copy CPU buffer"); + AZ_PROFILE_SCOPE(RHI, "Copy CPU buffer"); memcpy(framePacket->m_stagingResourceData, sourceData + pendingByteOffset, bytesToCopy); Platform::SynchronizeBufferOnCPU(framePacket->m_stagingResource, 0, bytesToCopy); } @@ -379,7 +378,7 @@ namespace AZ { AZ_Assert(!m_recordingFrame, "The previous frame packet isn't ended"); - AZ_TRACE_METHOD_NAME("AsyncUploadQueue: Wait copy frame"); + AZ_PROFILE_SCOPE(RHI, "AsyncUploadQueue: Wait copy frame"); FramePacket& framePacket = m_framePackets[m_frameIndex]; framePacket.m_fence.WaitOnCpu(); // ensure any previous uploads using this frame have completed @@ -400,7 +399,7 @@ namespace AZ { AZ_Assert(m_recordingFrame, "The frame packet wasn't started. You need to call StartFramePacket first."); - AZ_TRACE_METHOD_NAME("AsyncUploadQueue: Execute command"); + AZ_PROFILE_SCOPE(RHI, "AsyncUploadQueue: Execute command"); FramePacket& framePacket = m_framePackets[m_frameIndex]; framePacket.m_fence.SignalFromGpu(framePacket.m_mtlCommandBuffer); // signal fence when this upload haas completed diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/BufferMemoryAllocator.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/BufferMemoryAllocator.cpp index 7676459154..63c6dd68e4 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/BufferMemoryAllocator.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/BufferMemoryAllocator.cpp @@ -116,7 +116,7 @@ namespace AZ BufferMemoryView BufferMemoryAllocator::AllocateUnique(const RHI::BufferDescriptor& bufferDescriptor) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); const size_t alignedSize = RHI::AlignUp(bufferDescriptor.m_byteCount, Alignment::Buffer); RHI::HeapMemoryUsage& heapMemoryUsage = *m_descriptor.m_getHeapMemoryUsageFunction(); diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandList.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandList.cpp index 3c45e69d8b..2b8be3d1ab 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandList.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandList.cpp @@ -7,7 +7,6 @@ */ #include -#include #include #include #include @@ -177,7 +176,7 @@ namespace AZ void CommandList::Submit(const RHI::DispatchItem& dispatchItem) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); CreateEncoder(CommandEncoderType::Compute); bool bindResourceSuccessfull = CommitShaderResources(dispatchItem); @@ -479,7 +478,7 @@ namespace AZ void CommandList::Submit(const RHI::DrawItem& drawItem) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); CreateEncoder(CommandEncoderType::Render); @@ -582,7 +581,7 @@ namespace AZ { if (m_state.m_pipelineState != pipelineState) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); m_state.m_pipelineState = pipelineState; switch (pipelineState->GetType()) @@ -732,7 +731,7 @@ namespace AZ return; } - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); const auto& viewports = m_state.m_viewportState.m_states; MTLViewport metalViewports[viewports.size()]; diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandListBase.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandListBase.cpp index e386c25515..063622354b 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandListBase.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandListBase.cpp @@ -7,7 +7,6 @@ */ #include -#include #include #include diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueCommandBuffer.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueCommandBuffer.cpp index e2a456c81c..0cdccef01e 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueCommandBuffer.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueCommandBuffer.cpp @@ -7,7 +7,6 @@ */ #include -#include #include namespace AZ diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueContext.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueContext.cpp index 37f8a8bab8..9fa0640f64 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueContext.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/CommandQueueContext.cpp @@ -6,7 +6,6 @@ * */ -#include #include #include #include @@ -60,7 +59,7 @@ namespace AZ void CommandQueueContext::WaitForIdle() { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); for (uint32_t hardwareQueueIdx = 0; hardwareQueueIdx < RHI::HardwareQueueClassCount; ++hardwareQueueIdx) { m_commandQueues[hardwareQueueIdx]->WaitForIdle(); diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/Device.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/Device.cpp index 76af1ecab1..91d8287e8d 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/Device.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/Device.cpp @@ -8,7 +8,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/FrameGraphCompiler.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/FrameGraphCompiler.cpp index 9ee000e166..568d990e6f 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/FrameGraphCompiler.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/FrameGraphCompiler.cpp @@ -7,7 +7,6 @@ */ #include -#include #include #include #include @@ -47,7 +46,7 @@ namespace AZ { Device& device = static_cast(GetDevice()); - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); CommandQueueContext& context = device.GetCommandQueueContext(); for (RHI::Scope* scopeBase : frameGraph.GetScopes()) diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/FrameGraphExecuter.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/FrameGraphExecuter.cpp index 73bdcde9a0..41824ced9e 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/FrameGraphExecuter.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/FrameGraphExecuter.cpp @@ -7,7 +7,6 @@ */ #include -#include #include #include #include diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/MemoryPageAllocator.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/MemoryPageAllocator.cpp index 619a6e5b8a..2787eef9af 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/MemoryPageAllocator.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/MemoryPageAllocator.cpp @@ -9,8 +9,6 @@ #include #include #include -#include - namespace AZ { namespace Metal @@ -29,7 +27,7 @@ namespace AZ return nullptr; } - AZ_TRACE_METHOD_NAME("Create Buffer Page"); + AZ_PROFILE_SCOPE(RHI, "Create Buffer Page"); RHI::BufferDescriptor bufferDescriptor; bufferDescriptor.m_byteCount = m_descriptor.m_pageSizeInBytes; diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/PipelineState.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/PipelineState.cpp index 8d6ab8fee3..f7cc417224 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/PipelineState.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/PipelineState.cpp @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/Scope.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/Scope.cpp index c680684efd..4a1dc8765d 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/Scope.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/Scope.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include #include @@ -273,7 +272,7 @@ namespace AZ AZ::u32 commandListIndex, AZ::u32 commandListCount) const { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); if(m_isWritingToSwapChainScope) { @@ -331,7 +330,7 @@ namespace AZ AZ::u32 commandListIndex, AZ::u32 commandListCount) const { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); const bool isEpilogue = (commandListIndex + 1) == commandListCount; commandList.FlushEncoder(); diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/ShaderResourceGroupPool.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/ShaderResourceGroupPool.cpp index 0a9c001868..654fe9e4f6 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/ShaderResourceGroupPool.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/ShaderResourceGroupPool.cpp @@ -6,7 +6,6 @@ * */ -#include #include #include #include diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/StreamingImagePool.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/StreamingImagePool.cpp index 3d90b595e4..2ae7feddb8 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/StreamingImagePool.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/StreamingImagePool.cpp @@ -8,7 +8,6 @@ #include #include -#include #include #include #include @@ -36,7 +35,7 @@ namespace AZ RHI::ResultCode StreamingImagePool::InitInternal(RHI::Device& deviceBase, const RHI::StreamingImagePoolDescriptor& descriptor) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); Device& device = static_cast(deviceBase); SetResolver(AZStd::make_unique(device, this)); @@ -89,7 +88,7 @@ namespace AZ RHI::ResultCode StreamingImagePool::ExpandImageInternal(const RHI::StreamingImageExpandRequest& request) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); auto& image = static_cast(*request.m_image); auto& device = static_cast(GetDevice()); diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/StreamingImagePoolResolver.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/StreamingImagePoolResolver.cpp index 0a9aaf60d6..3ef2dc915a 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/StreamingImagePoolResolver.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/StreamingImagePoolResolver.cpp @@ -6,7 +6,6 @@ * */ -#include #include #include @@ -16,7 +15,7 @@ namespace AZ { RHI::ResultCode StreamingImagePoolResolver::UpdateImage(const RHI::StreamingImageExpandRequest& request) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); Image* image = static_cast(request.m_image); const RHI::ImageDescriptor& imageDescriptor = image->GetDescriptor(); diff --git a/Gems/Atom/RHI/Metal/Code/Source/RHI/SystemComponent.cpp b/Gems/Atom/RHI/Metal/Code/Source/RHI/SystemComponent.cpp index 840bef2b1b..3d1583fe1b 100644 --- a/Gems/Atom/RHI/Metal/Code/Source/RHI/SystemComponent.cpp +++ b/Gems/Atom/RHI/Metal/Code/Source/RHI/SystemComponent.cpp @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/Atom/RHI/Null/Code/Source/RHI/SystemComponent.cpp b/Gems/Atom/RHI/Null/Code/Source/RHI/SystemComponent.cpp index 091084b097..e329d69ddc 100644 --- a/Gems/Atom/RHI/Null/Code/Source/RHI/SystemComponent.cpp +++ b/Gems/Atom/RHI/Null/Code/Source/RHI/SystemComponent.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/AliasedHeap.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/AliasedHeap.cpp index c0166e95b5..8b4d179574 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/AliasedHeap.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/AliasedHeap.cpp @@ -16,8 +16,6 @@ #include #include #include -#include - namespace AZ { namespace Vulkan diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/BufferMemoryPageAllocator.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/BufferMemoryPageAllocator.cpp index a1025e5501..00b1d4211c 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/BufferMemoryPageAllocator.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/BufferMemoryPageAllocator.cpp @@ -8,8 +8,6 @@ #include #include #include -#include - namespace AZ { namespace Vulkan @@ -50,7 +48,7 @@ namespace AZ return nullptr; } - AZ_TRACE_METHOD_NAME("Create BufferMemory Page"); + AZ_PROFILE_SCOPE(RHI, "Create BufferMemory Page"); RHI::Ptr bufferMemory; diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueueContext.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueueContext.cpp index 9cf6dce77b..c556e85979 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueueContext.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/CommandQueueContext.cpp @@ -7,7 +7,6 @@ */ #include #include -#include #include #include #include diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphCompiler.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphCompiler.cpp index e153ad6645..9a27d2898d 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphCompiler.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/FrameGraphCompiler.cpp @@ -13,7 +13,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/MemoryPageAllocator.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/MemoryPageAllocator.cpp index 7535b19106..c7c372ad0a 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/MemoryPageAllocator.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/MemoryPageAllocator.cpp @@ -8,8 +8,6 @@ #include #include #include -#include - namespace AZ { namespace Vulkan @@ -35,7 +33,7 @@ namespace AZ return nullptr; } - AZ_TRACE_METHOD_NAME("Create Memory Page"); + AZ_PROFILE_SCOPE(RHI, "Create Memory Page"); const VkMemoryPropertyFlags flags = ConvertHeapMemoryLevel(m_descriptor.m_heapMemoryLevel) | m_descriptor.m_additionalMemoryPropertyFlags; RHI::Ptr memory = GetDevice().AllocateMemory(sizeInBytes, m_descriptor.m_memoryTypeBits, flags); diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/MemoryTypeAllocator.h b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/MemoryTypeAllocator.h index 8fd083d4b9..5504e6e791 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/MemoryTypeAllocator.h +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/MemoryTypeAllocator.h @@ -10,8 +10,6 @@ #include #include #include -#include - namespace AZ { namespace Vulkan @@ -108,8 +106,7 @@ namespace AZ template View MemoryTypeAllocator::Allocate(size_t sizeInBytes, size_t alignmentInBytes, bool forceUnique /*=false*/) { - AZ_TRACE_METHOD(); - + AZ_PROFILE_FUNCTION(RHI); View memoryView; @@ -155,7 +152,7 @@ namespace AZ template View MemoryTypeAllocator::AllocateUnique(const uint64_t sizeInBytes) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RHI); auto memory = const_cast(m_pageAllocator.GetFactory()).CreateObject(sizeInBytes); if (!memory) { diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingBlas.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingBlas.cpp index 55e804aac9..333f88f8eb 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingBlas.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingBlas.cpp @@ -6,7 +6,6 @@ * */ -#include #include #include #include diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingPipelineState.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingPipelineState.cpp index 33623f93e4..65281d923f 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingPipelineState.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingPipelineState.cpp @@ -10,8 +10,6 @@ #include #include #include -#include - namespace AZ { namespace Vulkan diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingShaderTable.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingShaderTable.cpp index 0c5cda7008..d5ef121875 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingShaderTable.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingShaderTable.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingTlas.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingTlas.cpp index e36afd0b7a..ff6312b059 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingTlas.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/RayTracingTlas.cpp @@ -6,7 +6,6 @@ * */ -#include #include #include #include diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Image/StreamingImageContext.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Image/StreamingImageContext.h index ec12a14ecf..fe65831716 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Image/StreamingImageContext.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Image/StreamingImageContext.h @@ -11,6 +11,7 @@ #include #include #include +#include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp index 2d812c602f..47ad7038f8 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp @@ -17,7 +17,8 @@ #include #include #include -#include + +AZ_DECLARE_BUDGET(RPI); namespace AZ { @@ -90,7 +91,7 @@ namespace AZ RHI::ResultCode Buffer::Init(BufferAsset& bufferAsset) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RPI); RHI::ResultCode resultCode = RHI::ResultCode::Fail; @@ -140,7 +141,7 @@ namespace AZ if (bufferAsset.GetBuffer().size() > 0 && !initWithData) { - AZ_TRACE_METHOD_NAME("Stream Upload"); + AZ_PROFILE_SCOPE(RPI, "Stream Upload"); m_streamFence = RHI::Factory::Get().CreateFence(); if (m_streamFence) { diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/BufferSystem.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/BufferSystem.cpp index 77e32cd040..cff9161c7c 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/BufferSystem.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/BufferSystem.cpp @@ -16,7 +16,6 @@ #include #include -#include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Culling.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Culling.cpp index 56401e7ce6..18be5c8460 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Culling.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Culling.cpp @@ -19,7 +19,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Image/ImageSystem.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Image/ImageSystem.cpp index f201e8414c..2c85f85424 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Image/ImageSystem.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Image/ImageSystem.cpp @@ -27,7 +27,6 @@ #include -#include #include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Image/StreamingImage.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Image/StreamingImage.cpp index 8629588ea2..fb03d109a2 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Image/StreamingImage.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Image/StreamingImage.cpp @@ -16,12 +16,13 @@ #include -#include #include // Enable this define to debug output streaming image initialization and expanding process. //#define AZ_RPI_STREAMING_IMAGE_DEBUG_LOG +AZ_DECLARE_BUDGET(RPI); + namespace AZ { namespace RPI @@ -111,7 +112,7 @@ namespace AZ RHI::ResultCode StreamingImage::Init(StreamingImageAsset& imageAsset) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RPI); Data::Instance pool; if (imageAsset.GetPoolAssetId().IsValid()) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Image/StreamingImageController.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Image/StreamingImageController.cpp index a84d8ca9b7..bb7fff03cb 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Image/StreamingImageController.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Image/StreamingImageController.cpp @@ -12,9 +12,10 @@ #include -#include #include +AZ_DECLARE_BUDGET(RPI); + namespace AZ { namespace RPI @@ -34,7 +35,7 @@ namespace AZ void StreamingImageController::AttachImage(StreamingImage* image) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RPI); AZ_Assert(image, "Image must not be null"); @@ -69,7 +70,7 @@ namespace AZ void StreamingImageController::Update() { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RPI); AZStd::lock_guard lock(m_mutex); UpdateInternal(m_timestamp, m_contexts); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Image/StreamingImagePool.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Image/StreamingImagePool.cpp index 5c05422dad..23ff1abb42 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Image/StreamingImagePool.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Image/StreamingImagePool.cpp @@ -14,7 +14,6 @@ #include -#include #include namespace AZ @@ -43,7 +42,7 @@ namespace AZ RHI::ResultCode StreamingImagePool::Init(RHI::Device& device, StreamingImagePoolAsset& poolAsset) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RPI); if (Validation::IsEnabled()) { diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Material/Material.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Material/Material.cpp index 63e55d379d..1f739c24f1 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Material/Material.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Material/Material.cpp @@ -18,7 +18,6 @@ #include #include -#include #include #include @@ -57,7 +56,7 @@ namespace AZ RHI::ResultCode Material::Init(MaterialAsset& materialAsset) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RPI); ScopedValue isInitializing(&m_isInitializing, true, false); @@ -320,7 +319,7 @@ namespace AZ bool Material::Compile() { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RPI); if (NeedsCompile() && CanCompile()) { diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp index 6549255d7e..4f3cf52dad 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/Model.cpp @@ -11,7 +11,6 @@ #include -#include #include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelLod.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelLod.cpp index 7850aa6da2..a928aec12f 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelLod.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Model/ModelLod.cpp @@ -12,7 +12,6 @@ #include #include -#include #include namespace AZ @@ -52,7 +51,7 @@ namespace AZ RHI::ResultCode ModelLod::Init(const Data::Asset& lodAsset, const Data::Asset& modelAsset) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RPI); for (const ModelLodAsset::Mesh& mesh : lodAsset->GetMeshes()) { @@ -389,7 +388,7 @@ namespace AZ const ModelLodAsset::Mesh::StreamBufferInfo& streamBufferInfo, Mesh& meshInstance) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RPI); const Data::Asset& streamBufferAsset = streamBufferInfo.m_bufferAssetView.GetBufferAsset(); const Data::Instance& streamBuffer = Buffer::FindOrCreate(streamBufferAsset); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassSystem.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassSystem.cpp index 1144f20f3b..cd64010680 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassSystem.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassSystem.cpp @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/RPISystem.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/RPISystem.cpp index 4465b8594f..3416b2895d 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/RPISystem.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/RPISystem.cpp @@ -31,7 +31,6 @@ #include #include -#include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Scene.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Scene.cpp index dafd990c21..a21b0bfecd 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Scene.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Scene.cpp @@ -18,7 +18,6 @@ #include #include -#include #include #include #include diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp index df16b5cd08..7e43fba7a3 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Shader/ShaderResourceGroup.cpp @@ -10,7 +10,6 @@ #include -#include #include namespace AZ @@ -75,7 +74,7 @@ namespace AZ RHI::ResultCode ShaderResourceGroup::Init(ShaderAsset& shaderAsset, const SupervariantIndex& supervariantIndex, const AZ::Name& srgName) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RPI); const auto& lay = shaderAsset.FindShaderResourceGroupLayout(srgName, supervariantIndex); m_layout = lay.get(); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/LuaMaterialFunctor.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/LuaMaterialFunctor.cpp index c33409f687..4212583e60 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/LuaMaterialFunctor.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Material/LuaMaterialFunctor.cpp @@ -18,8 +18,6 @@ #include #include #include -#include - namespace AZ { namespace RPI @@ -123,7 +121,7 @@ namespace AZ void LuaMaterialFunctor::Process(RuntimeContext& context) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RPI); InitScriptContext(); @@ -141,7 +139,7 @@ namespace AZ void LuaMaterialFunctor::Process(EditorContext& context) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RPI); InitScriptContext(); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAsset.cpp b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAsset.cpp index e362229d2d..0574803591 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAsset.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Reflect/Model/ModelAsset.cpp @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include @@ -137,7 +136,7 @@ namespace AZ // For runtime approach is to do this during asset processing and serialized spatial information alongside with mesh model assets const auto jobLambda = [&]() -> void { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(RPI); AZStd::unique_ptr tree = AZStd::make_unique(); tree->Build(this); diff --git a/Gems/Atom/RPI/Code/Tests.Builders/BuilderTestFixture.h b/Gems/Atom/RPI/Code/Tests.Builders/BuilderTestFixture.h index 02e69e732c..4502d33e0b 100644 --- a/Gems/Atom/RPI/Code/Tests.Builders/BuilderTestFixture.h +++ b/Gems/Atom/RPI/Code/Tests.Builders/BuilderTestFixture.h @@ -10,6 +10,7 @@ #include #include +#include #include #include #include diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridComponentController.cpp index 8b864613c4..382001afd4 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/DiffuseGlobalIllumination/DiffuseProbeGridComponentController.cpp @@ -16,7 +16,6 @@ #include #include #include -#include #include #include diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp index 12b14d8162..517ba90f89 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/Mesh/MeshComponentController.cpp @@ -18,7 +18,6 @@ #include #include #include -#include #include #include diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/OcclusionCullingPlane/OcclusionCullingPlaneComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/OcclusionCullingPlane/OcclusionCullingPlaneComponentController.cpp index 4addbde3ef..a5cf1c0180 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/OcclusionCullingPlane/OcclusionCullingPlaneComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/OcclusionCullingPlane/OcclusionCullingPlaneComponentController.cpp @@ -15,7 +15,6 @@ #include #include -#include #include #include diff --git a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/ReflectionProbeComponentController.cpp b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/ReflectionProbeComponentController.cpp index 017f6c9cdf..5d33561d8a 100644 --- a/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/ReflectionProbeComponentController.cpp +++ b/Gems/AtomLyIntegration/CommonFeatures/Code/Source/ReflectionProbe/ReflectionProbeComponentController.cpp @@ -16,7 +16,6 @@ #include #include #include -#include #include #include diff --git a/Gems/AtomLyIntegration/TechnicalArt/DccScriptingInterface/SDK/Substance/builder/ui/stylesheets/style_dark.qss b/Gems/AtomLyIntegration/TechnicalArt/DccScriptingInterface/SDK/Substance/builder/ui/stylesheets/style_dark.qss index 193034b781..e308875793 100644 --- a/Gems/AtomLyIntegration/TechnicalArt/DccScriptingInterface/SDK/Substance/builder/ui/stylesheets/style_dark.qss +++ b/Gems/AtomLyIntegration/TechnicalArt/DccScriptingInterface/SDK/Substance/builder/ui/stylesheets/style_dark.qss @@ -1116,91 +1116,6 @@ QPushButton#captureButton:disabled { /*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/ -Driller--DrillerCaptureWindow > #centralwidget > #playButton { - color: white; -} - - -Driller--DrillerCaptureWindow > #centralwidget > AzToolsFramework--AZAutoSizingScrollArea#scrollArea { - background-color: rgb(100,100,100); - border: 1px solid rgb(100,100,100); -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--DrillerMainWindow QDockWidget -{ - background: rgb(56, 58, 59); -} - -Driller--DrillerMainWindow QDockWidget::title -{ - background: rgb(56, 58, 59); -} - -Driller--DrillerMainWindow QDockWidget .QWidget -{ - background: rgb(56, 58, 59); - border: 0px solid red; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--ChannelControl > QFrame { - background-color: rgb(100, 100, 100); -} - -Driller--ChannelControl > #infoArea > QLabel { - color: #999999; - font-size: 12px; - font-family: "open sans"; - font-weight:600; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--ChannelProfilerWidget #profilerName { - color: #cccccc; - font-size: 13px; - font-family: "open sans"; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--AnnotationHeaderView { - background-color: rgb(80,80,80); -} - -Driller--AnnotationHeaderView > #frame { - background-color: rgb(80,80,80); -} - -Driller--AnnotationHeaderView > #frame > #annotationBackground { - background-color: rgb(80,80,80); -} - -Driller--AnnotationHeaderView > #frame > #annotationBackground > #configureAnnotations { - color: white; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--CollapsiblePanel > QGroupBox { - background-color: rgb(56, 58, 59); - margin-top: 0px; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - AzToolsFramework--TargetSelectorButton#targetButton { color: white; } diff --git a/Gems/AtomLyIntegration/TechnicalArt/DccScriptingInterface/azpy/shared/ui/resources/stylesheets/style_dark.qss b/Gems/AtomLyIntegration/TechnicalArt/DccScriptingInterface/azpy/shared/ui/resources/stylesheets/style_dark.qss index 193034b781..e308875793 100644 --- a/Gems/AtomLyIntegration/TechnicalArt/DccScriptingInterface/azpy/shared/ui/resources/stylesheets/style_dark.qss +++ b/Gems/AtomLyIntegration/TechnicalArt/DccScriptingInterface/azpy/shared/ui/resources/stylesheets/style_dark.qss @@ -1116,91 +1116,6 @@ QPushButton#captureButton:disabled { /*----------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/ -Driller--DrillerCaptureWindow > #centralwidget > #playButton { - color: white; -} - - -Driller--DrillerCaptureWindow > #centralwidget > AzToolsFramework--AZAutoSizingScrollArea#scrollArea { - background-color: rgb(100,100,100); - border: 1px solid rgb(100,100,100); -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--DrillerMainWindow QDockWidget -{ - background: rgb(56, 58, 59); -} - -Driller--DrillerMainWindow QDockWidget::title -{ - background: rgb(56, 58, 59); -} - -Driller--DrillerMainWindow QDockWidget .QWidget -{ - background: rgb(56, 58, 59); - border: 0px solid red; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--ChannelControl > QFrame { - background-color: rgb(100, 100, 100); -} - -Driller--ChannelControl > #infoArea > QLabel { - color: #999999; - font-size: 12px; - font-family: "open sans"; - font-weight:600; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--ChannelProfilerWidget #profilerName { - color: #cccccc; - font-size: 13px; - font-family: "open sans"; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--AnnotationHeaderView { - background-color: rgb(80,80,80); -} - -Driller--AnnotationHeaderView > #frame { - background-color: rgb(80,80,80); -} - -Driller--AnnotationHeaderView > #frame > #annotationBackground { - background-color: rgb(80,80,80); -} - -Driller--AnnotationHeaderView > #frame > #annotationBackground > #configureAnnotations { - color: white; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - -Driller--CollapsiblePanel > QGroupBox { - background-color: rgb(56, 58, 59); - margin-top: 0px; -} - -/*----------------------------------------------------------------------------*/ -/*----------------------------------------------------------------------------*/ - AzToolsFramework--TargetSelectorButton#targetButton { color: white; } diff --git a/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp index 74ba99c26c..f35bce391e 100644 --- a/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp +++ b/Gems/AtomTressFX/Code/Rendering/HairFeatureProcessor.cpp @@ -9,8 +9,6 @@ #include #include #include -#include - #include #include #include diff --git a/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp index 4d615e31ae..fe167cae8b 100644 --- a/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp +++ b/Gems/AtomTressFX/Code/Rendering/HairRenderObject.cpp @@ -5,8 +5,6 @@ * SPDX-License-Identifier: Apache-2.0 OR MIT * */ -#include - #include #include @@ -958,7 +956,7 @@ namespace AZ const char* assetName, AMD::TressFXAsset* asset, AMD::TressFXSimulationSettings* simSettings, AMD::TressFXRenderingSettings* renderSettings) { - AZ_TRACE_METHOD(); + AZ_PROFILE_FUNCTION(AzRender); ++s_objectCounter; diff --git a/Gems/EditorPythonBindings/Code/Tests/PythonTestingUtility.h b/Gems/EditorPythonBindings/Code/Tests/PythonTestingUtility.h index e2b3d1eadd..3ec1050b0b 100644 --- a/Gems/EditorPythonBindings/Code/Tests/PythonTestingUtility.h +++ b/Gems/EditorPythonBindings/Code/Tests/PythonTestingUtility.h @@ -84,7 +84,6 @@ namespace UnitTest m_fileIOHelper->m_fileIO.SetAlias("@engroot@", m_engineRoot.c_str()); AzFramework::Application::Descriptor appDesc; - appDesc.m_enableDrilling = false; m_app.Create(appDesc); AzFramework::ApplicationRequests::Bus::Handler::BusConnect(); diff --git a/Gems/EditorPythonBindings/Code/Tests/PythonTraceMessageSink.h b/Gems/EditorPythonBindings/Code/Tests/PythonTraceMessageSink.h index 28971aec9e..63616ce8ea 100644 --- a/Gems/EditorPythonBindings/Code/Tests/PythonTraceMessageSink.h +++ b/Gems/EditorPythonBindings/Code/Tests/PythonTraceMessageSink.h @@ -7,7 +7,7 @@ */ #pragma once -#include +#include #include namespace UnitTest @@ -15,18 +15,18 @@ namespace UnitTest /** Trace message handler to track messages during tests */ struct PythonTraceMessageSink final - : public AZ::Debug::TraceMessageDrillerBus::Handler + : public AZ::Debug::TraceMessageBus::Handler , public AzToolsFramework::EditorPythonConsoleNotificationBus::Handler { PythonTraceMessageSink() { - AZ::Debug::TraceMessageDrillerBus::Handler::BusConnect(); + AZ::Debug::TraceMessageBus::Handler::BusConnect(); AzToolsFramework::EditorPythonConsoleNotificationBus::Handler::BusConnect(); } ~PythonTraceMessageSink() { - AZ::Debug::TraceMessageDrillerBus::Handler::BusDisconnect(); + AZ::Debug::TraceMessageBus::Handler::BusDisconnect(); AzToolsFramework::EditorPythonConsoleNotificationBus::Handler::BusDisconnect(); } @@ -47,13 +47,13 @@ namespace UnitTest } ////////////////////////////////////////////////////////////////////////// - // TraceMessageDrillerBus - void OnPrintf(const char* window, const char* message) override + // TraceMessageBus + bool OnPrintf(const char* window, const char* message) override { - OnOutput(window, message); + return OnOutput(window, message); } - void OnOutput(const char* window, const char* message) override + bool OnOutput(const char* window, const char* message) override { AZStd::lock_guard lock(m_lock); @@ -73,6 +73,7 @@ namespace UnitTest } } } + return false; } ////////////////////////////////////////////////////////////////////////// diff --git a/Gems/LyShine/Code/Source/UiCanvasManager.cpp b/Gems/LyShine/Code/Source/UiCanvasManager.cpp index d17b868bbc..3bf0263363 100644 --- a/Gems/LyShine/Code/Source/UiCanvasManager.cpp +++ b/Gems/LyShine/Code/Source/UiCanvasManager.cpp @@ -15,7 +15,6 @@ #include #include -#include #include #include #include @@ -179,8 +178,6 @@ AZ::EntityId UiCanvasManager::LoadCanvas(const AZStd::string& assetIdPathname) return AZ::EntityId(); } - AZ_ASSET_NAMED_SCOPE(assetIdPathname.c_str()); - UiGameEntityContext* entityContext = new UiGameEntityContext(); AZ::EntityId canvasEntityId = LoadCanvasInternal(assetIdPathname, false, "", entityContext); @@ -915,60 +912,56 @@ AZ::EntityId UiCanvasManager::LoadCanvasInternal(const AZStd::string& assetIdPat // editor version so that the user can test their canvas without saving it UiCanvasComponent* canvasComponent = FindEditorCanvasComponentByPathname(assetIdPath); - // This scope opened here intentionally to control the lifetime of the AZ_ASSET_NAMED_SCOPE + if (canvasComponent) { - AZ_ASSET_NAMED_SCOPE(pathToOpen.c_str()); - if (canvasComponent) + // this canvas is already loaded in the editor + if (forEditor) { - // this canvas is already loaded in the editor - if (forEditor) - { - // should never load a canvas in Editor if it is already loaded. The Editor should avoid loading the - // same canvas twice in Editor. If the game is running it is not possible to load a canvas - // from the editor. - gEnv->pSystem->Warning(VALIDATOR_MODULE_SHINE, VALIDATOR_WARNING, VALIDATOR_FLAG_FILE, - pathToOpen.c_str(), - "UI canvas file: %s is already loaded", - pathToOpen.c_str()); - return AZ::EntityId(); - } - else - { - // we are loading from the game, the canvas is already open in the editor, so - // we clone the canvas that is open in the editor. - canvasComponent = canvasComponent->CloneAndInitializeCanvas(entityContext, assetIdPath); - } + // should never load a canvas in Editor if it is already loaded. The Editor should avoid loading the + // same canvas twice in Editor. If the game is running it is not possible to load a canvas + // from the editor. + gEnv->pSystem->Warning(VALIDATOR_MODULE_SHINE, VALIDATOR_WARNING, VALIDATOR_FLAG_FILE, + pathToOpen.c_str(), + "UI canvas file: %s is already loaded", + pathToOpen.c_str()); + return AZ::EntityId(); } else { - // not already loaded in editor, attempt to load... - canvasComponent = UiCanvasComponent::LoadCanvasInternal(pathToOpen.c_str(), forEditor, assetIdPath.c_str(), entityContext, previousRemapTable, previousCanvasId); + // we are loading from the game, the canvas is already open in the editor, so + // we clone the canvas that is open in the editor. + canvasComponent = canvasComponent->CloneAndInitializeCanvas(entityContext, assetIdPath); } + } + else + { + // not already loaded in editor, attempt to load... + canvasComponent = UiCanvasComponent::LoadCanvasInternal(pathToOpen.c_str(), forEditor, assetIdPath.c_str(), entityContext, previousRemapTable, previousCanvasId); + } - if (canvasComponent) + if (canvasComponent) + { + // canvas loaded OK (or cloned from Editor canvas OK) + + // add to the list of loaded canvases + if (forEditor) { - // canvas loaded OK (or cloned from Editor canvas OK) - - // add to the list of loaded canvases - if (forEditor) - { - m_loadedCanvasesInEditor.push_back(canvasComponent); - } - else - { - if (canvasComponent->GetEnabled() && canvasComponent->GetIsConsumingAllInputEvents()) - { - AzFramework::InputChannelRequestBus::Broadcast(&AzFramework::InputChannelRequests::ResetState); - EBUS_EVENT(UiCanvasBus, ClearAllInteractables); - } - m_loadedCanvases.push_back(canvasComponent); - SortCanvasesByDrawOrder(); - - // Update hover state for loaded canvases - m_generateMousePositionInputEvent = true; - } - canvasComponent->SetLocalUserIdInputFilter(m_localUserIdInputFilter); + m_loadedCanvasesInEditor.push_back(canvasComponent); } + else + { + if (canvasComponent->GetEnabled() && canvasComponent->GetIsConsumingAllInputEvents()) + { + AzFramework::InputChannelRequestBus::Broadcast(&AzFramework::InputChannelRequests::ResetState); + EBUS_EVENT(UiCanvasBus, ClearAllInteractables); + } + m_loadedCanvases.push_back(canvasComponent); + SortCanvasesByDrawOrder(); + + // Update hover state for loaded canvases + m_generateMousePositionInputEvent = true; + } + canvasComponent->SetLocalUserIdInputFilter(m_localUserIdInputFilter); } return (canvasComponent) ? canvasComponent->GetEntityId() : AZ::EntityId(); diff --git a/Gems/Multiplayer/Code/Tests/MockInterfaces.h b/Gems/Multiplayer/Code/Tests/MockInterfaces.h index 1060006169..b9d8edbea5 100644 --- a/Gems/Multiplayer/Code/Tests/MockInterfaces.h +++ b/Gems/Multiplayer/Code/Tests/MockInterfaces.h @@ -144,7 +144,6 @@ namespace UnitTest MOCK_METHOD0(GetJsonRegistrationContext, AZ::JsonRegistrationContext* ()); MOCK_CONST_METHOD0(GetEngineRoot, const char* ()); MOCK_CONST_METHOD0(GetExecutableFolder, const char* ()); - MOCK_METHOD0(GetDrillerManager, AZ::Debug::DrillerManager* ()); MOCK_METHOD1(ResolveModulePath, void(AZ::OSString&)); MOCK_METHOD0(GetAzCommandLine, AZ::CommandLine* ()); MOCK_CONST_METHOD1(QueryApplicationType, void(AZ::ApplicationTypeQuery&)); diff --git a/Gems/Profiler/Code/Source/CpuProfiler.h b/Gems/Profiler/Code/Source/CpuProfiler.h index 23130efa63..9235ac7da9 100644 --- a/Gems/Profiler/Code/Source/CpuProfiler.h +++ b/Gems/Profiler/Code/Source/CpuProfiler.h @@ -8,7 +8,6 @@ #pragma once -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Editor/Framework/ScriptCanvasGraphUtilities.inl b/Gems/ScriptCanvas/Code/Editor/Framework/ScriptCanvasGraphUtilities.inl index 74d0f76dce..dabd06b0d1 100644 --- a/Gems/ScriptCanvas/Code/Editor/Framework/ScriptCanvasGraphUtilities.inl +++ b/Gems/ScriptCanvas/Code/Editor/Framework/ScriptCanvasGraphUtilities.inl @@ -10,7 +10,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp index b8ae59d43b..5aa8598c80 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/Controller.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp index 57c0822b05..49a35eac8a 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/Tools/UpgradeTool/FileSaver.cpp @@ -8,7 +8,7 @@ #include #include -#include +#include #include #include #include @@ -17,37 +17,6 @@ #include #include -namespace FileSaverCpp -{ - class FileEventHandler - : public AZ::IO::FileIOEventBus::Handler - { - public: - int m_errorCode = 0; - AZStd::string m_fileName; - - FileEventHandler() - { - BusConnect(); - } - - ~FileEventHandler() - { - BusDisconnect(); - } - - void OnError(const AZ::IO::SystemFile* /*file*/, const char* fileName, int errorCode) override - { - m_errorCode = errorCode; - - if (fileName) - { - m_fileName = fileName; - } - } - }; -} - namespace ScriptCanvasEditor { namespace VersionExplorer @@ -69,8 +38,6 @@ namespace ScriptCanvasEditor , AZStd::string target , size_t remainingAttempts) { - FileSaverCpp::FileEventHandler fileEventHandler; - if (remainingAttempts == 0) { AZ::SystemTickBus::QueueFunction([this, tmpFileName]() diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Graph.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Graph.cpp index 9c2c854055..43d4e9496d 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Graph.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Graph.cpp @@ -37,7 +37,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/Aggregator.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/Aggregator.cpp deleted file mode 100644 index 73fe7300ac..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/Aggregator.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -namespace ScriptCanvas -{ - namespace Profiler - { - - } -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/Aggregator.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/Aggregator.h deleted file mode 100644 index 679a770bcc..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/Aggregator.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once -namespace ScriptCanvas -{ - namespace Profiler - { - - } -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/Driller.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/Driller.cpp deleted file mode 100644 index 3865f60b77..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/Driller.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - - -#include -#include - -namespace ScriptCanvas -{ - namespace Profiler - { - void Driller::OnNodeExecute(Node* node) - { - m_output->BeginTag(AZ_CRC("ScriptCanvasGraphDriller", 0xb161ccb2)); - { - m_output->BeginTag(AZ_CRC("OnNodeExecute", 0x3e51a5eb)); - { - m_output->Write(AZ_CRC("NodeName", 0x606d4587), node->GetEntity()->GetName()); - m_output->Write(AZ_CRC("NodeType", 0xb2906ca8), node->RTTI_GetTypeName()); - } - m_output->EndTag(AZ_CRC("StringEvent", 0xd1e005df)); - } - m_output->EndTag(AZ_CRC("ScriptCanvasGraphDriller", 0xb161ccb2)); - } - } -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/Driller.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/Driller.h deleted file mode 100644 index dffed6fffd..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/Driller.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once -#include -#include - -namespace ScriptCanvas -{ - class Graph; - class Node; - - namespace Profiler - { - class DrillerInterface - : public AZ::Debug::DrillerEBusTraits - { - public: - - // On Entry - // On Execute/Upate - // On Exit - virtual void OnNodeExecute(Node*) = 0; - - }; - - using DrillerBus = AZ::EBus; - - class DrillerCommandInterface - : public AZ::Debug::DrillerEBusTraits - { - public: - - virtual Graph* RequestDrilledGraph() = 0; - }; - - using DrillerCommandBus = AZ::EBus; - - class Driller - : public AZ::Debug::Driller - , public DrillerBus::Handler - { - bool m_isDetailedCapture; - - Graph* m_drilledGraph; - - using ParamArrayType = AZStd::vector; - ParamArrayType m_params; - - public: - - AZ_CLASS_ALLOCATOR(Driller, AZ::SystemAllocator, 0); - - const char* GroupName() const override { return "ScriptCanvasDrillers"; } - const char* GetName() const override { return "ScriptCanvasGraphDriller"; } - const char* GetDescription() const override { return "Drilling the Script Canvas execution engine"; } - int GetNumParams() const override { return static_cast(m_params.size()); } - const Param* GetParam(int index) const override { return &m_params[index]; } - - Driller() - : m_isDetailedCapture(false) - , m_drilledGraph(nullptr) - { - Param isDetailed; - isDetailed.desc = "IsDetailedDrill"; - isDetailed.name = AZ_CRC("IsDetailedDrill", 0x2155cef2); - isDetailed.type = Param::PT_BOOL; - isDetailed.value = 0; - m_params.push_back(isDetailed); - } - - void Start(const Param* params = nullptr, int numParams = 0) override - { - m_isDetailedCapture = m_params[0].value != 0; - if (params) - { - for (int i = 0; i < numParams; i++) - { - if (params[i].name == m_params[0].name) - { - m_isDetailedCapture = params[i].value != 0; - } - } - } - - DrillerCommandBus::BroadcastResult(m_drilledGraph, &DrillerCommandInterface::RequestDrilledGraph); -// AZ_TEST_ASSERT(m_drilledGraph != nullptr); /// Make sure we have our object by the time we started the driller - - m_output->BeginTag(AZ_CRC("ScriptCanvasGraphDriller", 0xb161ccb2)); - m_output->Write(AZ_CRC("OnStart", 0x8b372fca), m_isDetailedCapture); - // write drilled object initial state - m_output->EndTag(AZ_CRC("ScriptCanvasGraphDriller", 0xb161ccb2)); - - BusConnect(); - } - - void Stop() override - { - //m_drilledGraph = nullptr; - //m_output->BeginTag(AZ_CRC("ScriptCanvasGraphDriller")); - //m_output->Write(AZ_CRC("OnStop"), m_isDetailedCapture); - //m_output->EndTag(AZ_CRC("ScriptCanvasGraphDriller")); - //BusDisconnect(); - } - - void OnNodeExecute(Node* node) override; - }; - - - } -} - diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/DrillerEvents.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/DrillerEvents.cpp deleted file mode 100644 index 73fe7300ac..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/DrillerEvents.cpp +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ - -namespace ScriptCanvas -{ - namespace Profiler - { - - } -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/DrillerEvents.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/DrillerEvents.h deleted file mode 100644 index 1aa522367d..0000000000 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Profiler/DrillerEvents.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) Contributors to the Open 3D Engine Project. - * For complete copyright and license terms please see the LICENSE at the root of this distribution. - * - * SPDX-License-Identifier: Apache-2.0 OR MIT - * - */ -#pragma once -#include -#include - -namespace ScriptCanvas -{ - namespace Profiler - { - namespace Event - { - class GraphExecutionStart - { - public: - AZ_CLASS_ALLOCATOR(GraphExecutionStart, AZ::SystemAllocator, 0) - AZ_RTTI(GraphExecutionStart, "{AAB7E2E1-9096-4F51-90CA-259A057F2D88}"); - - GraphExecutionStart() - {} - }; - } - - } -} diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationUtilities.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationUtilities.cpp index a9ca526373..bbf3a77c55 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationUtilities.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/TranslationUtilities.cpp @@ -9,7 +9,6 @@ #include "TranslationUtilities.h" #include -#include #include #include #include @@ -71,34 +70,6 @@ namespace TranslationUtilitiesCPP return AZStd::string::format("%s%s_VM.%s", TranslationUtilitiesCPP::k_fileDirectoryPathLua, source.m_name.data(), extension.data()); } - class FileEventHandler - : public AZ::IO::FileIOEventBus::Handler - { - public: - int m_errorCode = 0; - AZStd::string m_fileName; - - FileEventHandler() - { - BusConnect(); - } - - ~FileEventHandler() - { - BusDisconnect(); - } - - void OnError(const AZ::IO::SystemFile* /*file*/, const char* fileName, int errorCode) override - { - m_errorCode = errorCode; - - if (fileName) - { - m_fileName = fileName; - } - } - }; - AZ::Outcome SaveFile(const Grammar::Source& source, AZStd::string_view text, AZStd::string_view extension) { AZ::IO::FileIOBase* fileIO = AZ::IO::FileIOBase::GetInstance(); @@ -111,25 +82,23 @@ namespace TranslationUtilitiesCPP // \todo get a (debug) file path based on the extension const AZStd::string filePath = TranslationUtilitiesCPP::GetDebugLuaFilePath(source, extension); - FileEventHandler eventHandler; - AZ::IO::HandleType fileHandle = AZ::IO::InvalidHandle; const AZ::IO::Result fileOpenResult = fileIO->Open(filePath.c_str(), AZ::IO::OpenMode::ModeWrite | AZ::IO::OpenMode::ModeText, fileHandle); if (fileOpenResult != AZ::IO::ResultCode::Success) { - return AZ::Failure(AZStd::string::format("Failed to open file: %s, error code: %d", filePath.c_str(), eventHandler.m_errorCode)); + return AZ::Failure(AZStd::string::format("Failed to open file: %sd", filePath.c_str())); } const AZ::IO::Result fileWriteResult = fileIO->Write(fileHandle, text.begin(), text.size()); if (fileWriteResult != AZ::IO::ResultCode::Success) { - return AZ::Failure(AZStd::string::format("Failed to write file: %s, error code: %d", filePath.c_str(), eventHandler.m_errorCode)); + return AZ::Failure(AZStd::string::format("Failed to write file: %s", filePath.c_str())); } const AZ::IO::Result fileCloseResult = fileIO->Close(fileHandle); if (fileCloseResult != AZ::IO::ResultCode::Success) { - return AZ::Failure(AZStd::string::format("Failed to close file: %s, error code: %d", filePath.c_str(), eventHandler.m_errorCode)); + return AZ::Failure(AZStd::string::format("Failed to close file: %s", filePath.c_str())); } return AZ::Success(); diff --git a/Gems/ScriptCanvas/Code/Tests/ScriptCanvasUnitTest_BehaviorContextUtils.cpp b/Gems/ScriptCanvas/Code/Tests/ScriptCanvasUnitTest_BehaviorContextUtils.cpp index 472da7dfeb..c06b30253f 100644 --- a/Gems/ScriptCanvas/Code/Tests/ScriptCanvasUnitTest_BehaviorContextUtils.cpp +++ b/Gems/ScriptCanvas/Code/Tests/ScriptCanvasUnitTest_BehaviorContextUtils.cpp @@ -37,7 +37,6 @@ namespace ScriptCanvasUnitTest const char* GetExecutableFolder() const override { return nullptr; } const char* GetBinFolder() const { return nullptr; } const char* GetAppRoot() override { return nullptr; } - AZ::Debug::DrillerManager* GetDrillerManager() override { return nullptr; } void EnumerateEntities(const EntityCallback& /*callback*/) override {} void Init(AZ::BehaviorContext* behaviorContext) diff --git a/Gems/ScriptCanvas/Code/Tests/ScriptCanvasUnitTest_ScriptCanvasBuilderComponent.cpp b/Gems/ScriptCanvas/Code/Tests/ScriptCanvasUnitTest_ScriptCanvasBuilderComponent.cpp index 470bdc18fe..a469899d4a 100644 --- a/Gems/ScriptCanvas/Code/Tests/ScriptCanvasUnitTest_ScriptCanvasBuilderComponent.cpp +++ b/Gems/ScriptCanvas/Code/Tests/ScriptCanvasUnitTest_ScriptCanvasBuilderComponent.cpp @@ -41,7 +41,6 @@ namespace ScriptCanvasUnitTest const char* GetExecutableFolder() const override { return nullptr; } const char* GetBinFolder() const { return nullptr; } const char* GetAppRoot() override { return nullptr; } - AZ::Debug::DrillerManager* GetDrillerManager() override { return nullptr; } void EnumerateEntities(const EntityCallback& /*callback*/) override {} // AssetBuilderBus diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake index eb50f5cb51..34b2c4d326 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_common_files.cmake @@ -191,8 +191,6 @@ set(FILES Include/ScriptCanvas/Libraries/Operators/Math/OperatorSub.cpp Include/ScriptCanvas/Libraries/Operators/Math/OperatorLerpNodeable.cpp Include/ScriptCanvas/Libraries/Operators/Math/OperatorLerpNodeableNode.cpp - Include/ScriptCanvas/Profiler/Aggregator.cpp - Include/ScriptCanvas/Profiler/DrillerEvents.cpp Include/ScriptCanvas/Serialization/BehaviorContextObjectSerializer.cpp Include/ScriptCanvas/Serialization/DatumSerializer.cpp Include/ScriptCanvas/Serialization/RuntimeVariableSerializer.cpp diff --git a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake index 7dfe9653b6..7f39c2f3d0 100644 --- a/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake +++ b/Gems/ScriptCanvas/Code/scriptcanvasgem_headers.cmake @@ -351,9 +351,6 @@ set(FILES Include/ScriptCanvas/Libraries/Operators/Math/OperatorSub.ScriptCanvasGrammar.xml Include/ScriptCanvas/Libraries/Operators/Math/OperatorLerpNodeable.h Include/ScriptCanvas/Libraries/Operators/Math/OperatorLerpNodeableNode.h - Include/ScriptCanvas/Profiler/Driller.h - Include/ScriptCanvas/Profiler/Aggregator.h - Include/ScriptCanvas/Profiler/DrillerEvents.h Include/ScriptCanvas/Serialization/BehaviorContextObjectSerializer.h Include/ScriptCanvas/Serialization/DatumSerializer.h Include/ScriptCanvas/Serialization/RuntimeVariableSerializer.h diff --git a/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestFixture.h b/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestFixture.h index 6e38f71eec..7239d1e747 100644 --- a/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestFixture.h +++ b/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestFixture.h @@ -10,10 +10,8 @@ #include #include -#include #include #include -#include #include #include #include @@ -67,7 +65,6 @@ namespace ScriptCanvasTests { ScriptCanvasEditor::TraceSuppressionBus::Broadcast(&ScriptCanvasEditor::TraceSuppressionRequests::SuppressPrintf, true); AZ::ComponentApplication::Descriptor descriptor; - descriptor.m_enableDrilling = false; descriptor.m_useExistingAllocator = true; AZ::DynamicModuleDescriptor dynamicModuleDescriptor; diff --git a/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestUtilities.cpp b/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestUtilities.cpp index f69412358f..f4abbea7b2 100644 --- a/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestUtilities.cpp +++ b/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestUtilities.cpp @@ -12,7 +12,6 @@ #include #include #include -#include #include #include #include diff --git a/Gems/ScriptEvents/Code/Tests/ScriptEventsTestFixture.h b/Gems/ScriptEvents/Code/Tests/ScriptEventsTestFixture.h index 53d4fd58b9..0db1f1143d 100644 --- a/Gems/ScriptEvents/Code/Tests/ScriptEventsTestFixture.h +++ b/Gems/ScriptEvents/Code/Tests/ScriptEventsTestFixture.h @@ -58,7 +58,6 @@ namespace ScriptEventsTests { AZ::ComponentApplication::Descriptor descriptor; - descriptor.m_enableDrilling = false; // We'll manage our own driller in these tests descriptor.m_useExistingAllocator = true; // Use the SystemAllocator we own in this test. appStartup.m_createStaticModulesCallback = diff --git a/RETIRED_CODE.md b/RETIRED_CODE.md index 56a9df4fd1..285c06b0b2 100644 --- a/RETIRED_CODE.md +++ b/RETIRED_CODE.md @@ -2,7 +2,7 @@ The main goal of this list, is to enable future developers to find old code that might be useful when implementing new,or re-implementing missing features. -|Date | Commit hash | Short description of removed functionality| +|Date | PR | Short description of removed functionality| |--|--|--| | 2021-11-25 | | ObjectManager - parameter begin/end editing callbacks| | 2021-11-25 | | ObjectManager - `InvertSelection()`| @@ -30,4 +30,11 @@ The main goal of this list, is to enable future developers to find old code that | 2021-11-28 | | unused CUndoBaseLibraryManager and CUndoBaseLibrary| | 2021-11-28 | | IXmlNode - unused shareChildren/deleteChildAt/clone/insertChild/replaceChild functionality| | 2021-11-28 | | CXmlArchive - unused Load/Save methods| - +| 2021-12-03 | #6086 | MemoryDriller, PlatformMemoryInstrumentation - Driller no longer functional (Profiler was deleted months ago)| +| 2021-12-03 | #6086 | TraceMessageDrillerBus, TraceMessagesDriller - Driller no longer functional (Profiler was deleted months ago)| +| 2021-12-03 | #6086 | ThreadDrillerEvents - Driller no longer functional (Profiler was deleted months ago)| +| 2021-12-03 | #6086 | CarrierDrillerBus, CarrierDriller, ReplicaDriller, SessionDriller, SessionDrillerBus (from GridMate) - Driller no longer functional (Profiler was deleted months ago)| +| 2021-12-03 | #6086 | AssetTracking, Gems/AssetMemoryAnalyzer - Relies on driller that is no longer functional (Profiler was deleted months ago)| +| 2021-12-03 | #6086 | DrillerBus, DrillerManager, DrillerEvents, EventTraceDrillerBus, Driller, DrillerDefaultStringPool - Driller no longer functional (Profiler was deleted months ago)| +| 2021-12-03 | #6086 | FileIOEvents - Prone to false-positives (errors from other threads), not really useful| +| 2021-12-03 | #6086 | FileIOBus - Unused and not the best way to implement a filesystem replacement| diff --git a/engine.json b/engine.json index 2d182c78aa..737ac24fea 100644 --- a/engine.json +++ b/engine.json @@ -7,7 +7,6 @@ "O3DEBuildNumber": 0, "external_subdirectories": [ "Gems/Achievements", - "Gems/AssetMemoryAnalyzer", "Gems/AssetValidation", "Gems/Atom", "Gems/AtomContent", diff --git a/scripts/build/Platform/Linux/build_linux.sh b/scripts/build/Platform/Linux/build_linux.sh index 328445738b..2f33827c5b 100755 --- a/scripts/build/Platform/Linux/build_linux.sh +++ b/scripts/build/Platform/Linux/build_linux.sh @@ -40,7 +40,7 @@ if [[ ! -z "$RUN_CONFIGURE" ]]; then eval echo [ci_build] ${CONFIGURE_CMD} eval ${CONFIGURE_CMD} # Save the run only if success - eval echo "${CONFIGURE_CMD}" > ${LAST_CONFIGURE_CMD_FILE} + echo "${CONFIGURE_CMD}" > ${LAST_CONFIGURE_CMD_FILE} fi eval echo [ci_build] cmake --build . --target ${CMAKE_TARGET} --config ${CONFIGURATION} -j $(grep -c processor /proc/cpuinfo) -- ${CMAKE_NATIVE_BUILD_ARGS} diff --git a/scripts/build/Platform/Mac/build_mac.sh b/scripts/build/Platform/Mac/build_mac.sh index a0401f664c..2ea5eeab8a 100755 --- a/scripts/build/Platform/Mac/build_mac.sh +++ b/scripts/build/Platform/Mac/build_mac.sh @@ -42,7 +42,7 @@ RUN_CONFIGURE=1 if [[ ! -z "$RUN_CONFIGURE" ]]; then # have to use eval since $CMAKE_OPTIONS (${EXTRA_CMAKE_OPTIONS}) contains quotes that need to be processed - echo [ci_build] ${CONFIGURE_CMD} + eval echo [ci_build] ${CONFIGURE_CMD} eval ${CONFIGURE_CMD} # Save the run only if success echo "${CONFIGURE_CMD}" > ${LAST_CONFIGURE_CMD_FILE}