{"version":3,"file":"8755e88f7000803c315076e.js?3.6.10.39095fcb9.1720035887428","mappings":"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","sources":["webpack://mono-repo/./build-targets/portal/src/js/lib/bootstrap-select-netx.js","webpack://mono-repo/./node_modules/@material/dom/events.js","webpack://mono-repo/./node_modules/@material/dom/ponyfill.js","webpack://mono-repo/./node_modules/@material/list/constants.js","webpack://mono-repo/./node_modules/@material/menu-surface/constants.js","webpack://mono-repo/./node_modules/@material/menu-surface/util.js","webpack://mono-repo/./node_modules/@material/menu/constants.js","webpack://mono-repo/./node_modules/@material/ripple/constants.js","webpack://mono-repo/./node_modules/@material/ripple/util.js","webpack://mono-repo/./node_modules/@mui/base/utils/areArraysEqual.js","webpack://mono-repo/./node_modules/@mui/material/Slider/SliderValueLabel.js","webpack://mono-repo/./node_modules/@mui/material/Slider/sliderClasses.js","webpack://mono-repo/./node_modules/@mui/material/utils/shouldSpreadAdditionalProps.js","webpack://mono-repo/./node_modules/@mui/utils/visuallyHidden/visuallyHidden.js","webpack://mono-repo/./packages/core-app/src/actions.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/actions.js","webpack://mono-repo/./packages/core-app/src/menus.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/menus.js","webpack://mono-repo/./packages/core-app/src/models/app.js","webpack://mono-repo/./packages/core-app/src/models/brand.js","webpack://mono-repo/./packages/core-app/src/views/appFullScreenView.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/views/appFullScreenView.js","webpack://mono-repo/./packages/core-app/src/views/appProgressView.js","webpack://mono-repo/./packages/core-app/src/collections/optionTiles.js","webpack://mono-repo/./packages/core/src/lib/netx-analytics.js","webpack://mono-repo/./packages/core-app/src/controller.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/views/passiveAlertView.js","webpack://mono-repo/./packages/core-app/src/views/appView.js","webpack://mono-repo/./packages/core-app/src/views/headerView.js","webpack://mono-repo/./packages/core-share/src/views/sharedResourcesView.js","webpack://mono-repo/./packages/core-cart/src/views/savedCartsView.js","webpack://mono-repo/./build-targets/portal/packages/core-cart/src/views/savedCartsView.js","webpack://mono-repo/./build-targets/portal/packages/core-cart/src/views/savedCart_menuItem.js","webpack://mono-repo/./build-targets/portal/packages/core-cart/src/views/savedCarts_menu.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/views/headerView.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/views/appView.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/controller.js","webpack://mono-repo/./packages/core-app/src/index.js","webpack://mono-repo/./packages/core-app/src/routes.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/routes.js","webpack://mono-repo/./packages/core-app/src/views/alertView.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/views/alertView.js","webpack://mono-repo/./packages/core-app/src/views/appModalCrumbView.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/views/appModalCrumbView.js","webpack://mono-repo/./packages/core-app/src/views/appModalCrumbsView.js","webpack://mono-repo/./packages/core-app/src/views/appModalView.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/views/appModalView.js","webpack://mono-repo/./packages/core-app/src/views/confirmView.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/views/confirmView.js","webpack://mono-repo/./packages/core-app/src/views/menuView.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/views/menuView.js","webpack://mono-repo/./packages/core-app/src/views/pagerView.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/views/pagerView.js","webpack://mono-repo/./packages/core-asset/src/collections/assets.js","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/collections/assets.js","webpack://mono-repo/./packages/core-asset/src/views/assetListItemView.js","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/views/assetListItemView.js","webpack://mono-repo/./packages/core-asset/src/views/assetListView.js","webpack://mono-repo/./src/js/lib/nx-drag/jquery-netx-dragselect.js","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/views/assetListView.js","webpack://mono-repo/./packages/core-asset/src/views/assetPreviewView_.js","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/views/assetPreviewView_.js","webpack://mono-repo/./packages/core-asset/src/views/asset-audio-view.ts","webpack://mono-repo/./packages/core-asset/src/views/assetPreviewView_audio.js","webpack://mono-repo/./packages/core-asset/src/views/assetPreviewView_image.js","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/views/assetPreviewView_image.js","webpack://mono-repo/./packages/core-asset-video/src/views/asset-video-view.ts","webpack://mono-repo/./packages/core-asset/src/views/assetPreviewView_video.js","webpack://mono-repo/./packages/core-asset/src/views/assetDetailPager.js","webpack://mono-repo/./packages/core-asset/src/views/assetPreviewView.js","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/views/assetPreviewView.js","webpack://mono-repo/./packages/core-asset/src/views/assetView.js","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/views/assetView.js","webpack://mono-repo/./packages/core-cart/src/collections/cartAssets.js","webpack://mono-repo/./build-targets/portal/packages/core-cart/src/collections/cartAssets.js","webpack://mono-repo/./packages/core-cart/src/config.js","webpack://mono-repo/./build-targets/portal/packages/core-cart/src/config.js","webpack://mono-repo/./packages/core-cart/src/views/savedCartView.js","webpack://mono-repo/./build-targets/portal/packages/core-cart/src/views/savedCartView.js","webpack://mono-repo/./packages/core-category/src/collections/categories.js","webpack://mono-repo/./build-targets/portal/packages/core-category/src/collections/categories.js","webpack://mono-repo/./packages/core-category/src/config.js","webpack://mono-repo/./build-targets/portal/packages/core-category/src/config.js","webpack://mono-repo/./packages/core-category/src/views/categoryListItemView.js","webpack://mono-repo/./build-targets/portal/packages/core-category/src/views/categoryListItemView.js","webpack://mono-repo/./packages/core-category/src/views/categoryListView.js","webpack://mono-repo/./build-targets/portal/packages/core-category/src/views/categoryListView.js","webpack://mono-repo/./packages/core-search/src/collections/searchAssets.js","webpack://mono-repo/./build-targets/portal/packages/core-search/src/collections/searchAssets.js","webpack://mono-repo/./packages/core-asset/src/views/assetAttributeSetSelectionView.js","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/views/assetAttributeSetSelectionView.js","webpack://mono-repo/./packages/core-user/src/views/userSortView.js","webpack://mono-repo/./build-targets/portal/packages/core-user/src/views/userSortView.js","webpack://mono-repo/./build-targets/portal/packages/core/src/controller.js","webpack://mono-repo/./build-targets/portal/packages/core/src/functionality/materialMenus.js","webpack://mono-repo/./build-targets/portal/packages/core/src/functionality/patches/mdc-list.js","webpack://mono-repo/./build-targets/portal/packages/core/src/functionality/selectpicker.js","webpack://mono-repo/./packages/core/src/lib/netx-plugins.js","webpack://mono-repo/./packages/core/src/lib/netx-view.js","webpack://mono-repo/./build-targets/portal/packages/core/src/lib/netx-view.js","webpack://mono-repo/./packages/core-ad-builder-next/src/constants.ts","webpack://mono-repo/./packages/core-ad-builder-next/src/enablers.ts","webpack://mono-repo/./packages/core-app/src/collections/appViews.js","webpack://mono-repo/./packages/core-app/src/models/customFormElement.js","webpack://mono-repo/./packages/core-app/src/collections/customForm.js","webpack://mono-repo/./packages/core-app/src/models/storageLocation.js","webpack://mono-repo/./packages/core-app/src/collections/storageLocations.js","webpack://mono-repo/./packages/core-app/src/enablers.js","webpack://mono-repo/./packages/core-app/src/models/appView.js","webpack://mono-repo/./packages/core-app/src/models/optionTile.js","webpack://mono-repo/./packages/core-app/src/properties/locations.js","webpack://mono-repo/./packages/core-app/src/singletons/appViews.ts","webpack://mono-repo/./packages/core-app/src/views/appBodyView.js","webpack://mono-repo/./packages/core-app/src/singletons/bodyViews.ts","webpack://mono-repo/./packages/core-app/src/singletons/fsViews.ts","webpack://mono-repo/./packages/core-app/src/singletons/modalViews.ts","webpack://mono-repo/./packages/core-asset-video/src/locales.ts","webpack://mono-repo/./packages/core-asset-video/src/components/assetVideoClasses.ts","webpack://mono-repo/./packages/core-asset-video/src/components/AssetVideo.tsx","webpack://mono-repo/./packages/core-asset-video/src/constants.ts","webpack://mono-repo/./packages/core-asset-video/src/utils/index.ts","webpack://mono-repo/./packages/core-asset-video/src/hooks/useAssetVideo.ts","webpack://mono-repo/./packages/core-asset/src/collections/assetAttributeSetsSelection.js","webpack://mono-repo/./packages/core-attribute-profile/src/constants.ts","webpack://mono-repo/./packages/core-attribute-profile/src/locales.ts","webpack://mono-repo/./packages/core-attribute-profile/src/actions/constants.ts","webpack://mono-repo/./packages/core-asset/src/collections/attributeProfiles.js","webpack://mono-repo/./packages/core-asset/src/collections/assetCursor.js","webpack://mono-repo/./packages/core-asset/src/collections/singleton/assetCursor.ts","webpack://mono-repo/./packages/core-asset/src/collections/assetIndex.js","webpack://mono-repo/./packages/core-asset/src/models/assetMetadatum.js","webpack://mono-repo/./packages/core-asset/src/collections/assetMetadata.js","webpack://mono-repo/./packages/core-permissions/src/collections/assetPermissions.js","webpack://mono-repo/./packages/core-asset/src/models/assetUsage.js","webpack://mono-repo/./packages/core-asset/src/collections/assetUsage.js","webpack://mono-repo/./packages/core-asset/src/collections/assetVersions.js","webpack://mono-repo/./packages/core-asset/src/collections/assetViews.js","webpack://mono-repo/./packages/core-grid/src/collections/grid.js","webpack://mono-repo/./packages/core-asset/src/collections/assetAttributeHistory.js","webpack://mono-repo/./packages/core-comment/src/models/comment.js","webpack://mono-repo/./packages/core-comment/src/collections/comments.js","webpack://mono-repo/./packages/core-project/src/models/projectReviewAnnotationComment.js","webpack://mono-repo/./packages/core-project/src/collections/projectReviewAnnotationComments.js","webpack://mono-repo/./packages/core-project/src/models/projectReviewAnnotation.js","webpack://mono-repo/./packages/core-project/src/collections/projectReviewAnnotations.js","webpack://mono-repo/./packages/core-project/src/models/projectReviewDecision.js","webpack://mono-repo/./packages/core-project/src/collections/projectReviewDecisions.js","webpack://mono-repo/./packages/core-project/src/properties/projects.js","webpack://mono-repo/./packages/core-project/src/models/projectReview.js","webpack://mono-repo/./packages/core-project/src/collections/projectReviews.js","webpack://mono-repo/./packages/core-project/src/models/projectParticipant.js","webpack://mono-repo/./packages/core-project/src/collections/projectParticipants.js","webpack://mono-repo/./packages/core-project/src/models/project.js","webpack://mono-repo/./packages/core-project/src/collections/projects.js","webpack://mono-repo/./packages/core-asset/src/models/currentAsset.js","webpack://mono-repo/./packages/core-asset/src/collections/singleton/currentAsset.ts","webpack://mono-repo/./packages/core-components/AudioPlayer/hooks/useWavesurfer/constants.ts","webpack://mono-repo/./packages/core-components/AudioPlayer/hooks/useWavesurfer/actions.ts","webpack://mono-repo/./packages/core-components/AudioPlayer/hooks/useWavesurfer/utils.ts","webpack://mono-repo/./packages/core-components/AudioPlayer/hooks/useWavesurfer/reducer.ts","webpack://mono-repo/./packages/core-components/AudioPlayer/hooks/useWavesurfer/useWavesurfer.ts","webpack://mono-repo/./packages/core-components/AudioPlayer/contexts/AudioPlayerContext.tsx","webpack://mono-repo/./packages/core-components/AudioPlayer/locales.ts","webpack://mono-repo/./packages/core-components/AudioPlayer/components/AudioPlayer/audioPlayerClasses.ts","webpack://mono-repo/./packages/core-components/AudioPlayer/components/AudioPlayer/AudioPlayer.tsx","webpack://mono-repo/./packages/core-components/AudioPlayer/components/FrequencyVisualizer/audioPlayerFrequencyVisualizerClasses.ts","webpack://mono-repo/./packages/core-components/AudioPlayer/components/FrequencyVisualizer/AudioPlayerFrequencyVisualizer.tsx","webpack://mono-repo/./packages/core-components/AudioPlayer/components/TimeDisplay/audioPlayerTimeDisplayClasses.ts","webpack://mono-repo/./packages/core-components/AudioPlayer/components/TimeDisplay/AudioPlayerTimeDisplay.tsx","webpack://mono-repo/./packages/core-components/AudioPlayer/components/Details/audioPlayerDetailsClasses.ts","webpack://mono-repo/./packages/core-components/AudioPlayer/components/Details/AudioPlayerDetails.tsx","webpack://mono-repo/./packages/core-components/CircularProgressButton/circularProgressButtonClasses.ts","webpack://mono-repo/./packages/core-components/CircularProgressButton/CircularProgressButton.tsx","webpack://mono-repo/./packages/core-components/AudioPlayer/components/PlayButton/AudioPlayerPlayButton.tsx","webpack://mono-repo/./packages/core-components/AudioPlayer/components/Volume/audioPlayerVolumeClasses.ts","webpack://mono-repo/./packages/core-components/AudioPlayer/components/Volume/AudioPlayerVolume.tsx","webpack://mono-repo/./packages/core-components/AudioPlayer/components/StandardControls/standardControlsClasses.ts","webpack://mono-repo/./packages/core-components/AudioPlayer/components/StandardControls/StandardControls.tsx","webpack://mono-repo/./packages/core-asset/src/components/AssetAudio/AssetAudioWaveform.tsx","webpack://mono-repo/./packages/core-asset/src/components/AssetAudio/assetAudioClasses.ts","webpack://mono-repo/./packages/core-asset/src/components/AssetAudio/AssetAudio.tsx","webpack://mono-repo/./packages/core-asset/src/lib/jquery.bum-smack-1.2.0/jquery.bum-smack.js","webpack://mono-repo/./packages/core-asset/src/lib/jquery.bum-smack-1.2.0/netx-jquery.bum-smack.js","webpack://mono-repo/./packages/core-asset/src/models/assetAttributeSet.js","webpack://mono-repo/./packages/core-asset/src/models/assetView.js","webpack://mono-repo/./packages/core-asset/src/models/attributeProfileAttribute.js","webpack://mono-repo/./packages/core-asset/src/collections/attributeProfileAttributes.js","webpack://mono-repo/./packages/core-asset/src/models/attributeProfile.js","webpack://mono-repo/./packages/core-attribute-smart-labels/src/enablers.ts","webpack://mono-repo/./packages/core-auth-next/src/utils/canRequestPasswordReset.ts","webpack://mono-repo/./packages/core-auth-next/src/utils/canSelfRegister.ts","webpack://mono-repo/./packages/core-auth-next/src/utils/getAuthorizationHeader.ts","webpack://mono-repo/./packages/core-auth/src/actions.js","webpack://mono-repo/./packages/core-auth/src/menus.js","webpack://mono-repo/./packages/core-auth/src/views/authSamlServiceView.js","webpack://mono-repo/./packages/core-auth/src/views/authUserLoginView.js","webpack://mono-repo/./build-targets/portal/packages/core-auth/src/views/authUserLoginView.js","webpack://mono-repo/./packages/core-auth/src/routes.js","webpack://mono-repo/./packages/core-auth/src/controller.js","webpack://mono-repo/./build-targets/portal/packages/core-auth/src/controller.js","webpack://mono-repo/./packages/core-auth/src/index.js","webpack://mono-repo/./packages/core-auto-template/src/actions.js","webpack://mono-repo/./packages/core-auto-template/src/menus.js","webpack://mono-repo/./packages/core-auto-template/src/config.js","webpack://mono-repo/./packages/core-auto-template/src/routes.js","webpack://mono-repo/./packages/core-auto-template/src/controller.js","webpack://mono-repo/./build-targets/portal/packages/core-auto-template/src/controller.js","webpack://mono-repo/./packages/core-auto-template/src/index.js","webpack://mono-repo/./packages/core-cart/src/collections/savedCarts.js","webpack://mono-repo/./packages/core-cart/src/models/savedCart.js","webpack://mono-repo/./packages/core-cart/src/properties/cartAssetArchive.js","webpack://mono-repo/./packages/core-cart/src/singletons/savedCarts.ts","webpack://mono-repo/./packages/core-category/src/collections/categoryAssets.js","webpack://mono-repo/./packages/core-category/src/collections/categoryTreeNodes.js","webpack://mono-repo/./packages/core-category/src/models/categoryDetailsData.js","webpack://mono-repo/./packages/core-cms/src/enablers.js","webpack://mono-repo/./packages/core-cms/src/actions.js","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/actions.js","webpack://mono-repo/./packages/core-cms/src/menus.js","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/menus.js","webpack://mono-repo/./packages/core-cms/src/models/CMSAction.js","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/models/CMSAction.js","webpack://mono-repo/./packages/core-cms/src/models/CMSBlock.js","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/models/CMSBlock.js","webpack://mono-repo/./packages/core-cms/src/collections/CMSBlocks.js","webpack://mono-repo/./packages/core-cms/src/models/CMSPage.js","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/models/CMSPage.js","webpack://mono-repo/./packages/core-cms/src/routes.js","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/routes.js","webpack://mono-repo/./packages/core-cms/src/controller.js","webpack://mono-repo/./packages/core-cms/src/models/CMSMenu.js","webpack://mono-repo/./packages/core-cms/src/collections/CMSActions.js","webpack://mono-repo/./packages/core-cms/src/collections/CMSMenus.js","webpack://mono-repo/./packages/core-cms/src/collections/CMSPages.js","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/controller.js","webpack://mono-repo/./packages/core-cms/src/index.js","webpack://mono-repo/./packages/core-cms/src/properties/cms.js","webpack://mono-repo/./packages/core-cms/src/views/CMSBlockView_asset.js","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/views/CMSBlockView_asset.js","webpack://mono-repo/./packages/core-cms/src/views/CMSAssetListView.js","webpack://mono-repo/./packages/core-cms/src/views/CMSBlockView_carouselItem.js","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/views/CMSBlockView_carouselItem.js","webpack://mono-repo/./packages/core-cms/src/views/CMSBlockView_carousel.js","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/views/CMSBlockView_carousel.js","webpack://mono-repo/./packages/core-cms/src/views/CMSBlockView_categoryItem.js","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/views/CMSBlockView_categoryItem.js","webpack://mono-repo/./packages/core-cms/src/views/CMSBlockView_category.js","webpack://mono-repo/./packages/core-cms/src/views/CMSBlockView_categoryAssetListItem.js","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/views/CMSBlockView_categoryAssetListItem.js","webpack://mono-repo/./packages/core-cms/src/views/CMSBlockView_divider.js","webpack://mono-repo/./packages/core-cms/src/views/CMSBlockView_html.js","webpack://mono-repo/./packages/core-cms/src/views/CMSPageView.js","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/views/CMSBlockView_category.js","webpack://mono-repo/./packages/core-cms/src/views/CMSBlockView_categoryAssetList.js","webpack://mono-repo/./packages/core-cms/src/views/CMSBlockView_savedCart.js","webpack://mono-repo/./packages/core-cms/src/views/CMSBlockView_savedSearch.js","webpack://mono-repo/./packages/core-components/DownloadDialog/store/index.tsx","webpack://mono-repo/./packages/core-components/DownloadDialog/store/api/setProgressReportNotify.ts","webpack://mono-repo/./packages/core-components/FallbackMessage/fallbackMessageClasses.ts","webpack://mono-repo/./packages/core-components/GenericImage/genericImageWatermarkClasses.ts","webpack://mono-repo/./packages/core-components/GenericImage/utils.ts","webpack://mono-repo/./packages/core-components/GenericImage/GenericImageWatermark.tsx","webpack://mono-repo/./packages/core-components/GenericImage/genericImageClasses.ts","webpack://mono-repo/./packages/core-components/GenericImage/GenericImage.tsx","webpack://mono-repo/./packages/core-components/ModalManager/ModalWrapper.tsx","webpack://mono-repo/./packages/core-components/ModalManager/ModalManager.tsx","webpack://mono-repo/./packages/core-components/ModalManager/modalManagerStore.ts","webpack://mono-repo/./packages/core-next/src/utils/url/getURLQueryFromObject.ts","webpack://mono-repo/./packages/core-next/src/whenReady.ts","webpack://mono-repo/./packages/core-notification/src/actions.js","webpack://mono-repo/./packages/core-notification/src/menus.js","webpack://mono-repo/./packages/core-notification/src/routes.js","webpack://mono-repo/./packages/core-notification/src/controller.js","webpack://mono-repo/./packages/core-notification/src/index.js","webpack://mono-repo/./packages/core-notification/src/models/notification.js","webpack://mono-repo/./packages/core-notification/src/collections/notifications.js","webpack://mono-repo/./packages/core-notification/src/singletons/notification.ts","webpack://mono-repo/./packages/core-permissions/src/models/assetPermission.js","webpack://mono-repo/./packages/core-permissions/src/properties/actions.js","webpack://mono-repo/./packages/core-search-next/src/constants.ts","webpack://mono-repo/./packages/core-search-next/src/enablers/canSearchAttributeHistory.ts","webpack://mono-repo/./packages/core-search-next/src/enablers/canSearchVideoClips.ts","webpack://mono-repo/./packages/core-search-next/src/enablers/keywordIncludeContentsEnabled.ts","webpack://mono-repo/./packages/core-search-next/src/enablers/keywordSearchSuggestionsEnabled.ts","webpack://mono-repo/./packages/core-search-next/src/enablers/simpleAssetIdSearchEnabled.ts","webpack://mono-repo/./packages/core-search/src/collections/searchConstituents.js","webpack://mono-repo/./packages/core-search/src/collections/searchRules.js","webpack://mono-repo/./packages/core-search/src/models/searchRule_asset.js","webpack://mono-repo/./packages/core-search/src/models/searchFacetOption.js","webpack://mono-repo/./packages/core-search/src/collections/searchFacetOptions.js","webpack://mono-repo/./packages/core-search/src/models/searchFacet.js","webpack://mono-repo/./packages/core-search/src/collections/searchFacetsSelected.js","webpack://mono-repo/./packages/core-search/src/collections/searchFacets.js","webpack://mono-repo/./build-targets/portal/packages/core-search/src/collections/searchFacets.js","webpack://mono-repo/./packages/core-search/src/collections/searchRules_assets.js","webpack://mono-repo/./packages/core-search/src/models/searchRule_clip.js","webpack://mono-repo/./packages/core-search/src/collections/searchRules_clips.js","webpack://mono-repo/./packages/core-search/src/models/searchRule.js","webpack://mono-repo/./packages/core-search/src/properties/search.js","webpack://mono-repo/./packages/core-share/src/views/sharedResourceView.js","webpack://mono-repo/./packages/core/src/functionality/childViews.js","webpack://mono-repo/./packages/core-app/src/views/formErrorListItemView.js","webpack://mono-repo/./packages/core-app/src/views/formErrorListView.js","webpack://mono-repo/./src/js/lib/formValidation-netx.js","webpack://mono-repo/./packages/core/src/functionality/form.js","webpack://mono-repo/./packages/core-app/src/properties/keypress.js","webpack://mono-repo/./packages/core/src/functionality/keyEvents.js","webpack://mono-repo/./packages/core/src/legacyMenuManager.ts","webpack://mono-repo/./packages/core/src/lib/netx-autocomplete.js","webpack://mono-repo/./packages/core/src/lib/netx-menu.js","webpack://mono-repo/./packages/core-app/src/collections/appViewsQueue.js","webpack://mono-repo/./packages/core/src/lib/netx-multiView.js","webpack://mono-repo/./packages/core/src/lib/netx-video.js","webpack://mono-repo/./packages/core/src/utils/extendBackboneActions.ts","webpack://mono-repo/./packages/core/src/utils/randomChars.ts","webpack://mono-repo/./packages/core-components/DownloadDialog/components/Dialog/index.tsx","webpack://mono-repo/./packages/core-components/FallbackMessage/FallbackMessage.tsx","webpack://mono-repo/./packages/core/src/lib/netx-react-view.tsx","webpack://mono-repo/./node_modules/classlist-polyfill/src/index.js","webpack://mono-repo/./node_modules/focus-visible/dist/focus-visible.js","webpack://mono-repo/./node_modules/lodash/_Symbol.js","webpack://mono-repo/./node_modules/lodash/_baseGetTag.js","webpack://mono-repo/./node_modules/lodash/_baseTrim.js","webpack://mono-repo/./node_modules/lodash/_freeGlobal.js","webpack://mono-repo/./node_modules/lodash/_getRawTag.js","webpack://mono-repo/./node_modules/lodash/_objectToString.js","webpack://mono-repo/./node_modules/lodash/_root.js","webpack://mono-repo/./node_modules/lodash/_trimmedEndIndex.js","webpack://mono-repo/./node_modules/lodash/debounce.js","webpack://mono-repo/./node_modules/lodash/isObject.js","webpack://mono-repo/./node_modules/lodash/isObjectLike.js","webpack://mono-repo/./node_modules/lodash/isSymbol.js","webpack://mono-repo/./node_modules/lodash/now.js","webpack://mono-repo/./node_modules/lodash/throttle.js","webpack://mono-repo/./node_modules/lodash/toNumber.js","webpack://mono-repo/./node_modules/mobx-react-lite/es/utils/assertEnvironment.js","webpack://mono-repo/./node_modules/mobx-react-lite/es/utils/printDebugValue.js","webpack://mono-repo/./node_modules/mobx-react-lite/es/utils/UniversalFinalizationRegistry.js","webpack://mono-repo/./node_modules/mobx-react-lite/es/utils/observerFinalizationRegistry.js","webpack://mono-repo/./node_modules/mobx-react-lite/es/staticRendering.js","webpack://mono-repo/./node_modules/mobx-react-lite/es/useObserver.js","webpack://mono-repo/./node_modules/mobx-react-lite/es/observer.js","webpack://mono-repo/./node_modules/mobx-react-lite/es/utils/observerBatching.js","webpack://mono-repo/./node_modules/mobx-react-lite/es/useLocalObservable.js","webpack://mono-repo/./node_modules/mobx-react-lite/es/index.js","webpack://mono-repo/./node_modules/react-dom/client.js","webpack://mono-repo/./node_modules/react-resize-detector/build/index.esm.js","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/alertView.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/appFullScreenView.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/appModalCrumbView.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/appModalCrumbsView.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/appModalView.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/appProgressView.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/appView.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/confirmView.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/headerView.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/loadingView.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/menuView-cartBarActions.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/menuView-context.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/menuView-headerActions.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/menuView-listHeaderActions.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/pagerView.html","webpack://mono-repo/./build-targets/portal/packages/core-app/src/templates/passiveAlertView.html","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/templates/assetAttributeSetSelectionView.html","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/templates/assetDetailPagerView.html","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/templates/assetListItemView.html","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/templates/assetListView.html","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/templates/assetPreviewView.html","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/templates/assetPreviewView_audio.html","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/templates/assetPreviewView_image.html","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/templates/assetPreviewView_video.html","webpack://mono-repo/./build-targets/portal/packages/core-asset/src/templates/assetView.html","webpack://mono-repo/./build-targets/portal/packages/core-auth/src/templates/authSamlServiceView.html","webpack://mono-repo/./build-targets/portal/packages/core-auth/src/templates/authUserLoginView.html","webpack://mono-repo/./build-targets/portal/packages/core-auto-template/src/templates/asset-size-slider.html","webpack://mono-repo/./build-targets/portal/packages/core-auto-template/src/templates/categories.html","webpack://mono-repo/./build-targets/portal/packages/core-auto-template/src/templates/drag-to-upload.html","webpack://mono-repo/./build-targets/portal/packages/core-auto-template/src/templates/footer.html","webpack://mono-repo/./build-targets/portal/packages/core-auto-template/src/templates/loader.html","webpack://mono-repo/./build-targets/portal/packages/core-auto-template/src/templates/mobile-nav.html","webpack://mono-repo/./build-targets/portal/packages/core-auto-template/src/templates/pseudo-progress.html","webpack://mono-repo/./build-targets/portal/packages/core-cart/src/templates/savedCartView.html","webpack://mono-repo/./build-targets/portal/packages/core-cart/src/templates/savedCart_menuItem.html","webpack://mono-repo/./build-targets/portal/packages/core-cart/src/templates/savedCartsView.html","webpack://mono-repo/./build-targets/portal/packages/core-cart/src/templates/savedCarts_menu.html","webpack://mono-repo/./build-targets/portal/packages/core-category/src/templates/categoryListItemView.html","webpack://mono-repo/./build-targets/portal/packages/core-category/src/templates/categoryListView.html","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/templates/CMSAssetListView.html","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/templates/CMSBlockView_asset.html","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/templates/CMSBlockView_carousel.html","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/templates/CMSBlockView_carouselItem.html","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/templates/CMSBlockView_category.html","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/templates/CMSBlockView_categoryAssetList.html","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/templates/CMSBlockView_categoryAssetListItem.html","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/templates/CMSBlockView_categoryItem.html","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/templates/CMSBlockView_divider.html","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/templates/CMSBlockView_html.html","webpack://mono-repo/./build-targets/portal/packages/core-cms/src/templates/CMSPageView.html","webpack://mono-repo/./build-targets/portal/packages/core-user/src/templates/userSortView.html","webpack://mono-repo/./packages/core-app/src/templates/empty.html","webpack://mono-repo/./node_modules/wavesurfer.js/dist/plugin/wavesurfer.cursor.js","webpack://mono-repo/./node_modules/wavesurfer.js/dist/plugin/wavesurfer.mediasession.js","webpack://mono-repo/./npm/javascript-detect-element-resize/detect-element-resize.js","webpack://mono-repo/./src/js/lib/base64.js","webpack://mono-repo/./src/js/lib/bootstrap-netx.js","webpack://mono-repo/./src/js/lib/imagesloaded.pkgd.js","webpack://mono-repo/./node_modules/tslib/tslib.es6.mjs"],"sourcesContent":["var proto = $.fn.selectpicker.Constructor.prototype;\n\n// This will make our dropdown lists look like mdc-lists\nvar modifyLis = function ($el, opts) {\n\t$el.find('li.dropdown-header').each(function (idx, el) {\n\t\tel.classList.add('mdc-list-group__subheader');\n\t\tconst text = el.querySelector('.text');\n\t\tif (!text || !text.innerText) {\n\t\t\tel.classList.add('empty');\n\t\t}\n\t});\n\t$el.find('li[data-original-index]').each(function (idx, el) {\n\t\tvar $el = $(el);\n\t\tvar $text = $el.find('.text:last');\n\t\t$text.addClass('mdc-list-item__text');\n\t\t$el\n\t\t\t.addClass('mdc-list-item')\n\t\t\t.toggleClass('mdc-list-item--selected', $el.attr('selected') != null)\n\t\t\t.attr('title', $text.text());\n\t});\n\n\tconst lastUl = $el.find('ul:last');\n\tconst doneText = opts.doneButtonText || 'cancel';\n\tconst cancelEl = `
  • ${i18n.t(\n\t\t'i18n.' + doneText,\n\t)}
  • `;\n\tif (lastUl.length) {\n\t\tlastUl.append(cancelEl);\n\t} else if ($el.prop('tagName') === 'UL') {\n\t\t$el.append(cancelEl);\n\t}\n};\n\n// Slightly modifed version of a locally scoped function in the plugin\nvar getPlacement = function ($element) {\n\tif (!this.$bsContainer) return;\n\n\tthis.$bsContainer\n\t\t.addClass($element.attr('class').replace(/form-control|fit-width/gi, ''))\n\t\t.toggleClass('dropup', $element.hasClass('dropup'));\n\tvar pos = $element.offset();\n\tvar $container = this.$container;\n\n\tif (!$container.is('body')) {\n\t\tcontainerPos = $container.offset();\n\t\tcontainerPos.top +=\n\t\t\tparseInt($container.css('borderTopWidth')) - $container.scrollTop();\n\t\tcontainerPos.left +=\n\t\t\tparseInt($container.css('borderLeftWidth')) - $container.scrollLeft();\n\t} else {\n\t\tcontainerPos = {top: 0, left: 0};\n\t}\n\n\tactualHeight = $element.hasClass('dropup') ? 0 : $element[0].offsetHeight;\n\n\tthis.$bsContainer.css({\n\t\ttop: pos.top - containerPos.top + actualHeight,\n\t\tleft: pos.left - containerPos.left,\n\t\twidth: $element[0].offsetWidth,\n\t});\n};\n\n/**\n * @override\n * @param {method} init Original init method\n */\nproto.init = _.wrap(proto.init, function (init) {\n\t// Super\n\tinit.apply(this, _.rest(arguments));\n\n\tthis.$button\n\t\t.on(\n\t\t\t'focus',\n\t\t\tfunction (e) {\n\t\t\t\tthis.$button.closest('.mdc-select').addClass('mdc-select--focused');\n\t\t\t}.bind(this),\n\t\t)\n\t\t.on(\n\t\t\t'blur',\n\t\t\tfunction (e) {\n\t\t\t\tthis.$button.closest('.mdc-select').removeClass('mdc-select--focused');\n\t\t\t}.bind(this),\n\t\t);\n\n\tthis.$newElement\n\t\t// On show we want to attach our event\n\t\t.on(\n\t\t\t'shown.bs.dropdown',\n\t\t\tfunction (e) {\n\t\t\t\tthis.$container = $(this.options.container);\n\t\t\t\tthis.bindBodyScroll();\n\t\t\t}.bind(this),\n\t\t)\n\t\t// On hide we want to clean up our event\n\t\t.on(\n\t\t\t'hide.bs.dropdown',\n\t\t\tfunction (e) {\n\t\t\t\tthis.unbindBodyScroll();\n\t\t\t}.bind(this),\n\t\t);\n});\n\n/**\n * @override\n * @param {method} destroy Original destroy method\n */\nproto.destroy = _.wrap(proto.destroy, function (destroy) {\n\t// Cleanup\n\tthis.unbindBodyScroll();\n\tthis.$button.off();\n\n\t// Super\n\tdestroy.apply(this, _.rest(arguments));\n});\n\n/**\n * Add `title` to `
  • `s\n * They do not make overriding anything about the creation of lis easy in the least\n * This is the method that creates the html for our drop down menu\n * @override\n * @param {method} createView Original createView method\n */\nproto.createView = _.wrap(proto.createView, function (createView) {\n\t// Super\n\tvar $drop = createView.apply(this, _.rest(arguments));\n\t// Loop and set title based on option text\n\tmodifyLis($drop, this.options);\n\treturn $drop;\n});\n\n/**\n * Copy and pasted directly from `bootstrap-select.js`\n * Only change I made is that if there is no cached height for the menu\n * element, then we will estimate it based off of the number of `li`s and other\n * stored sizing info. Otherwise, it would just try to query the menu's height\n * and it would always return 0 on the first run-through\n * @override\n * @param {method} setSize Original setSize method\n */\nproto.setSize = _.wrap(proto.setSize, function (setSize) {\n\tthis.findLis();\n\tthis.liHeight();\n\n\tif (this.options.header) this.$menu.css('padding-top', 0);\n\tif (this.options.size === false) return;\n\n\tvar that = this,\n\t\t$menu = this.$menu,\n\t\t$menuInner = this.$menuInner,\n\t\t$window = $(window),\n\t\tselectHeight = this.$newElement[0].offsetHeight,\n\t\tselectWidth = this.$newElement[0].offsetWidth,\n\t\tliHeight = this.sizeInfo['liHeight'],\n\t\theaderHeight = this.sizeInfo['headerHeight'],\n\t\tsearchHeight = this.sizeInfo['searchHeight'],\n\t\tactionsHeight = this.sizeInfo['actionsHeight'],\n\t\tdoneButtonHeight = this.sizeInfo['doneButtonHeight'],\n\t\tdivHeight = this.sizeInfo['dividerHeight'],\n\t\tmenuPadding = this.sizeInfo['menuPadding'],\n\t\tmenuExtras = this.sizeInfo['menuExtras'],\n\t\tnotDisabled = this.options.hideDisabled ? '.disabled' : '',\n\t\tmenuHeight,\n\t\tmenuWidth,\n\t\tgetHeight,\n\t\tgetWidth,\n\t\tselectOffsetTop,\n\t\tselectOffsetBot,\n\t\tselectOffsetLeft,\n\t\tselectOffsetRight,\n\t\tgetPos = function () {\n\t\t\tvar pos = that.$newElement.offset(),\n\t\t\t\t$container = $(that.options.container),\n\t\t\t\tcontainerPos;\n\n\t\t\tif (that.options.container && !$container.is('body')) {\n\t\t\t\tcontainerPos = $container.offset();\n\t\t\t\tcontainerPos.top += parseInt($container.css('borderTopWidth'));\n\t\t\t\tcontainerPos.left += parseInt($container.css('borderLeftWidth'));\n\t\t\t} else {\n\t\t\t\tcontainerPos = {top: 0, left: 0};\n\t\t\t}\n\n\t\t\tvar winPad = that.options.windowPadding;\n\t\t\tselectOffsetTop = pos.top - containerPos.top - $window.scrollTop();\n\t\t\tselectOffsetBot =\n\t\t\t\t$window.height() -\n\t\t\t\tselectOffsetTop -\n\t\t\t\tselectHeight -\n\t\t\t\tcontainerPos.top -\n\t\t\t\twinPad[2];\n\t\t\tselectOffsetLeft = pos.left - containerPos.left - $window.scrollLeft();\n\t\t\tselectOffsetRight =\n\t\t\t\t$window.width() -\n\t\t\t\tselectOffsetLeft -\n\t\t\t\tselectWidth -\n\t\t\t\tcontainerPos.left -\n\t\t\t\twinPad[1];\n\t\t\tselectOffsetTop -= winPad[0];\n\t\t\tselectOffsetLeft -= winPad[3];\n\t\t};\n\n\tgetPos();\n\n\tif (this.options.size === 'auto') {\n\t\tvar getSize = function () {\n\t\t\tvar minHeight,\n\t\t\t\thasClass = function (className, include) {\n\t\t\t\t\treturn function (element) {\n\t\t\t\t\t\tif (include) {\n\t\t\t\t\t\t\treturn element.classList\n\t\t\t\t\t\t\t\t? element.classList.contains(className)\n\t\t\t\t\t\t\t\t: $(element).hasClass(className);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn !(element.classList\n\t\t\t\t\t\t\t\t? element.classList.contains(className)\n\t\t\t\t\t\t\t\t: $(element).hasClass(className));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\tlis = that.$menuInner[0].getElementsByTagName('li'),\n\t\t\t\tlisVisible = Array.prototype.filter\n\t\t\t\t\t? Array.prototype.filter.call(lis, hasClass('hidden', false))\n\t\t\t\t\t: that.$lis.not('.hidden'),\n\t\t\t\toptGroup = Array.prototype.filter\n\t\t\t\t\t? Array.prototype.filter.call(\n\t\t\t\t\t\t\tlisVisible,\n\t\t\t\t\t\t\thasClass('dropdown-header', true),\n\t\t\t\t\t )\n\t\t\t\t\t: lisVisible.filter('.dropdown-header');\n\n\t\t\tgetPos();\n\t\t\tmenuHeight = selectOffsetBot - menuExtras.vert;\n\t\t\tmenuWidth = selectOffsetRight - menuExtras.horiz;\n\n\t\t\tif (that.options.container) {\n\t\t\t\tif (!$menu.data('height')) {\n\t\t\t\t\t$menu.data('height', $menu.height());\n\n\t\t\t\t\t// If we don't have a cached height, we'll estimate it\n\t\t\t\t\tgetHeight = liHeight * lis.length + menuPadding.vert;\n\t\t\t\t} else {\n\t\t\t\t\t// If we do have a cached height, let's use it!\n\t\t\t\t\tgetHeight = $menu.data('height');\n\t\t\t\t}\n\n\t\t\t\tif (!$menu.data('width')) $menu.data('width', $menu.width());\n\t\t\t\tgetWidth = $menu.data('width');\n\t\t\t} else {\n\t\t\t\tgetHeight = $menu.height();\n\t\t\t\tgetWidth = $menu.width();\n\t\t\t}\n\n\t\t\tif (that.options.dropupAuto) {\n\t\t\t\t// menuHeight is how much room there is for a menu.\n\t\t\t\tthat.$newElement.toggleClass(\n\t\t\t\t\t'dropup',\n\t\t\t\t\tselectOffsetTop > selectOffsetBot &&\n\t\t\t\t\t\tmenuHeight - menuExtras.vert < getHeight,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (that.$newElement.hasClass('dropup')) {\n\t\t\t\tmenuHeight = selectOffsetTop - menuExtras.vert;\n\t\t\t}\n\n\t\t\tif (that.options.dropdownAlignRight === 'auto') {\n\t\t\t\t$menu.toggleClass(\n\t\t\t\t\t'dropdown-menu-right',\n\t\t\t\t\tselectOffsetLeft > selectOffsetRight &&\n\t\t\t\t\t\tmenuWidth - menuExtras.horiz < getWidth - selectWidth,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (lisVisible.length + optGroup.length > 3) {\n\t\t\t\tminHeight = liHeight * 3 + menuExtras.vert - 2;\n\t\t\t} else {\n\t\t\t\tminHeight = 0;\n\t\t\t}\n\n\t\t\t$menu.css({\n\t\t\t\t'max-height': menuHeight + 'px',\n\t\t\t\toverflow: 'hidden',\n\t\t\t\t'min-height':\n\t\t\t\t\tminHeight +\n\t\t\t\t\theaderHeight +\n\t\t\t\t\tsearchHeight +\n\t\t\t\t\tactionsHeight +\n\t\t\t\t\tdoneButtonHeight +\n\t\t\t\t\t'px',\n\t\t\t});\n\t\t\t$menuInner.css({\n\t\t\t\t'max-height':\n\t\t\t\t\tmenuHeight -\n\t\t\t\t\theaderHeight -\n\t\t\t\t\tsearchHeight -\n\t\t\t\t\tactionsHeight -\n\t\t\t\t\tdoneButtonHeight -\n\t\t\t\t\tmenuPadding.vert +\n\t\t\t\t\t'px',\n\t\t\t\t'overflow-y': 'auto',\n\t\t\t\t'min-height': Math.max(minHeight - menuPadding.vert, 0) + 'px',\n\t\t\t});\n\t\t};\n\t\tgetSize();\n\t\tthis.$searchbox\n\t\t\t.off('input.getSize propertychange.getSize')\n\t\t\t.on('input.getSize propertychange.getSize', getSize);\n\t\t$window\n\t\t\t.off('resize.getSize scroll.getSize')\n\t\t\t.on('resize.getSize scroll.getSize', getSize);\n\t} else if (\n\t\tthis.options.size &&\n\t\tthis.options.size != 'auto' &&\n\t\tthis.$lis.not(notDisabled).length > this.options.size\n\t) {\n\t\tvar optIndex = this.$lis\n\t\t\t\t.not('.divider')\n\t\t\t\t.not(notDisabled)\n\t\t\t\t.children()\n\t\t\t\t.slice(0, this.options.size)\n\t\t\t\t.last()\n\t\t\t\t.parent()\n\t\t\t\t.index(),\n\t\t\tdivLength = this.$lis.slice(0, optIndex + 1).filter('.divider').length;\n\t\tmenuHeight =\n\t\t\tliHeight * this.options.size + divLength * divHeight + menuPadding.vert;\n\t\tvar lis = that.$menuInner[0].getElementsByTagName('li');\n\n\t\tif (that.options.container) {\n\t\t\tif (!$menu.data('height')) {\n\t\t\t\t$menu.data('height', $menu.height());\n\n\t\t\t\t// If we don't have a cached height, we'll estimate it\n\t\t\t\tgetHeight = liHeight * lis.length + menuPadding.vert;\n\t\t\t} else {\n\t\t\t\t// If we do have a cached height, let's use it!\n\t\t\t\tgetHeight = $menu.data('height');\n\t\t\t}\n\t\t} else {\n\t\t\tgetHeight = $menu.height();\n\t\t}\n\n\t\tif (that.options.dropupAuto) {\n\t\t\t//noinspection JSUnusedAssignment\n\t\t\tthis.$newElement.toggleClass(\n\t\t\t\t'dropup',\n\t\t\t\tselectOffsetTop > selectOffsetBot &&\n\t\t\t\t\tmenuHeight - menuExtras.vert < getHeight,\n\t\t\t);\n\t\t}\n\t\t$menu.css({\n\t\t\t'max-height':\n\t\t\t\tmenuHeight +\n\t\t\t\theaderHeight +\n\t\t\t\tsearchHeight +\n\t\t\t\tactionsHeight +\n\t\t\t\tdoneButtonHeight +\n\t\t\t\t'px',\n\t\t\toverflow: 'hidden',\n\t\t\t'min-height': '',\n\t\t});\n\t\t$menuInner.css({\n\t\t\t'max-height': menuHeight - menuPadding.vert + 'px',\n\t\t\t'overflow-y': 'auto',\n\t\t\t'min-height': '',\n\t\t});\n\t}\n});\n\n/**\n * Add `title` to `
  • `s\n * They do not make overriding anything about the creation of lis easy in the least\n * This is the method that creates the html for our drop down menu\n * @override\n * @param {method} createView Original reloadLi method\n */\nproto.reloadLi = _.wrap(proto.reloadLi, function (reloadLi) {\n\t// Super\n\treloadLi.apply(this, _.rest(arguments));\n\tmodifyLis(this.$menuInner, this.options);\n});\n\nproto.createDropdown = function () {\n\t// Options\n\t// If we are multiple or showTick option is set, then add the show-tick class\n\tvar showTick = this.multiple || this.options.showTick ? ' show-tick' : '',\n\t\tinputGroup = this.$element.parent().hasClass('input-group')\n\t\t\t? ' input-group-btn'\n\t\t\t: '',\n\t\tautofocus = this.autofocus ? ' autofocus' : '';\n\t// Elements\n\tvar header = this.options.header\n\t\t? '
    ' +\n\t\t this.options.header +\n\t\t '
    '\n\t\t: '';\n\tvar searchbox = this.options.liveSearch\n\t\t? '
    ' +\n\t\t '' +\n\t\t '
    '\n\t\t: '';\n\tvar actionsbox =\n\t\tthis.multiple && this.options.actionsBox\n\t\t\t? '
    ' +\n\t\t\t '
    ' +\n\t\t\t '' +\n\t\t\t '' +\n\t\t\t '
    ' +\n\t\t\t '
    '\n\t\t\t: '';\n\tvar donebutton =\n\t\tthis.multiple && this.options.doneButton\n\t\t\t? '
    ' +\n\t\t\t '
    ' +\n\t\t\t '' +\n\t\t\t '
    ' +\n\t\t\t '
    '\n\t\t\t: '';\n\tvar drop =\n\t\t'
    ' +\n\t\t'' +\n\t\t'
    ' +\n\t\theader +\n\t\tsearchbox +\n\t\tactionsbox +\n\t\t'
      ' +\n\t\t'
    ' +\n\t\tdonebutton +\n\t\t'
    ' +\n\t\t'
    ';\n\n\treturn $(drop);\n};\n\n/**\n * Bind scroll events\n * @method\n */\nproto.bindBodyScroll = function () {\n\twindow.addEventListener(\n\t\t'scroll',\n\t\t(this.onbodyscroll = _.throttle(\n\t\t\tfunction (e) {\n\t\t\t\tvar $dropdownButton = this.$newElement,\n\t\t\t\t\t$dropdownMenu = this.$bsContainer,\n\t\t\t\t\t$scrollTarget = $(e.target);\n\n\t\t\t\t// Ignore if the dropdown button does not live in the scroll target\n\t\t\t\tif (!$scrollTarget.find($dropdownButton).length) return;\n\n\t\t\t\t// Update dropdown menu position\n\t\t\t\tgetPlacement.call(this, $dropdownButton);\n\t\t\t\t// Update size\n\t\t\t\tthis.setSize();\n\n\t\t\t\t// Scrolling container bounds\n\t\t\t\tvar boundY = ($scrollTarget.offset() || {}).top || 0,\n\t\t\t\t\tboundY2 = boundY + $scrollTarget.outerHeight(true);\n\n\t\t\t\t// Dropdown menu bounds\n\t\t\t\tvar y = ($dropdownMenu.offset() || {}).top || 0,\n\t\t\t\t\ty2 = y + $dropdownMenu.outerHeight(true);\n\n\t\t\t\t// Dropdown button bounds\n\t\t\t\t// var y = ( $dropdownButton.offset() || {} ).top || 0,\n\t\t\t\t// \ty2 = y + $dropdownButton.outerHeight( true );\n\n\t\t\t\t// No longer within view, hide the dropdown\n\t\t\t\t(y > boundY2 || y2 < boundY) && this.toggle();\n\t\t\t}.bind(this),\n\t\t\t16,\n\t\t\ttrue,\n\t\t)),\n\t\t{\n\t\t\tcapture: true,\n\t\t\tpassive: true,\n\t\t},\n\t);\n};\n\n/**\n * Unbind scroll events\n * @method\n */\nproto.unbindBodyScroll = function () {\n\twindow.removeEventListener('scroll', this.onbodyscroll, {\n\t\tcapture: true,\n\t\tpassive: true,\n\t});\n};\n","/**\n * @license\n * Copyright 2019 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n/**\n * Stores result from applyPassive to avoid redundant processing to detect\n * passive event listener support.\n */\nvar supportsPassive_;\n/**\n * Determine whether the current browser supports passive event listeners, and\n * if so, use them.\n */\nexport function applyPassive(globalObj, forceRefresh) {\n if (globalObj === void 0) { globalObj = window; }\n if (forceRefresh === void 0) { forceRefresh = false; }\n if (supportsPassive_ === undefined || forceRefresh) {\n var isSupported_1 = false;\n try {\n globalObj.document.addEventListener('test', function () { return undefined; }, {\n get passive() {\n isSupported_1 = true;\n return isSupported_1;\n },\n });\n }\n catch (e) {\n } // tslint:disable-line:no-empty cannot throw error due to tests. tslint also disables console.log.\n supportsPassive_ = isSupported_1;\n }\n return supportsPassive_ ? { passive: true } : false;\n}\n//# sourceMappingURL=events.js.map","/**\n * @license\n * Copyright 2018 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n/**\n * @fileoverview A \"ponyfill\" is a polyfill that doesn't modify the global prototype chain.\n * This makes ponyfills safer than traditional polyfills, especially for libraries like MDC.\n */\nexport function closest(element, selector) {\n if (element.closest) {\n return element.closest(selector);\n }\n var el = element;\n while (el) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentElement;\n }\n return null;\n}\nexport function matches(element, selector) {\n var nativeMatches = element.matches\n || element.webkitMatchesSelector\n || element.msMatchesSelector;\n return nativeMatches.call(element, selector);\n}\n//# sourceMappingURL=ponyfill.js.map","/**\n * @license\n * Copyright 2018 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\nvar cssClasses = {\n LIST_ITEM_ACTIVATED_CLASS: 'mdc-list-item--activated',\n LIST_ITEM_CLASS: 'mdc-list-item',\n LIST_ITEM_DISABLED_CLASS: 'mdc-list-item--disabled',\n LIST_ITEM_SELECTED_CLASS: 'mdc-list-item--selected',\n ROOT: 'mdc-list',\n};\nvar strings = {\n ACTION_EVENT: 'MDCList:action',\n ARIA_CHECKED: 'aria-checked',\n ARIA_CHECKED_CHECKBOX_SELECTOR: '[role=\"checkbox\"][aria-checked=\"true\"]',\n ARIA_CHECKED_RADIO_SELECTOR: '[role=\"radio\"][aria-checked=\"true\"]',\n ARIA_CURRENT: 'aria-current',\n ARIA_ORIENTATION: 'aria-orientation',\n ARIA_ORIENTATION_HORIZONTAL: 'horizontal',\n ARIA_ROLE_CHECKBOX_SELECTOR: '[role=\"checkbox\"]',\n ARIA_SELECTED: 'aria-selected',\n CHECKBOX_RADIO_SELECTOR: 'input[type=\"checkbox\"]:not(:disabled), input[type=\"radio\"]:not(:disabled)',\n CHECKBOX_SELECTOR: 'input[type=\"checkbox\"]:not(:disabled)',\n CHILD_ELEMENTS_TO_TOGGLE_TABINDEX: \"\\n .\" + cssClasses.LIST_ITEM_CLASS + \" button:not(:disabled),\\n .\" + cssClasses.LIST_ITEM_CLASS + \" a\\n \",\n FOCUSABLE_CHILD_ELEMENTS: \"\\n .\" + cssClasses.LIST_ITEM_CLASS + \" button:not(:disabled),\\n .\" + cssClasses.LIST_ITEM_CLASS + \" a,\\n .\" + cssClasses.LIST_ITEM_CLASS + \" input[type=\\\"radio\\\"]:not(:disabled),\\n .\" + cssClasses.LIST_ITEM_CLASS + \" input[type=\\\"checkbox\\\"]:not(:disabled)\\n \",\n RADIO_SELECTOR: 'input[type=\"radio\"]:not(:disabled)',\n};\nvar numbers = {\n UNSET_INDEX: -1,\n};\nexport { strings, cssClasses, numbers };\n//# sourceMappingURL=constants.js.map","/**\n * @license\n * Copyright 2018 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\nvar cssClasses = {\n ANCHOR: 'mdc-menu-surface--anchor',\n ANIMATING_CLOSED: 'mdc-menu-surface--animating-closed',\n ANIMATING_OPEN: 'mdc-menu-surface--animating-open',\n FIXED: 'mdc-menu-surface--fixed',\n OPEN: 'mdc-menu-surface--open',\n ROOT: 'mdc-menu-surface',\n};\n// tslint:disable:object-literal-sort-keys\nvar strings = {\n CLOSED_EVENT: 'MDCMenuSurface:closed',\n OPENED_EVENT: 'MDCMenuSurface:opened',\n FOCUSABLE_ELEMENTS: [\n 'button:not(:disabled)', '[href]:not([aria-disabled=\"true\"])', 'input:not(:disabled)',\n 'select:not(:disabled)', 'textarea:not(:disabled)', '[tabindex]:not([tabindex=\"-1\"]):not([aria-disabled=\"true\"])',\n ].join(', '),\n};\n// tslint:enable:object-literal-sort-keys\nvar numbers = {\n /** Total duration of menu-surface open animation. */\n TRANSITION_OPEN_DURATION: 120,\n /** Total duration of menu-surface close animation. */\n TRANSITION_CLOSE_DURATION: 75,\n /** Margin left to the edge of the viewport when menu-surface is at maximum possible height. */\n MARGIN_TO_EDGE: 32,\n /** Ratio of anchor width to menu-surface width for switching from corner positioning to center positioning. */\n ANCHOR_TO_MENU_SURFACE_WIDTH_RATIO: 0.67,\n};\n/**\n * Enum for bits in the {@see Corner) bitmap.\n */\nvar CornerBit;\n(function (CornerBit) {\n CornerBit[CornerBit[\"BOTTOM\"] = 1] = \"BOTTOM\";\n CornerBit[CornerBit[\"CENTER\"] = 2] = \"CENTER\";\n CornerBit[CornerBit[\"RIGHT\"] = 4] = \"RIGHT\";\n CornerBit[CornerBit[\"FLIP_RTL\"] = 8] = \"FLIP_RTL\";\n})(CornerBit || (CornerBit = {}));\n/**\n * Enum for representing an element corner for positioning the menu-surface.\n *\n * The START constants map to LEFT if element directionality is left\n * to right and RIGHT if the directionality is right to left.\n * Likewise END maps to RIGHT or LEFT depending on the directionality.\n */\nvar Corner;\n(function (Corner) {\n Corner[Corner[\"TOP_LEFT\"] = 0] = \"TOP_LEFT\";\n Corner[Corner[\"TOP_RIGHT\"] = 4] = \"TOP_RIGHT\";\n Corner[Corner[\"BOTTOM_LEFT\"] = 1] = \"BOTTOM_LEFT\";\n Corner[Corner[\"BOTTOM_RIGHT\"] = 5] = \"BOTTOM_RIGHT\";\n Corner[Corner[\"TOP_START\"] = 8] = \"TOP_START\";\n Corner[Corner[\"TOP_END\"] = 12] = \"TOP_END\";\n Corner[Corner[\"BOTTOM_START\"] = 9] = \"BOTTOM_START\";\n Corner[Corner[\"BOTTOM_END\"] = 13] = \"BOTTOM_END\";\n})(Corner || (Corner = {}));\nexport { cssClasses, strings, numbers, CornerBit, Corner };\n//# sourceMappingURL=constants.js.map","/**\n * @license\n * Copyright 2018 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\nvar cachedCssTransformPropertyName_;\n/**\n * Returns the name of the correct transform property to use on the current browser.\n */\nfunction getTransformPropertyName(globalObj, forceRefresh) {\n if (forceRefresh === void 0) { forceRefresh = false; }\n if (cachedCssTransformPropertyName_ === undefined || forceRefresh) {\n var el = globalObj.document.createElement('div');\n cachedCssTransformPropertyName_ = 'transform' in el.style ? 'transform' : 'webkitTransform';\n }\n return cachedCssTransformPropertyName_;\n}\nexport { getTransformPropertyName };\n//# sourceMappingURL=util.js.map","/**\n * @license\n * Copyright 2018 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\nvar cssClasses = {\n MENU_SELECTED_LIST_ITEM: 'mdc-menu-item--selected',\n MENU_SELECTION_GROUP: 'mdc-menu__selection-group',\n ROOT: 'mdc-menu',\n};\nvar strings = {\n ARIA_CHECKED_ATTR: 'aria-checked',\n CHECKBOX_SELECTOR: 'input[type=\"checkbox\"]',\n LIST_SELECTOR: '.mdc-list',\n SELECTED_EVENT: 'MDCMenu:selected',\n};\nvar numbers = {\n FOCUS_ROOT_INDEX: -1,\n};\nvar DefaultFocusState;\n(function (DefaultFocusState) {\n DefaultFocusState[DefaultFocusState[\"NONE\"] = 0] = \"NONE\";\n DefaultFocusState[DefaultFocusState[\"LIST_ROOT\"] = 1] = \"LIST_ROOT\";\n DefaultFocusState[DefaultFocusState[\"FIRST_ITEM\"] = 2] = \"FIRST_ITEM\";\n DefaultFocusState[DefaultFocusState[\"LAST_ITEM\"] = 3] = \"LAST_ITEM\";\n})(DefaultFocusState || (DefaultFocusState = {}));\nexport { cssClasses, strings, numbers, DefaultFocusState };\n//# sourceMappingURL=constants.js.map","/**\n * @license\n * Copyright 2016 Google Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\nexport var cssClasses = {\n // Ripple is a special case where the \"root\" component is really a \"mixin\" of sorts,\n // given that it's an 'upgrade' to an existing component. That being said it is the root\n // CSS class that all other CSS classes derive from.\n BG_FOCUSED: 'mdc-ripple-upgraded--background-focused',\n FG_ACTIVATION: 'mdc-ripple-upgraded--foreground-activation',\n FG_DEACTIVATION: 'mdc-ripple-upgraded--foreground-deactivation',\n ROOT: 'mdc-ripple-upgraded',\n UNBOUNDED: 'mdc-ripple-upgraded--unbounded',\n};\nexport var strings = {\n VAR_FG_SCALE: '--mdc-ripple-fg-scale',\n VAR_FG_SIZE: '--mdc-ripple-fg-size',\n VAR_FG_TRANSLATE_END: '--mdc-ripple-fg-translate-end',\n VAR_FG_TRANSLATE_START: '--mdc-ripple-fg-translate-start',\n VAR_LEFT: '--mdc-ripple-left',\n VAR_TOP: '--mdc-ripple-top',\n};\nexport var numbers = {\n DEACTIVATION_TIMEOUT_MS: 225,\n FG_DEACTIVATION_MS: 150,\n INITIAL_ORIGIN_SCALE: 0.6,\n PADDING: 10,\n TAP_DELAY_MS: 300,\n};\n//# sourceMappingURL=constants.js.map","/**\n * Stores result from supportsCssVariables to avoid redundant processing to\n * detect CSS custom variable support.\n */\nvar supportsCssVariables_;\nfunction detectEdgePseudoVarBug(windowObj) {\n // Detect versions of Edge with buggy var() support\n // See: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11495448/\n var document = windowObj.document;\n var node = document.createElement('div');\n node.className = 'mdc-ripple-surface--test-edge-var-bug';\n // Append to head instead of body because this script might be invoked in the\n // head, in which case the body doesn't exist yet. The probe works either way.\n document.head.appendChild(node);\n // The bug exists if ::before style ends up propagating to the parent element.\n // Additionally, getComputedStyle returns null in iframes with display: \"none\" in Firefox,\n // but Firefox is known to support CSS custom properties correctly.\n // See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n var computedStyle = windowObj.getComputedStyle(node);\n var hasPseudoVarBug = computedStyle !== null && computedStyle.borderTopStyle === 'solid';\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n return hasPseudoVarBug;\n}\nexport function supportsCssVariables(windowObj, forceRefresh) {\n if (forceRefresh === void 0) { forceRefresh = false; }\n var CSS = windowObj.CSS;\n var supportsCssVars = supportsCssVariables_;\n if (typeof supportsCssVariables_ === 'boolean' && !forceRefresh) {\n return supportsCssVariables_;\n }\n var supportsFunctionPresent = CSS && typeof CSS.supports === 'function';\n if (!supportsFunctionPresent) {\n return false;\n }\n var explicitlySupportsCssVars = CSS.supports('--css-vars', 'yes');\n // See: https://bugs.webkit.org/show_bug.cgi?id=154669\n // See: README section on Safari\n var weAreFeatureDetectingSafari10plus = (CSS.supports('(--css-vars: yes)') &&\n CSS.supports('color', '#00000000'));\n if (explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus) {\n supportsCssVars = !detectEdgePseudoVarBug(windowObj);\n }\n else {\n supportsCssVars = false;\n }\n if (!forceRefresh) {\n supportsCssVariables_ = supportsCssVars;\n }\n return supportsCssVars;\n}\nexport function getNormalizedEventCoords(evt, pageOffset, clientRect) {\n if (!evt) {\n return { x: 0, y: 0 };\n }\n var x = pageOffset.x, y = pageOffset.y;\n var documentX = x + clientRect.left;\n var documentY = y + clientRect.top;\n var normalizedX;\n var normalizedY;\n // Determine touch point relative to the ripple container.\n if (evt.type === 'touchstart') {\n var touchEvent = evt;\n normalizedX = touchEvent.changedTouches[0].pageX - documentX;\n normalizedY = touchEvent.changedTouches[0].pageY - documentY;\n }\n else {\n var mouseEvent = evt;\n normalizedX = mouseEvent.pageX - documentX;\n normalizedY = mouseEvent.pageY - documentY;\n }\n return { x: normalizedX, y: normalizedY };\n}\n//# sourceMappingURL=util.js.map","export function areArraysEqual(array1, array2, itemComparer = (a, b) => a === b) {\n return array1.length === array2.length && array1.every((value, index) => itemComparer(value, array2[index]));\n}","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport sliderClasses from './sliderClasses';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useValueLabelClasses = props => {\n const {\n open\n } = props;\n const utilityClasses = {\n offset: clsx(open && sliderClasses.valueLabelOpen),\n circle: sliderClasses.valueLabelCircle,\n label: sliderClasses.valueLabelLabel\n };\n return utilityClasses;\n};\n\n/**\n * @ignore - internal component.\n */\nexport default function SliderValueLabel(props) {\n const {\n children,\n className,\n value\n } = props;\n const classes = useValueLabelClasses(props);\n if (!children) {\n return null;\n }\n return /*#__PURE__*/React.cloneElement(children, {\n className: clsx(children.props.className)\n }, /*#__PURE__*/_jsxs(React.Fragment, {\n children: [children.props.children, /*#__PURE__*/_jsx(\"span\", {\n className: clsx(classes.offset, className),\n \"aria-hidden\": true,\n children: /*#__PURE__*/_jsx(\"span\", {\n className: classes.circle,\n children: /*#__PURE__*/_jsx(\"span\", {\n className: classes.label,\n children: value\n })\n })\n })]\n }));\n}\nprocess.env.NODE_ENV !== \"production\" ? SliderValueLabel.propTypes = {\n children: PropTypes.element.isRequired,\n className: PropTypes.string,\n value: PropTypes.node\n} : void 0;","import { unstable_generateUtilityClasses as generateUtilityClasses } from '@mui/utils';\nimport generateUtilityClass from '../generateUtilityClass';\nexport function getSliderUtilityClass(slot) {\n return generateUtilityClass('MuiSlider', slot);\n}\nconst sliderClasses = generateUtilityClasses('MuiSlider', ['root', 'active', 'colorPrimary', 'colorSecondary', 'colorError', 'colorInfo', 'colorSuccess', 'colorWarning', 'disabled', 'dragging', 'focusVisible', 'mark', 'markActive', 'marked', 'markLabel', 'markLabelActive', 'rail', 'sizeSmall', 'thumb', 'thumbColorPrimary', 'thumbColorSecondary', 'thumbColorError', 'thumbColorSuccess', 'thumbColorInfo', 'thumbColorWarning', 'track', 'trackInverted', 'trackFalse', 'thumbSizeSmall', 'valueLabel', 'valueLabelOpen', 'valueLabelCircle', 'valueLabelLabel', 'vertical']);\nexport default sliderClasses;","import { isHostComponent } from '@mui/base';\nconst shouldSpreadAdditionalProps = Slot => {\n return !Slot || !isHostComponent(Slot);\n};\nexport default shouldSpreadAdditionalProps;","const visuallyHidden = {\n border: 0,\n clip: 'rect(0 0 0 0)',\n height: '1px',\n margin: '-1px',\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n whiteSpace: 'nowrap',\n width: '1px'\n};\nexport default visuallyHidden;","/**\n * @module app/actions\n */\nimport {canContact} from './enablers';\nimport {helpUrl} from '@netx/core/lib/netx-enablers';\n\n/** @type {array} */\nexport default [\n\t/** @action */\n\t{\n\t\tevent: 'app:back',\n\t\tlabel: i18n.t('i18n.goBack'),\n\t},\n\t/** @action */\n\t{\n\t\tevent: 'app:contact',\n\t\tlabel: i18n.t('i18n.contact'),\n\t\tenableTest: canContact,\n\t},\n\t/** @action */\n\t{\n\t\tevent: 'app:help',\n\t\tlabel: i18n.t('i18n.help'),\n\t\tenableTest: helpUrl,\n\t},\n\t/** @action */\n\t{\n\t\tevent: 'app:reportProblem',\n\t\tlabel: i18n.t('i18n.reportProblem'),\n\t},\n\t/** @action */\n\t{\n\t\tevent: 'app:logout',\n\t\tlabel: i18n.t('i18n.logout'),\n\t},\n\t/** @action */\n\t{\n\t\tevent: 'app:showOptions',\n\t\tlabel: i18n.t('i18n.options'),\n\t\twrapper(view, e) {\n\t\t\treturn [view.model.get('menu')];\n\t\t},\n\t},\n];\n","import actions from 'netxcore@netx/core-app/actions';\nimport {extendBackboneActions} from '@netx/core/utils/extendBackboneActions';\n\nimport {icon} from '@fortawesome/fontawesome-svg-core';\nimport {faPowerOff} from '@fortawesome/pro-solid-svg-icons';\nconst iconOpts = {classes: ['fa-fw']};\nconst icons = {\n\tfaPowerOff: icon(faPowerOff, iconOpts).html,\n};\n\n// Extend actions defined in core file\nlet newActions = extendBackboneActions(actions, [\n\t/**\n\t * @action\n\t * @override\n\t */\n\t{\n\t\tevent: 'app:logout',\n\t\ticon: icons.faPowerOff,\n\t\troute: '#logout',\n\t},\n]);\n\nexport default newActions;\n","/**\n * @module app/menus\n */\nimport Menu from '@netx/core/lib/netx-menu';\n\nexport default {};\n","import menus from 'netxcore@netx/core-app/menus';\nimport Menu from '@netx/core/lib/netx-menu';\n\nmenus.headerMenu = new Menu({\n\tactions: [],\n});\n\nexport default menus;\n","/**\n * Application model for the Netx instance\n * @class\n */\nimport Base from '@netx/core/lib/netx-model';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\nimport StorageLocationsCollection from '../collections/storageLocations';\nimport {randomChars} from '@netx/core/utils/randomChars';\nimport {userProfile} from '@netx/core-user/collections/singletons/userProfile';\n\nclass App extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @property {object} defaults - The default attribute values\n\t * @property {string} defaults.description - The default app description\n\t * @property {string} defaults.clientLogs - The default app client logs\n\t * @property {string} defaults.ccSelf - The defualt copy self (as a boolean string?)\n\t * @property {string} defaults.serverUnresponsiveCount - DAM-3261 - unavailable server, after 3 alert user\n\t * @property {string} defaults.logo - Endpoint to retrieve logo image\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\t// for problem reports:\n\t\t\tdescription: '',\n\t\t\tclientLogs: '',\n\t\t\tccSelf: 'true',\n\t\t\tserverUnresponsiveCount: 0,\n\t\t\tlogo: '/theme/netx/logo?v=' + randomChars(5),\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} methods - The methods available on this model\n\t * @property {function|array} methods.read - The read method (get)\n\t * @property {function|array} methods.complain - Sends complaint\n\t * @property {function|array} methods._contact - Sends contact\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\tread: ['getProductVersion'],\n\t\t\t_contact: [\n\t\t\t\t'email',\n\t\t\t\t'contactArgs.to',\n\t\t\t\t'contactArgs.from',\n\t\t\t\t'contactArgs.subject',\n\t\t\t\t'contactArgs.message',\n\t\t\t\t'contactArgs.cc',\n\t\t\t\t'contactArgs.overrideBlock',\n\t\t\t],\n\t\t};\n\t}\n\n\t/**\n\t * @override\n\t * @param {object} attrs Model attributes\n\t * @param {object} opts Model options\n\t * @listens module:app#app:loaded\n\t */\n\tconstructor(attrs, opts) {\n\t\tsuper(attrs, opts);\n\n\t\t/**\n\t\t * Contact arguments\n\t\t * @memberOf Netx.Models.App\n\t\t * @alias contactArgs\n\t\t * @type {object}\n\t\t */\n\t\tthis.contactArgs = {\n\t\t\tfrom: '',\n\t\t\tto: [],\n\t\t\tcc: [],\n\t\t\tsubject: '',\n\t\t\tmessage: '',\n\t\t\toverrideBlock: false,\n\t\t};\n\n\t\t/**\n\t\t * Storage location\n\t\t * Fetched in user module\n\t\t * @memberOf Netx.Models.App\n\t\t * @alias storageLocations\n\t\t * @type {Netx.Collections.StorageLocations}\n\t\t * @see module:user#user:initialize\n\t\t */\n\t\tthis.storageLocations = new StorageLocationsCollection([]);\n\t\tthis.addSubCollection(this.storageLocations);\n\n\t\t// Hey, listen!\n\t\tthis.listenToOnce(dispatcher, 'app:loaded', () => {\n\t\t\tthis.loaded = true;\n\t\t});\n\t}\n\t/**\n\t * @method\n\t * @param {object} values Contact submission values\n\t * @return {jQuery.Deferred}\n\t */\n\tcontact(values) {\n\t\t// Check user prefs for email.mailto.rcpt_to property and convert to an array\n\t\tconst recipient = _.csvToArray(getPreference('email.mailto.rcpt_to'));\n\t\tconst userEmail = values.emailFrom || userProfile.get('email');\n\n\t\t// Check that \"recipient\" is an array of values and is not empty\n\t\tif (_.isArray(recipient) && !_.isEmpty(recipient)) {\n\t\t\t_.extend(this.contactArgs, {\n\t\t\t\tfrom: userEmail,\n\t\t\t\tsubject: values.subject,\n\t\t\t\tmessage: values.message,\n\t\t\t\tto: recipient,\n\t\t\t\tcc: values.ccSelf ? [userEmail] : [],\n\t\t\t});\n\t\t\treturn this._contact();\n\t\t} else {\n\t\t\t// Email setting not configured properly. Let developers know and return rejected promise.\n\t\t\tconsole.warn(\n\t\t\t\t'Unable to send email. Missing valid recipient(s), please configure your email settings',\n\t\t\t);\n\t\t\treturn new $.Deferred().reject();\n\t\t}\n\t}\n\t// /**\n\t// * When indicated that the app is ready, deal with the loading screen and anything else that is needed\n\t// * before the app can continue on with the UI\n\t// * @method\n\t// * @return {jQuery.Deferred}\n\t// */\n\t// ready() {\n\t// \tconst d = new $.Deferred();\n\t// \tconst done = () => {\n\t// \t\td.resolve(this);\n\t// \t};\n\n\t// \tNetx.Loading ? Netx.Loading.appLoaded(done) : done();\n\n\t// \treturn d.promise();\n\t// }\n\t// /**\n\t// * Controllers can call this and provide a callback and context (usually the controller's module namespace object)\n\t// * it will only ever fire once and will remove any previous listener for the same context if called multiple times\n\t// * @method\n\t// * @param {function} cb Callback to perform when app is ready\n\t// * @param {object} context Context to hook the listener to (will default to `window`)\n\t// * @listens module:app#app:loaded\n\t// */\n\t// whenReady(cb, context) {\n\t// \tif (this.loaded) {\n\t// \t\treturn cb();\n\t// \t}\n\t// \tdispatcher.off('app:loaded', context || window);\n\t// \tdispatcher.once('app:loaded', cb, context || window);\n\t// }\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'App';\n\t}\n}\n\nexport default App;\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-model';\n\nclass Brand extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {array} */\n\tget xhrTrackProgress() {\n\t\treturn ['getLocations'];\n\t}\n\n\t/**\n\t * @type {object}\n\t */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetBranding: 'Loading brand',\n\t\t};\n\t}\n\n\t/**\n\t * @type {object}\n\t */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetBranding: 'Loaded brand',\n\t\t};\n\t}\n\n\t/** @property {object} brandGetArgs - Arguments for getting brand items */\n\tget brandGetArgs() {\n\t\treturn {\n\t\t\t/** @property {object} brandGetArgs.logo - Arguments for getting brand logo */\n\t\t\tlogo: {\n\t\t\t\t/** @property {object} brandGetArgs.logo.type - String to pass as type for brand logo */\n\t\t\t\ttype: 'LOGO',\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} defaults - The default attribute values\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\t/** @property {string} defaults.logo - Brand logo */\n\t\t\tlogo: '',\n\t\t};\n\t}\n\n\t/**\n\t * RPC methods:\n\t * @rpcs\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\tconst d = new $.Deferred();\n\n\t\t\t\tthis.getLogo(opts).then((response) => {\n\t\t\t\t\t// RPC is now turning nulls into empty arrays?\n\t\t\t\t\tif (!response || _.isArray(response)) {\n\t\t\t\t\t\treturn d.resolve();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Make sure it is a real image\n\t\t\t\t\tconst img = new Image();\n\t\t\t\t\t$(img)\n\t\t\t\t\t\t.on('load', () => {\n\t\t\t\t\t\t\tlet logo;\n\t\t\t\t\t\t\tif (img.naturalWidth && img.naturalHeight) {\n\t\t\t\t\t\t\t\tlogo = '/' + response + '?t=' + _.uniqueId(_.now());\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\td.resolve({\n\t\t\t\t\t\t\t\tlogo: logo,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.on('error', () => {\n\t\t\t\t\t\t\td.resolve();\n\t\t\t\t\t\t});\n\t\t\t\t\timg.src = '/' + response;\n\t\t\t\t}, d.reject);\n\n\t\t\t\treturn d.promise();\n\t\t\t},\n\t\t\t/**\n\t\t\t * Get branding logo\n\t\t\t * See logo endpoints\n\t\t\t * @method\n\t\t\t * @deprecated\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetLogo(opts) {\n\t\t\t\treturn ['getBranding', this.brandGetArgs.logo];\n\t\t\t},\n\t\t\t/**\n\t\t\t * Resets all branding logos\n\t\t\t * @method\n\t\t\t */\n\t\t\tresetBranding: ['resetBranding'],\n\t\t\t/**\n\t\t\t * Set branding logo\n\t\t\t * @method\n\t\t\t * @param {string} logoName Name of uploaded file\n\t\t\t * @param {number} logoMode Logo to update (2=dark, 4=light)\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tsetLogo(logoName, logoMode, opts) {\n\t\t\t\treturn ['simpleBranding', logoName, logoMode];\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(attrs = {}, opts = {}) {\n\t\tattrs.id = _.uniqueId('brand-');\n\n\t\tsuper(attrs, opts);\n\n\t\t/** @property {object} brandSetArgs - Arguments for setting brand items */\n\t\tthis.brandSetArgs = {\n\t\t\t/** @property {number} brandSetArgs.logoMode - Mode for setting brand logo */\n\t\t\tlogoMode: 2,\n\t\t\t/** @property {string} brandSetArgs.logoName - Filename for setting brand logo */\n\t\t\tlogoName: '',\n\t\t\t...opts.brandSetArgs,\n\t\t};\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Brand';\n\t}\n}\n\nexport default Brand;\n","/**\n * Very similar to AppModalView but not a modal\n * Much of the code is the same minus a couple things - the main reason for not extending those methods\n * or the modalView itself, is that I want people to be able to customize them separately within the theme\n * It gets messy when you want your modal views to do something different than the fullscreen views\n * @class\n */\nimport Base from '@netx/core/lib/netx-multiView';\nimport {appRouter, getPrefixedLogger} from '@netx/core-next/instance';\nimport Template from '../templates/appFullScreenView.html';\nimport ModalView from './appModalView';\nimport ConfirmView from './confirmView';\n\nconst logger = getPrefixedLogger('views/appFullScreenView');\n\nclass AppFullScreenView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.additionalViewClasses = opts.additionalViewClasses || 'full-screen';\n\t\topts.childView = _.extend(\n\t\t\t{\n\t\t\t\ttarget: '[data-nx-control=\"full-screen-content\"]',\n\t\t\t\tviewClass(model) {\n\t\t\t\t\treturn model.get('viewClass');\n\t\t\t\t},\n\t\t\t},\n\t\t\topts.childView,\n\t\t);\n\t\topts.emptyOnHide = opts.emptyOnHide !== false;\n\t\topts.hideOnEmpty = opts.hideOnEmpty !== false;\n\t\topts.id = opts.id || 'full-screen-view';\n\t\topts.template = opts.template || Template;\n\t\topts.removeOnHide = false;\n\t\tsuper(opts);\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(dispatcher, 'routed', this.hideIfWeShould).listenTo(\n\t\t\tthis,\n\t\t\t'addedNewChildView',\n\t\t\t(view) => {\n\t\t\t\tif (view.viewSpec.isMyOriginalCollection(this.viewCollection)) {\n\t\t\t\t\t// Check if the view was a result of routing\n\t\t\t\t\tif (\n\t\t\t\t\t\tview.isRouted !== false &&\n\t\t\t\t\t\tBackbone.history.isRouting() &&\n\t\t\t\t\t\t!(view instanceof ConfirmView)\n\t\t\t\t\t) {\n\t\t\t\t\t\tview.isRouted = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t}\n\n\t/** @override */\n\tcancel(e) {\n\t\t// For now we are making the assumption that the closing of the fullscreen is dependant on its childViews\n\t\t// we need to get in the habit of using \":first\" in our event object for childviews and cancel/close button\n\t\t// Do nothing when cancel is fired/bubbbled on this view\n\t\tif (e && e.preventDefault) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\t\treturn false;\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Cache\n\t\tthis.$content = this.$('[data-nx-control=\"full-screen-content\"]');\n\t}\n\n\t/** @override */\n\tbeforeHidden(cb) {\n\t\t// We do not call super\n\t\tif (this.emptyOnHide) {\n\t\t\tlet view;\n\t\t\tthis.viewCollection.each((viewSpec) => {\n\t\t\t\tview = viewSpec.get('view');\n\t\t\t\tview && _.isFunction(view.cancel) && view.cancel();\n\t\t\t});\n\t\t\t// Always use set to empty\n\t\t\tthis.viewCollection.set([]);\n\t\t}\n\n\t\t// Fade out fullscreen and pipe finish to callback\n\t\t// this.$el.fadeOut(\"slow\", _.bind( cb, this ) );\n\t\tthis.$el.hide();\n\t\tcb.apply(this);\n\t}\n\n\t/**\n\t * @override\n\t * @param {function} cb Callback\n\t */\n\tbeforeShown(cb) {\n\t\tthis.$el.show();\n\t\tcb.apply(this);\n\t}\n\n\t/** @method */\n\thideIfWeShould(newRoute, oldRoute) {\n\t\treturn ModalView.prototype.hideIfWeShould.call(this, newRoute, oldRoute);\n\t}\n\n\t/**\n\t * Show is about to start\n\t * At this point no animation or actual showing [should] have taken place\n\t * @override\n\t */\n\tonShowing() {\n\t\tsuper.onShowing();\n\t\tthis.hiddenByRoute = false;\n\t}\n\n\t/**\n\t * A view was instantiated (a brand new childView was born)\n\t * @override\n\t * @param {Netx.View} view Instance of Netx.View\n\t */\n\tviewInstantiated(view) {\n\t\tsuper.viewInstantiated(view);\n\n\t\t// All true (non-transient) child views will be fully removed on hide\n\t\tif (!view.viewSpec.isMyOriginalCollection(this.viewCollection)) return;\n\n\t\tview.removeOnHide = true;\n\t}\n\n\t/**\n\t * @override\n\t * @param {Netx.View} view Instance of Netx.View\n\t */\n\tviewRemoved(view) {\n\t\tif (!this.hiddenByRoute) {\n\t\t\t// If a new view came in in the mean time and it is routed - do nothing - we are at the route we should be\n\t\t\tconst activeView = this.getActiveView();\n\t\t\tif (activeView && activeView.cid !== view.cid && activeView.isRouted) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// HACK: preserve this value across callbacks:\n\t\t\t// (isRouting() reports false if a callback is fired via setTimeout(), such as in certain Bootstrap hiding animations.)\n\t\t\tconst isRouting = Backbone.history.isRouting();\n\t\t\t// If we opened this modal view due to a route...\n\t\t\tif (view.isRouted) {\n\t\t\t\tlogger.silly('removing routed view >', view.viewSpec.id);\n\t\t\t\tdelete view.isRouted;\n\t\t\t\t// Unless we're currently routing, route back to where we were before we opened the modal.\n\t\t\t\tif (!isRouting) {\n\t\t\t\t\tview.routeMatch != null\n\t\t\t\t\t\t? appRouter.exitRoute(view.routeMatch, {force: true})\n\t\t\t\t\t\t: appRouter.back();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdelete this.hiddenByRoute;\n\n\t\tsuper.viewRemoved(view);\n\t}\n\n\t/**\n\t * @static\n\t * @type {string}\n\t */\n\tstatic get __name__() {\n\t\treturn 'AppFullScreenView';\n\t}\n}\n\nexport default AppFullScreenView;\n","import Base from 'netxcore@netx/core-app/views/appFullScreenView';\n\nexport default class AppFullScreenView extends Base {\n\t/** @override */\n\tafterHidden(view) {\n\t\tsuper.afterHidden(view);\n\t\tthis.$el.removeClass('in');\n\t}\n\n\t/** @override */\n\tbeforeShown(view) {\n\t\tthis.$el.addClass('in');\n\t\tsuper.beforeShown(view);\n\t}\n}\n","/**\n * A view for progress\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/appProgressView.html';\n\nclass AppProgressView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.eventStr = opts.eventStr || 'foo:bar';\n\t\topts.headerTitle = opts.headerTitle || i18n.t('i18n.working');\n\t\topts.id = opts.id || 'app-progress-view';\n\t\t/**\n\t\t * Never route to a progress view, and never accidentally un-route when we close one:\n\t\t * @type {boolean}\n\t\t */\n\t\topts.isRouted = false;\n\t\topts.loadingClassRemoveDelay = opts.loadingClassRemoveDelay || 300;\n\t\topts.minimumShowTime = opts.minimumShowTime || 300;\n\t\topts.modalOptions = {\n\t\t\tblocking: true,\n\t\t\t...opts.modalOptions,\n\t\t};\n\t\topts.removeOnHide = opts.removeOnHide !== false;\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\tthis.lastEventStr = this.eventStr = opts.eventStr;\n\t\tthis.message = opts.message;\n\t\tthis.simulate = opts.simulate !== false;\n\n\t\t// Hey listen!\n\t\tthis.listenTo(\n\t\t\tdispatcher,\n\t\t\t`${this.eventStr}:success ${this.eventStr}:error`,\n\t\t\t_.debounce(this.complete, 500),\n\t\t);\n\n\t\tif (this.viewSpec) {\n\t\t\tthis.listenTo(\n\t\t\t\tthis.viewSpec,\n\t\t\t\t'change:viewOptions:eventStr',\n\t\t\t\t(viewSpec, eventStr, opts) => {\n\t\t\t\t\tthis.hideTimeout && clearTimeout(this.hideTimeout);\n\n\t\t\t\t\tthis.stopListening(\n\t\t\t\t\t\tdispatcher,\n\t\t\t\t\t\t`${this.lastEventStr}:success ${this.lastEventStr}:error`,\n\t\t\t\t\t);\n\t\t\t\t\tthis.lastEventStr = eventStr;\n\t\t\t\t\tthis.listenTo(\n\t\t\t\t\t\tdispatcher,\n\t\t\t\t\t\t`${eventStr}:success ${eventStr}:error`,\n\t\t\t\t\t\t_.debounce(this.complete, 500),\n\t\t\t\t\t);\n\n\t\t\t\t\tthis.render();\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\n\t\t// We want nothing (for now at least)\n\t\tthis.templateDataSource = {};\n\t\t// Additonal template vars\n\t\tObject.assign(this.templateVars, {\n\t\t\tmessage: this.message || '',\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Cache the pseudo progress elements\n\t\tthis.$pseudoProgress = this.$('.nx-control-pseudo-progress:first');\n\t\tthis.$pseudoProgressBar = this.$pseudoProgress.find(\n\t\t\t'.nx-control-progress-bar',\n\t\t);\n\n\t\t// Simulation\n\t\tthis.simulate && this.simulateProgress();\n\t}\n\n\t/** @method */\n\tcomplete() {\n\t\tthis.hideTimeout && clearTimeout(this.hideTimeout);\n\n\t\t// Simulation\n\t\tthis.simulate && this.endProgressSimulation();\n\n\t\t// // Give it a half a second\n\t\tif (this.hiding) {\n\t\t\t// Check if we are already hiding, since there is a delay - but let the view know there are no more simple hides\n\t\t\tdelete this._simpleHide;\n\t\t\treturn;\n\t\t}\n\n\t\tthis.hideTimeout = setTimeout(() => {\n\t\t\tthis.hide();\n\t\t}, 500);\n\t}\n\n\t/** @override */\n\tremove() {\n\t\tthis.hideTimeout && clearTimeout(this.hideTimeout);\n\t\tsuper.remove();\n\t}\n\n\t/**\n\t * @static\n\t * @type {string}\n\t */\n\tstatic get __name__() {\n\t\treturn 'AppProgressView';\n\t}\n}\n\nexport default AppProgressView;\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/optionTile';\nimport Menu from '@netx/core/lib/netx-menu';\n\nclass OptionTiles extends Base {\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\n\t\tconst menu = opts.menu;\n\t\t// Must be a valid menu\n\t\tif (menu == null || !(menu instanceof Menu)) {\n\t\t\tthrow new Error('A valid menu is required for Option Tiles');\n\t\t}\n\n\t\tconst actions = menu.get('actions');\n\t\tmodels = [];\n\t\t_.each(actions, (action) => {\n\t\t\tconst tileOption = new opts.model({action: action}, _.omit(opts, 'menu'));\n\t\t\t// If there is no event on our model there must have been issues or this use ris not allowed to run the action provided\n\t\t\t// In any case, do not add to the collection\n\t\t\tif (tileOption.get('event')) models.push(tileOption);\n\t\t});\n\n\t\tsuper(models, opts);\n\n\t\tif (menu && menu.get) {\n\t\t\tthis.label = menu.get('label') || i18n.t('i18n.options');\n\t\t}\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'OptionTiles';\n\t}\n}\n\nexport default OptionTiles;\n","/**\n * @fires netx:analytics:start\n */\n\nimport {getPublicProperty} from '@netx/core-app-next/utils/getPublicProperty';\n\nexport default function () {\n\tconst promises = [];\n\n\t// TODO: we need a portal singleton that contains all these sorts of things\n\tvar analyticOpts = null; // Netx.custom.portal ? Netx.custom.portal.analytics : null;\n\t// Check for analytics configuration:\n\t_.each(['google'], function (provider) {\n\t\tlet trackingState, trackingCode;\n\t\tif (analyticOpts) {\n\t\t\tprovider = analyticOpts[provider] || {};\n\t\t\ttrackingState = provider.enabled;\n\t\t\ttrackingCode = provider.trackingId;\n\t\t} else {\n\t\t\ttrackingState = getPublicProperty(\n\t\t\t\t'analytics.' + provider + '.enabled',\n\t\t\t\ttrue,\n\t\t\t);\n\t\t\ttrackingCode = getPublicProperty('analytics.' + provider + '.trackingId');\n\t\t}\n\t\tif (trackingState && trackingCode) {\n\t\t\tvar d = new $.Deferred();\n\t\t\tpromises.push(d);\n\t\t\t// Load & start Analytics.\n\t\t\tdispatcher.trigger(\n\t\t\t\t'netx:analytics:start',\n\t\t\t\tprovider,\n\t\t\t\ttrackingCode,\n\t\t\t\tfunction () {\n\t\t\t\t\td.resolve();\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t});\n\n\treturn Promise.all(promises);\n}\n","/**\n * Main application module required for proper functioning\n * Handles default functionality like authentication, alerts\n * view state and current data state\n *\n * @module app\n */\n\nimport React, {Suspense} from 'react';\nimport ReactDOM from 'react-dom/client';\n\nconst AppComponent = React.lazy(() =>\n\timport(\n\t\t/* webpackChunkName: \"App-Component\" */ '@netx/core-app-next/components/App'\n\t),\n);\n\nconst UnauthenticatedLandingComponent = React.lazy(() =>\n\timport(\n\t\t/* webpackChunkName: \"UnauthenticatedLanding-Component\" */ '@netx/core-auth-next/components/UnauthenticatedLanding'\n\t),\n);\n\n// import semver from 'core-libs/semver.browser';\nimport {localStore} from '@netx/core-next/instance/localStore';\nimport {session} from '@netx/core-auth/collections/singleton/session';\nimport {userPrefs} from '@netx/core-user/collections/singletons/userPreferences';\nimport {\n\tcurrentUserMeetsUserLevel,\n\tUserLevel,\n} from '@netx/core-user-next/utils/currentUserMeetsUserLevel';\nimport Modernizr from 'core-libs/modernizr/modernizr';\n\n// Bootstrap\n// We should cherry pick the things we use and abandon the rest - just make a list of the things core has natively from bootstrap and themes can fill in the rest\nimport 'core-libs/bootstrap';\n// Then our bootstrap overrides/enhancements\nimport 'core-libs/bootstrap-netx';\nimport {spawnNewWindow} from '@netx/core-next/utils/browser';\n\n// Models\nimport CoreModel from '@netx/core/lib/netx-model';\nimport AppModel from './models/app';\nimport BatchJobModel from './models/batchJob';\nimport BrandModel from './models/brand';\n\n// Views\nimport AlertView from './views/alertView';\n// import AppView from './views/appView';\nimport FullScreenView from './views/appFullScreenView';\nimport AppProgressView from './views/appProgressView';\n\n// Collections\nimport OptionTilesCollection from './collections/optionTiles';\n\nimport Analytics from '@netx/core/lib/netx-analytics';\n\n// App config `Netx.app.options`\nimport customConfig from './config';\nimport authConfig from '@netx/core-auth/config';\n\n// A small package that lets us know when an element (in our case a view's $el) has loaded all contained images\nimport 'core-libs/imagesloaded.pkgd.js';\n\nimport {batchJobs} from './collections/singleton/batchJobs';\nimport {legacyWebsocket} from './collections/singleton/websocket';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\nimport {bodyView} from './singletons/bodyViews';\nimport {fsViews} from './singletons/fsViews';\nimport {modalView, modalViews} from './singletons/modalViews';\nimport {ready} from '@netx/core-next/whenReady';\nimport {\n\tgetPrefixedLogger,\n\tdispatcher,\n\tappRouter,\n} from '@netx/core-next/instance';\nimport {setGlobal} from '@netx/core-next/utils/setGlobal';\n\nconst logger = getPrefixedLogger('core:app');\n\n//=================================\n//\tINIT\n//=================================\n// All collection and model instances and event listeners\n// are created when the module is initialized.\n/**\n * app:init handler initializes the Netx.app namespace and various other handlers.\n * @event module:app#app:init\n * @param {object} options\n * @fires module:app#app:extend\n * @fires module:app#app:initialized\n */\ndispatcher.once('app:init', function (options) {\n\tlogger.silly('initializing...');\n\n\tconst NS = (Netx.app = Netx.app || new AppModel());\n\tNS.set({...customConfig, ...options});\n\n\t//=================================\n\t//\tCREATE MODELS AND COLLECTIONS\n\t//=================================\n\n\tconst disableTouchMove = (e) => {\n\t\te.preventDefault();\n\t};\n\n\tsetGlobal({\n\t\tdisableTouchMove() {\n\t\t\tdocument.addEventListener('touchmove', disableTouchMove, {\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t},\n\t\tenableTouchMove() {\n\t\t\tdocument.removeEventListener('touchmove', disableTouchMove, {\n\t\t\t\tpassive: false,\n\t\t\t});\n\t\t},\n\t\t/**\n\t\t * Set user preference\n\t\t * @function\n\t\t * @param {string} key [dot seperated] preference key\n\t\t * @param {mixed} value Value to set on preference\n\t\t */\n\t\tsetPreference: function (key, val) {\n\t\t\treturn userPrefs.setUserPreference(key, val);\n\t\t},\n\t});\n\n\tNS.brand = new BrandModel();\n\t//=================================\n\t//\t!CREATE MODELS AND COLLECTIONS\n\t//=================================\n\n\t// Application-level DOM setup/manipulations:\n\t// =========================================\n\t//\n\t// TODO: Should we have a view for the entire DOM (document)?\n\t// It wouldn't render, but it could hold all this stuff.\n\tvar $body = (NS.$body = $('body')),\n\t\t$document = (NS.$document = $(document)),\n\t\t$window = (NS.$window = $(window));\n\t//=================================\n\t//\tWINDOW LISTENERS\n\t//=================================\n\tNS.size = {\n\t\twidth: $window.innerWidth(),\n\t\theight: $window.innerHeight(),\n\t};\n\n\tconst tickleSession = _.throttle(() => {\n\t\tdispatcher.trigger('session:tickle');\n\t}, 30000); // every 30 seconds we will try - the session can handle its own limits\n\tdocument.addEventListener(\n\t\t'keydown',\n\t\t() => {\n\t\t\ttickleSession();\n\t\t},\n\t\t{passive: true, capture: true},\n\t);\n\n\t// Window resize listener dispatches event 'app:resize' after window resize has been static for 100ms\n\t$window.on(\n\t\t'resize',\n\t\t_.debounce(function () {\n\t\t\tvar size = NS.size,\n\t\t\t\th = $window.innerHeight(),\n\t\t\t\tw = $window.innerWidth();\n\n\t\t\tif (size.width !== w || size.height !== h) {\n\t\t\t\tsize.width = w;\n\t\t\t\tsize.height = h;\n\t\t\t\tdispatcher.trigger('app:resize', size);\n\t\t\t}\n\t\t}, 100),\n\t);\n\t//=================================\n\t//\t!WINDOW LISTENERS\n\t//=================================\n\n\tconst root = ReactDOM.createRoot(document.getElementById('wrapper'));\n\n\tbodyView.$el.appendTo($body);\n\tbodyView.render();\n\n\tnew FullScreenView({\n\t\tel: document.querySelector('.nx-app-fullscreen'),\n\t\tviewCollection: fsViews,\n\t}).render();\n\n\tmodalView.$el.appendTo($body);\n\tmodalView.render();\n\n\t//=================================\n\t//\tEVENT LISTENERS\n\t//=================================\n\n\t/**\n\t * The app is in a ready state\n\t * @event module:app#app:ready\n\t * @param {boolean} start Start the app\n\t * @fires module:app#app:loaded\n\t * @fires module:app#app:start\n\t */\n\tdispatcher.once(\n\t\t'app:ready',\n\t\tfunction (start = false) {\n\t\t\tlogger.silly('ready', 'start >', start.toString());\n\t\t\t// TODO: this is a hack for now - need to put this in the proper place for the proper time\n\t\t\t!start &&\n\t\t\t\troot.render(\n\t\t\t\t\t}>\n\t\t\t\t\t\t\n\t\t\t\t\t,\n\t\t\t\t\t// document.getElementById('wrapper'),\n\t\t\t\t);\n\n\t\t\tready().then(function () {\n\t\t\t\tstart &&\n\t\t\t\t\troot.render(\n\t\t\t\t\t\t}>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t,\n\t\t\t\t\t); //, document.getElementById('wrapper'));\n\t\t\t\tlogger.silly('loaded and starting');\n\t\t\t\tdispatcher.trigger('app:loaded', start);\n\t\t\t\t// Should we start the app (authenticated)\n\t\t\t\tstart && dispatcher.trigger('app:start');\n\t\t\t});\n\t\t},\n\t\twindow,\n\t);\n\n\t/**\n\t * App is loaded and user is authenticated\n\t * @event module:app#app:start\n\t */\n\tdispatcher.once('app:start', function () {\n\t\t// Netx.websocket = legacyWebsocket;\n\t});\n\n\t/**\n\t * The app is loaded\n\t * @event module:app#app:loaded\n\t */\n\tdispatcher.once('app:loaded', function (authenticated) {\n\t\tappRouter.ready = true;\n\t\tif (session.get('browserOk') || session.getCookie('browserOk')) {\n\t\t\t// Process the current route and get it all going\n\t\t\tif (authenticated) {\n\t\t\t\tconst hash = localStore.get(authConfig.POST_LOGIN_HASH_NAME);\n\t\t\t\tif (hash) window.location.hash = hash;\n\t\t\t\t//Netx.router.navigate(hash, true);\n\t\t\t\tlocalStore.set(authConfig.POST_LOGIN_HASH_NAME, '');\n\t\t\t}\n\t\t\tBackbone.history.loadUrl();\n\t\t}\n\t});\n\n\t/**\n\t * Switch to the Flex interface\n\t * @event module:app#app:browser:override:cancelled\n\t */\n\tdispatcher.once('app:browser:override:cancelled', function () {\n\t\t// If the user doesn't want to continue we send them to Flex\n\t\twindow.location.replace('/ImagePortal.jsp');\n\t});\n\n\t/**\n\t * Wait for compatiability confirmation\n\t * @event module:app#app:compatible:confirmed\n\t * @fires netx:app:modules\n\t */\n\tdispatcher.once('app:compatible:confirmed', function () {\n\t\tconst promises = [];\n\t\t// Get storage location info\n\t\t// Must be Importer or higher to fetch\n\t\tif (currentUserMeetsUserLevel(UserLevel.IMPORTER)) {\n\t\t\tpromises.push(\n\t\t\t\tNS.storageLocations.fetch(),\n\t\t\t\tNS.storageLocations.getLocationTypes(),\n\t\t\t);\n\t\t}\n\n\t\t// When all promises are complete\n\t\tPromise.all(promises).then(() => {\n\t\t\t// Promise.all([\n\t\t\t// \timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-permissions'),\n\t\t\t// \timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-cart'),\n\t\t\t// \timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-asset'),\n\t\t\t// \timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-user'),\n\t\t\t// \timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-category'),\n\t\t\t// \timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-search'),\n\t\t\t// \timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-share'),\n\t\t\t// ]).then(modules => {\n\t\t\t// \tdispatcher.trigger('netx:load:module', modules.map(m => m.default), {\n\t\t\t// \t\tinitialized() {\n\t\t\t// \t\t\tdispatcher.trigger('app:ready', true);\n\t\t\t// \t\t},\n\t\t\t// \t});\n\t\t\t// });\n\t\t\tdispatcher.trigger('netx:app:modules');\n\t\t});\n\t});\n\n\t/**\n\t * @event module:auth#auth:session:invalid\n\t * @fires module:app#app:ready\n\t */\n\tdispatcher.once('auth:session:invalid', function () {\n\t\t// The app is ready to show the login screen\n\t\tdispatcher.trigger('app:ready', false);\n\t});\n\n\t/**\n\t * Once we find a valid session, test for correct server version.\n\t * @event module:auth#auth:session:valid\n\t * @fires module:app#app:compatible:confirmed\n\t * @fires module:app#app:serverVersionWarning\n\t * @fires module:app#app:user:prefs:ready\n\t * @listens module:app#app:compatible:confirmed\n\t */\n\tdispatcher.once('auth:session:valid', function () {\n\t\t// Fetch the user prefs\n\t\t$.when(userPrefs.fetch()).then(function () {\n\t\t\t// Things in the app can start testing against user prefs now\n\t\t\tdispatcher.trigger('app:user:prefs:ready');\n\n\t\t\t// Wait until authenticated for this\n\t\t\t// If solr is not enabled, warn the user & suggest Flex\n\t\t\tif (!getPreference('searchEngine.solrEnabled', true)) {\n\t\t\t\tdispatcher.trigger(\n\t\t\t\t\t'app:alert',\n\t\t\t\t\ti18n.t('i18n.solrNotEnabledMessage'),\n\t\t\t\t\ti18n.t('i18n.warning'),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Test server version\n\t\t\tNS.fetch().then(function (java_version) {\n\t\t\t\tdispatcher.trigger('app:compatible:confirmed');\n\t\t\t\t// var requiredVersion = NS.options.REQUIRED_SERVER_VERSION;\n\t\t\t\t// if (!_.isUndefined(semver)) {\n\t\t\t\t// \tif (\n\t\t\t\t// \t\trequiredVersion &&\n\t\t\t\t// \t\t!semver.satisfies(java_version, requiredVersion)\n\t\t\t\t// \t) {\n\t\t\t\t// \t\tdispatcher.trigger(\n\t\t\t\t// \t\t\t'app:serverVersionWarning',\n\t\t\t\t// \t\t\tjava_version,\n\t\t\t\t// \t\t\trequiredVersion,\n\t\t\t\t// \t\t);\n\t\t\t\t// \t} else {\n\t\t\t\t// \t\tdispatcher.trigger('app:compatible:confirmed');\n\t\t\t\t// \t}\n\t\t\t\t// } else {\n\t\t\t\t// \t// If the install is missing the semver dependency log the issue and continue without catastrophic failure.\n\t\t\t\t// \tdispatcher.trigger('app:compatible:confirmed');\n\t\t\t\t// \tconsole.warn('Missing semver dependency.');\n\t\t\t\t// }\n\t\t\t});\n\t\t});\n\t});\n\n\t/**\n\t * @event module:auth#auth:token:valid\n\t * @fires module:auth#auth:token:handle\n\t */\n\tdispatcher.once('auth:token:valid', function () {\n\t\tdispatcher.trigger('auth:token:handle');\n\t});\n\n\t/**\n\t * @event module:auth#auth:token:invalid\n\t * @fires module:auth#auth:token:handle\n\t */\n\tdispatcher.once('auth:token:invalid', function () {\n\t\tdispatcher.trigger('auth:token:handle');\n\t});\n\n\t/**\n\t * Using a token\n\t * Only need a handful of modules for this\n\t * @event module:auth#auth:token:handle\n\t * @fires module:netx#netx:load:module\n\t * @fires module:app#app:ready\n\t */\n\t// Regardless of valid or invalid - the related view will handle messaging\n\tdispatcher.once('auth:token:handle', function () {\n\t\tconst m = window.location.hash.match(/(\\w+)/i)?.[1] ?? '';\n\t\tif (m === 'uploads') {\n\t\t\tPromise.all([\n\t\t\t\timport(/* webpackChunkName: \"upload-requests\" */ '@netx/core-asset'),\n\t\t\t\timport(/* webpackChunkName: \"upload-requests\" */ '@netx/core-upload'),\n\t\t\t\timport(/* webpackChunkName: \"upload-requests\" */ '@netx/core-category'),\n\t\t\t]).then((modules) => {\n\t\t\t\tdispatcher.trigger(\n\t\t\t\t\t'netx:load:module',\n\t\t\t\t\tmodules.map((m) => m.default),\n\t\t\t\t\t{\n\t\t\t\t\t\tinitialized() {\n\t\t\t\t\t\t\tdispatcher.trigger('app:ready', true);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t});\n\t\t}\n\t});\n\n\t/**\n\t * Displays an alert box to the user\n\t * @event module:app#app:alert:show\n\t * @param {object} viewOptions View options\n\t */\n\tdispatcher.on(\n\t\t'app:alert:show',\n\t\tfunction (viewOptions) {\n\t\t\tmodalViews.add({\n\t\t\t\tviewClass: AlertView,\n\t\t\t\tshowActions: ['app:alert:show'],\n\t\t\t\tviewOptions: viewOptions,\n\t\t\t});\n\t\t},\n\t\twindow,\n\t);\n\n\t/**\n\t * Prepare and display an alert box to the user\n\t * @event module:app#app:alert\n\t * @param {string} msg Message to be displayed to the user\n\t * @param {string} type Type of alert that should be displayed to user corresponds with bootstrap classes 'error','warn','info','success'\n\t * @fires module:app#app:alert:show\n\t */\n\tdispatcher.on('app:alert', function (msg, type) {\n\t\tvar alertClass, av;\n\t\ttype = type || 'Warning';\n\t\tmsg =\n\t\t\tmsg || 'Sorry, the system has encountered a problem. Please try again.';\n\t\talertClass = type ? 'alert-' + type.toLowerCase() : '';\n\n\t\tdispatcher.trigger('app:alert:show', {\n\t\t\tmodel: new CoreModel({\n\t\t\t\ttype: type,\n\t\t\t\tmsg: msg,\n\t\t\t\talertClass: alertClass ? ' ' + alertClass : '',\n\t\t\t}),\n\t\t});\n\t});\n\n\t/**\n\t * Action handler for buttons that want to trigger history.back .\n\t * @event module:system#app:back\n\t */\n\tdispatcher.on('app:back', function () {\n\t\t// Gives us some added benefits\n\t\tappRouter.back();\n\t});\n\n\t/**\n\t * @event module:app#netx:browser:override:cancelled\n\t * @global\n\t */\n\tdispatcher.on('app:browser:override:cancelled', function () {\n\t\t// If the user doesn't want to continue we send them to Flex\n\t\twindow.location.replace('/ImagePortal.jsp');\n\t});\n\n\t/**\n\t * If the user cancelled startup due to the server incompatibility,\n\t * fall back to the Flex interface.\n\t * @event module:app#netx:compatible:cancelled\n\t * @global\n\t */\n\tdispatcher.once('app:compatible:cancelled', function () {\n\t\twindow.location.replace('/ImagePortal.jsp');\n\t});\n\n\t/**\n\t * @event module:app#app:confirm:show\n\t * @param {object} viewOptions View options\n\t */\n\tdispatcher.on('app:confirm:show', function (viewOptions) {\n\t\timport(\n\t\t\t/* webpackChunkName: \"view-appConfirm\" */ './views/confirmView'\n\t\t).then((View) => {\n\t\t\tmodalViews.add({\n\t\t\t\tviewClass: View.default,\n\t\t\t\tshowActions: ['app:confirm:show'],\n\t\t\t\tviewOptions: viewOptions,\n\t\t\t});\n\t\t});\n\t});\n\t/**\n\t * Triggers a confirmation dialog to be displayed to the user.\n\t * The first parameter is an options object used in a new instance of Netx.Views.Confirmview.\n\t * All other arguments are passed to the 'args' property of that view, and are then passed\n\t * along with the confirmation event it generates.\n\t * @event module:app#app:confirm\n\t * @param {object} options Options\n\t */\n\tdispatcher.on('app:confirm', function (options) {\n\t\t// any other arguments we pass along to the view, which passes them to the event\n\t\tdispatcher.trigger(\n\t\t\t'app:confirm:show',\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\targs: _.rest(arguments),\n\t\t\t\t},\n\t\t\t\toptions,\n\t\t\t),\n\t\t);\n\t});\n\n\t/**\n\t * @event module:app#app:confirm:delete:show\n\t * @param {object} viewOptions View options\n\t */\n\tdispatcher.on('app:confirm:delete:show', function (viewOptions) {\n\t\timport(\n\t\t\t/* webpackChunkName: \"view-appConfirm\" */ './views/confirmDelete'\n\t\t).then((View) => {\n\t\t\tmodalViews.add({\n\t\t\t\tviewClass: View.default,\n\t\t\t\tshowActions: ['app:confirm:delete:show'],\n\t\t\t\tviewOptions: viewOptions,\n\t\t\t});\n\t\t});\n\t});\n\n\t/**\n\t * Triggers a delete confirmation dialog to be displayed to the user.\n\t * The first parameter is an options object used in a new instance of Netx.Views.Confirmview.\n\t * All other arguments are passed to the 'args' property of that view, and are then passed\n\t * along with the confirmation event it generates.\n\t * @event module:app#app:confirm:delete\n\t * @param {object} options Options\n\t * @fires module:app#app:confirm:delete:show\n\t */\n\tdispatcher.on('app:confirm:delete', function (options) {\n\t\t// any other arguments we pass along to the view, which passes them to the event\n\t\tdispatcher.trigger(\n\t\t\t'app:confirm:delete:show',\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\targs: _.rest(arguments),\n\t\t\t\t},\n\t\t\t\toptions,\n\t\t\t),\n\t\t);\n\t});\n\n\t/**\n\t * Confirmation for abandoning unsaved changes\n\t * @event module:app#app:confirmUnsaved\n\t * @param {object} opts Options for confirmation\n\t * @fires module:app#app:confirm\n\t * @listens module:app#app:confirmUnsaved:cancelled\n\t * @listens module:app#app:confirmUnsaved:confirmed\n\t */\n\tdispatcher.on('app:confirmUnsaved', function (opts) {\n\t\topts = opts || {};\n\n\t\tdispatcher.off('app:confirmUnsaved:confirmed');\n\t\t_.isFunction(opts.confirmed) &&\n\t\t\tdispatcher.on('app:confirmUnsaved:confirmed', opts.confirmed);\n\n\t\tdispatcher.off('app:confirmUnsaved:cancelled');\n\t\t_.isFunction(opts.cancelled) &&\n\t\t\tdispatcher.on('app:confirmUnsaved:cancelled', opts.cancelled);\n\n\t\tdispatcher.trigger('app:confirm', {\n\t\t\teventStr: 'app:confirmUnsaved',\n\t\t\tmessage: i18n.t('i18n.anyUnsavedChangesWillBeLostConfirm'),\n\t\t\toklabel: i18n.t('i18n.btnYes'),\n\t\t\tcancellabel: i18n.t('i18n.btnNo'),\n\t\t});\n\t});\n\n\t/**\n\t * Launch the contact dialog\n\t * @event module:app#app:contact:show\n\t * @param {object} viewOptions View options\n\t */\n\tdispatcher.on(\n\t\t'app:contact:show',\n\t\tfunction (viewOptions) {\n\t\t\timport(/* webpackChunkName: \"view-contact\" */ './views/contact').then(\n\t\t\t\t(View) => {\n\t\t\t\t\tmodalViews.add({\n\t\t\t\t\t\tviewClass: View.default,\n\t\t\t\t\t\tshowActions: ['app:contact:show'],\n\t\t\t\t\t\tviewOptions: viewOptions,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\twindow,\n\t);\n\t/**\n\t * @event module:app#app:contact\n\t * @fires module:app#app:contact:show\n\t */\n\tdispatcher.on('app:contact', function () {\n\t\tdispatcher.trigger('app:contact:show');\n\t});\n\t/**\n\t * @event module:app#app:contact:confirmed\n\t * @fires module:app#app:contact:error\n\t * @fires module:app#app:contact:success\n\t */\n\tdispatcher.on('app:contact:confirmed', function (values, view) {\n\t\tNetx.app.contact(values).then(\n\t\t\tfunction () {\n\t\t\t\tdispatcher.trigger('app:contact:success');\n\t\t\t},\n\t\t\tfunction (err) {\n\t\t\t\tdispatcher.trigger('app:contact:error', err);\n\t\t\t},\n\t\t);\n\t});\n\t/**\n\t * @event module:app#app:contact:success\n\t * @fires module:notification#notification\n\t */\n\tdispatcher.on(\n\t\t'app:contact:success',\n\t\tfunction () {\n\t\t\tdispatcher.trigger('notification', {\n\t\t\t\tmodule: 'app',\n\t\t\t\ttitle: i18n.t('i18n.email'),\n\t\t\t\tdescription: i18n.t('i18n.emailSent'),\n\t\t\t\ttype: 'success',\n\t\t\t});\n\t\t},\n\t\twindow,\n\t);\n\t/**\n\t * @event module:app#app:contact:error\n\t * @param {string} error Error string\n\t * @fires module:notification#notification\n\t */\n\tdispatcher.on(\n\t\t'app:contact:error',\n\t\tfunction (error) {\n\t\t\tdispatcher.trigger('notification', {\n\t\t\t\tmodule: 'app',\n\t\t\t\ttitle: i18n.t('i18n.email'),\n\t\t\t\tdescription: i18n.t('i18n.thereWasAnErrorSendingYourRequest'),\n\t\t\t\ttype: 'danger',\n\t\t\t});\n\t\t},\n\t\twindow,\n\t);\n\n\t/**\n\t * @event module:app#app:help\n\t * @fires module:app#app:help:error\n\t */\n\tdispatcher.on('app:help', function () {\n\t\tconst url = Netx.getPreference('header.helpUrl');\n\t\tif (url != null) {\n\t\t\t// eslint-disable-next-line security/detect-unsafe-regex\n\t\t\tconst regexp =\n\t\t\t\t/(ftp|http|https):\\/\\/(\\w+:{0,1}\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-/]))?/;\n\t\t\tif (regexp.test(url)) return spawnNewWindow(url);\n\n\t\t\tdispatcher.trigger(\n\t\t\t\t'app:help:error',\n\t\t\t\tnew Error(i18n.t('i18n.invalidHelpUrl', {url: url})),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tdispatcher.trigger(\n\t\t\t'app:help:error',\n\t\t\tnew Error(i18n.t('i18n.helpUrlNotSet')),\n\t\t);\n\t});\n\t/**\n\t * @event module:app#app:help:error\n\t * @param {string} error Error string\n\t * @fires module:app#app:alert\n\t */\n\tdispatcher.on('app:help:error', function (error) {\n\t\tdispatcher.trigger('app:alert', error, i18n.t('i18n.error'));\n\t});\n\n\t/**\n\t * @event module:app#app:progress:show\n\t * @param {object} viewOptions View options\n\t */\n\tdispatcher.on(\n\t\t'app:progress:show',\n\t\tfunction (viewOptions) {\n\t\t\tmodalViews.add({\n\t\t\t\tviewClass: AppProgressView,\n\t\t\t\tshowActions: ['app:progress:show'],\n\t\t\t\tviewOptions: viewOptions,\n\t\t\t});\n\t\t},\n\t\twindow,\n\t);\n\t/**\n\t * @event module:app#app:progress\n\t * @param {object} opts Progress options\n\t * @fires module:app#app:progress:show\n\t */\n\tdispatcher.on('app:progress', function (opts) {\n\t\t// Nothing fancy to do yet\n\t\tdispatcher.trigger('app:progress:show', opts);\n\t});\n\n\t/**\n\t * @event module:app#app:prompt:show\n\t * @param {object} viewOptions View options\n\t */\n\tdispatcher.on('app:prompt:show', function (viewOptions) {\n\t\timport(/* webpackChunkName: \"view-prompt\" */ './views/promptView').then(\n\t\t\t(View) => {\n\t\t\t\tmodalViews.add({\n\t\t\t\t\tviewClass: View.default,\n\t\t\t\t\tshowActions: ['app:prompt:show'],\n\t\t\t\t\tviewOptions: viewOptions,\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t});\n\t/**\n\t * Triggers a prompt dialog to be displayed to the user.\n\t * The first parameter is an options object used in a new instance of Netx.Views.PromptView.\n\t * All other arguments are passed to the 'args' property of that view, and are then passed\n\t * along with the confirmation event it generates.\n\t * @event module:app#app:prompt\n\t * @fires module:app#app:prompt:show\n\t */\n\tdispatcher.on('app:prompt', function () {\n\t\t// our first argument is options for the ConfirmView\n\t\tvar opts = Array.prototype.shift.apply(arguments);\n\t\t// any other arguments we pass along to the view, which passes them to the event\n\t\tdispatcher.trigger(\n\t\t\t'app:prompt:show',\n\t\t\t_.extend({args: Array.prototype.slice.apply(arguments)}, opts),\n\t\t);\n\t});\n\n\t/**\n\t * @event module:app#app:reportProblem:show\n\t * @param {object} viewOptions View options\n\t */\n\tdispatcher.on(\n\t\t'app:reportProblem:show',\n\t\tfunction (viewOptions) {\n\t\t\timport(\n\t\t\t\t/* webpackChunkName: \"view-reportProblem\" */ './views/problemReportView'\n\t\t\t).then((View) => {\n\t\t\t\tmodalViews.add({\n\t\t\t\t\tviewClass: View.default,\n\t\t\t\t\tshowActions: ['app:reportProblem:show'],\n\t\t\t\t\tviewOptions: viewOptions,\n\t\t\t\t});\n\t\t\t});\n\t\t},\n\t\twindow,\n\t);\n\t/**\n\t * Prepare and launch the report a problem dialog\n\t * @event module:app#app:reportProblem\n\t * @fires module:app#app:reportProblem:show\n\t */\n\tdispatcher.on('app:reportProblem', function () {\n\t\tdispatcher.trigger('app:reportProblem:show', {\n\t\t\tmodel: Netx.app,\n\t\t});\n\t});\n\t/**\n\t * @event module:app#app:reportProblem:confirmed\n\t * @param {string} description Description of problem\n\t * @param {boolean} ccSelf CC reporter\n\t */\n\tdispatcher.on('app:reportProblem:confirmed', function (description, ccSelf) {\n\t\tNS.set({\n\t\t\tdescription: description,\n\t\t\tclientLogs: window.console.history.dump('all'),\n\t\t\tccSelf: ccSelf ? 'true' : 'false',\n\t\t});\n\n\t\tNS.complain().then(\n\t\t\tfunction () {\n\t\t\t\tdispatcher.trigger('app:reportProblem:success');\n\t\t\t},\n\t\t\tfunction (err) {\n\t\t\t\tdispatcher.trigger('app:reportProblem:error', err);\n\t\t\t},\n\t\t);\n\t});\n\t/**\n\t * @event module:app#app:reportProblem:error\n\t * @param {string} error Error string\n\t * @fires module:app#app:alert\n\t */\n\tdispatcher.on('app:reportProblem:error', function (error) {\n\t\tdispatcher.trigger('app:alert', error, i18n.t('i18n.error'));\n\t});\n\t/**\n\t * @event module:app#app:reportProblem:success\n\t * @fires module:notification#notification\n\t */\n\tdispatcher.on('app:reportProblem:success', function () {\n\t\tdispatcher.trigger('notification', {\n\t\t\tmodule: 'app',\n\t\t\ttitle: i18n.t('i18n.reportProblem'),\n\t\t\tdescription: i18n.t('i18n.yourInformationWasSent'),\n\t\t\ttype: 'success',\n\t\t});\n\t});\n\n\t//============================================\n\t//\tApp pager\n\t//============================================\n\t/**\n\t * Rewind to the first page of a selection\n\t * @event module:app#app:pager:firstPage\n\t * @param {Netx.Collection} Netx collection instance\n\t */\n\tdispatcher.on('app:pager:firstPage', function (pager, collection) {\n\t\tpager.firstPage();\n\t});\n\n\t/**\n\t * Forward to the last page of a selection\n\t * @event module:app#app:pager:lastPage\n\t * @param {Netx.Collection} Netx collection instance\n\t */\n\tdispatcher.on('app:pager:lastPage', function (pager, collection) {\n\t\tpager.lastPage();\n\t});\n\n\t/**\n\t * Fetch the previous page of a selection\n\t * @event module:app#app:pager:prevPage\n\t * @param {Netx.Collection} Netx collection instance\n\t */\n\tdispatcher.on('app:pager:prevPage', function (pager, collection) {\n\t\tpager.prevPage();\n\t});\n\n\t/**\n\t * Fetch the next page of a selection\n\t * @event module:app#app:pager:nextPage\n\t * @param {Netx.Collection} Netx collection instance\n\t */\n\tdispatcher.on('app:pager:nextPage', function (pager, collection) {\n\t\tpager.nextPage();\n\t});\n\n\t/**\n\t * Goto a specific page of a selection\n\t * @event module:app#app:pager:gotoPage\n\t * @param {Netx.Collection} Netx collection instance\n\t */\n\tdispatcher.on('app:pager:gotoPage', function (pager, collection, page) {\n\t\tpager.gotoPage(page);\n\t});\n\t//============================================\n\t//\t!App pager\n\t//============================================\n\n\t/**\n\t * Logic for status polling\n\t * @event module:app#app:pollBatchJob\n\t * @param {string} uuid UUID string\n\t * @param {event} event Event\n\t * @param {boolean} hasResult Batch task has result\n\t * @param {array} args Additional arguments to pass on (optional)\n\t * @fires module:app#app:pollBatchJob\n\t * @fires module:app#app:pollBatchJob:error\n\t * @fires module:app#app:pollBatchJob:messages\n\t * @fires module:app#app:pollBatchJob:success\n\t * @fires module:share#share:simpleDownload\n\t */\n\tdispatcher.on(\n\t\t'app:pollBatchJob',\n\t\tfunction (uuid, event, hasResult, args, pollInterval) {\n\t\t\tvar batchJob = batchJobs.get(uuid);\n\t\t\tif (!batchJob) {\n\t\t\t\tvar eventStrs = {};\n\t\t\t\tif (event) {\n\t\t\t\t\teventStrs[event] = args;\n\t\t\t\t}\n\t\t\t\tbatchJob = new BatchJobModel(\n\t\t\t\t\t{\n\t\t\t\t\t\tuuid: uuid,\n\t\t\t\t\t\targs: args || [],\n\t\t\t\t\t\thasResult: hasResult,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\teventStrs: eventStrs,\n\t\t\t\t\t\tpollInterval,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tbatchJobs.add(batchJob);\n\t\t\t} else {\n\t\t\t\tevent && batchJob.addEventStr(event, args);\n\t\t\t}\n\t\t},\n\t);\n\t/**\n\t * UI hander for batch job success:\n\t */\n\tdispatcher.on(\n\t\t'app:pollBatchJob:success',\n\t\tfunction (uuid, event, hasResult, args) {\n\t\t\t//Netx.views.batchJobView && Netx.views.batchJobView.hide();\n\t\t},\n\t);\n\n\t/**\n\t * UI hander for batch job error:\n\t */\n\tdispatcher.on('app:pollBatchJob:error', function (err) {});\n\t/**\n\t * Triggering app:stop will halt the application, log out the user and\n\t * reload the page. Triggered due to invalid session, expired session or logout.\n\t * @event module:app#app:stop\n\t */\n\tdispatcher.on('app:stop', function () {\n\t\tlegacyWebsocket.disconnect();\n\t\t// Force page to reload\n\t\t//\n\t\t// (If you pass true as the value of the forceGet param - location.reload(forceGet)\n\t\t// Page will reload from server instead of cache\n\t\t// For more info see - http://www.w3schools.com/jsref/met_loc_reload.asp)\n\t\t// HACK https://jira.netx.net/browse/DAM-6124\n\t\t_.defer(function () {\n\t\t\tif (window.location.href.match(/request\\/([0-9a-fA-F-]{36})/)) {\n\t\t\t\twindow.location.href = window.location.href.substr(\n\t\t\t\t\t0,\n\t\t\t\t\twindow.location.href.indexOf('#'),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tlocation.reload();\n\t\t\t}\n\t\t});\n\t});\n\t/**\n\t * Keep us logged in if we regained consciousness in time to click that button:\n\t * @event module:app#netx:session:timeout:confirmed\n\t */\n\tdispatcher.on('netx:session:timeout:confirmed', function () {\n\t\t$('body').removeClass('session-expiring');\n\t\tclearTimeout(session.finalCountdown);\n\t\tdelete session.finalCountdown;\n\t\tsession.tickle();\n\t});\n\t/**\n\t * When the session logout timer fires, we have only 60 seconds before our session times out!\n\t * Alert the user!\n\t * @event module:app#netx:session:timeoutWarning\n\t * @fires module:app#app:confirm\n\t */\n\tdispatcher.on('netx:session:timeoutWarning', function () {\n\t\t$('body').addClass('session-expiring');\n\t\tconsole.warn('Session timeout in 60 seconds.');\n\t\tdispatcher.trigger('app:confirm', {\n\t\t\teventStr: 'netx:session:timeout',\n\t\t\tmessage: i18n.t('i18n.yourSessionIsAboutToExpire'),\n\t\t\tyesLabel: i18n.t('i18n.keepMeLoggedIn'),\n\t\t\tnoLabel: '',\n\t\t\ttitle: i18n.t('i18n.timeoutWarning'),\n\t\t});\n\t\t// We're leaving together, but it's still farewell ...\n\t\tsession.finalCountdown = setTimeout(function () {\n\t\t\tdispatcher.trigger('session:expire');\n\t\t}, 60 * 1000); // sixty seconds!\n\t});\n\t/**\n\t * Handling session timeouts:\n\t *\n\t * The DAM cancels all sessions after a configurable period of time without\n\t * user activity. X7 keeps a session timer so we can warn the user if the\n\t * timeout is imminent. The timer is automatically reset on every API call.\n\t *\n\t * Prevent our client-side session timer from timing out during uploads,\n\t * which are not API calls, and can potentially take longer than the timeout period.\n\t * @event module:app#upload:progress\n\t */\n\tdispatcher.on('upload:progress', function () {\n\t\tsession.resetLogoutTimer();\n\t});\n\n\t/**\n\t * RPC catastrophic error count reset - DAM-3261\n\t * @event module:app#app:server:success\n\t */\n\tdispatcher.on('app:server:success', function () {\n\t\tNS.set({serverUnresponsiveCount: 0});\n\t});\n\t/**\n\t * RPC catastrophic error counting - DAM-3261\n\t * @event module:app#app:server:success\n\t * @fires module:app#app:alert\n\t */\n\tdispatcher.on('app:server:error', function () {\n\t\tvar count = NS.get('serverUnresponsiveCount') + 1;\n\t\tNS.set({serverUnresponsiveCount: count});\n\t\tif (count > 3) {\n\t\t\tdispatcher.trigger(\n\t\t\t\t'app:alert',\n\t\t\t\ti18n.t('i18n.serverNotAvailable', 'danger'),\n\t\t\t);\n\t\t}\n\t});\n\n\t/**\n\t * Install analytics\n\t * @event module:app#netx:analytics:start\n\t * @param {string} provider Provider name\n\t * @param {string} code Tracking code\n\t * @param {function} cb Callback\n\t */\n\tdispatcher.once('netx:analytics:start', function (provider, code, cb) {\n\t\t// Someday we can expand this to support multiple providers. But for now, it's all Google:\n\t\tif (!['google'].includes(provider)) {\n\t\t\tconsole.warn(`unsupported analytics provider ${provider}`);\n\t\t\treturn cb();\n\t\t}\n\n\t\timport(\n\t\t\t/* webpackChunkName: \"google-analytics\" */ '@netx/core/analytics/google'\n\t\t).then(({default: setupGoogleAnalytics}) => {\n\t\t\tsetupGoogleAnalytics(code);\n\t\t\tcb();\n\t\t});\n\t});\n\n\t/**\n\t * If the server version is incorrect, provide a warning.\n\t * @event module:app#app:serverVersionWarning\n\t * @fires module:app#app:confirm\n\t * @global\n\t */\n\tdispatcher.on(\n\t\t'app:serverVersionWarning',\n\t\tfunction (version, required_version) {\n\t\t\tdispatcher.trigger('app:confirm', {\n\t\t\t\ttitle: i18n.t('i18n.serverVersionWarningTitle'),\n\t\t\t\tmessage: i18n.t('i18n.serverVersionWarningMessage', {\n\t\t\t\t\tserver_version: version,\n\t\t\t\t\trequired_version: required_version,\n\t\t\t\t}),\n\t\t\t\t//\"This application requires DAM version \" + required_version + \", but this DAM is at version \" + version + '. If you continue, you may encouter compatability errors. You may prefer to use the Flex interface instead.',\n\t\t\t\tyesLabel: i18n.t('i18n.serverVersionWarningContinue'),\n\t\t\t\tnoLabel: i18n.t('i18n.serverVersionWarningCancel'),\n\t\t\t\teventStr: 'app:compatible',\n\t\t\t\tid: 'server-version-warning',\n\t\t\t});\n\t\t},\n\t);\n\n\t/**\n\t * Display a menu as a set of option tiles, using OptionTilesView\n\t *\n\t * @event module:app#app:showOptions\n\t * @param {Netx.Menu} menu\n\t * @param {mixed} payload Additional data to send to options view and its child views ( best as an object ); this\n\t * @param {string} viewKey A key for referencing the OptionTilesView (when triggering app:hideOptions); if not provided, the menu will be stringified as the key.\n\t * will be returned as an extra argument to the triggered action handler.\n\t * @see module:app#app:hideOptions\n\t */\n\tdispatcher.on('app:showOptions', function (options) {\n\t\tvar tileCollection = new OptionTilesCollection([], {\n\t\t\tmenu: options.menu,\n\t\t\tdata: options.data,\n\t\t});\n\t\tif (tileCollection.length) {\n\t\t\t// If there is only one option and we have a wrapper - just fire it off\n\t\t\t// If the action does not have a wrapper - there is not much that can be done since we do not know how to get the data to the event properly\n\t\t\tif (tileCollection.length === 1) {\n\t\t\t\tvar tileOption = tileCollection.at(0),\n\t\t\t\t\twrapper = tileOption && tileOption.get('wrapper');\n\t\t\t\tif (wrapper) {\n\t\t\t\t\treturn dispatcher.trigger.apply(\n\t\t\t\t\t\tdispatcher,\n\t\t\t\t\t\t[tileOption.get('action')].concat(\n\t\t\t\t\t\t\twrapper({data: tileOption.get('data')}),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\timport(\n\t\t\t\t/* webpackChunkName: \"view-optionTiles\" */ './views/optionTilesView'\n\t\t\t).then((View) => {\n\t\t\t\tmodalViews.add({\n\t\t\t\t\tviewClass: View.default,\n\t\t\t\t\tshowActions: ['app:showOptions'],\n\t\t\t\t\tviewOptions: _.extend({}, _.omit(options, 'menu'), {\n\t\t\t\t\t\tcollection: tileCollection,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn('No valid actions found in menu.');\n\t\t}\n\t});\n\n\n\t/**\n\t * app:start starts up the Netx skin/application\n\t * Show the app layer, create views, etc.\n\t * @event module:app#app:start\n\t * @fires module:app#app:started\n\t */\n\tdispatcher.on('app:start', function () {\n\t\t// Give any other `app:start` listener the ability to respond prior to calling `app:started`\n\t\t_.defer(function () {\n\t\t\t// Welcome to X7! Please click responsibly.\n\t\t\tdispatcher.trigger('app:started');\n\t\t});\n\t});\n\n\tlogger.silly('loading required modules...');\n\tdispatcher.on('app:load:modules', function (NS) {\n\t\tPromise.all([\n\t\t\timport(\n\t\t\t\t/* webpackMode: \"eager\"*/ /* webpackChunkName: \"app-module-dependencies\" */ '@netx/core-auth'\n\t\t\t),\n\t\t\timport(\n\t\t\t\t/* webpackMode: \"eager\"*/ /* webpackChunkName: \"app-module-dependencies\" */ '@netx/core-notification'\n\t\t\t),\n\t\t]).then((imports) => {\n\t\t\tlogger.silly('loaded required modules');\n\t\t\tconst [Auth, Notification] = imports;\n\n\t\t\t// Now initialize auth module\n\t\t\tdispatcher.trigger(\n\t\t\t\t'netx:load:module',\n\t\t\t\t[Auth.default, Notification.default],\n\t\t\t\t{\n\t\t\t\t\tinitialized() {\n\t\t\t\t\t\tlogger.silly('starting analytics...');\n\t\t\t\t\t\t// Setup analytics\n\t\t\t\t\t\tnew Analytics().then(() => {\n\t\t\t\t\t\t\tlogger.silly('initialized');\n\t\t\t\t\t\t\tdispatcher.trigger('app:extend', NS);\n\t\t\t\t\t\t\tdispatcher.trigger('app:initialized', NS);\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\t});\n\n\t//=================================\n\t//\t!EVENT LISTENERS\n\t//=================================\n\tlogger.silly('bootstrapping...');\n\t$.when.apply($, NS.bootstrap).then(function () {\n\t\tlogger.silly('bootstrapped');\n\t\tdelete NS.bootstrap;\n\t\tdispatcher.trigger('app:load:modules', NS);\n\t});\n});\n\nexport default {\n\tinitialize(opts) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tdispatcher.once('app:initialized', () => {\n\t\t\t\timport(\n\t\t\t\t\t/* webpackMode: \"eager\"*/ /* webpackChunkName: \"app-module-dependencies\" */ './routes'\n\t\t\t\t).then((routes) => {\n\t\t\t\t\tresolve(routes.default);\n\t\t\t\t});\n\t\t\t});\n\t\t\tdispatcher.trigger('app:init');\n\t\t});\n\t},\n};\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/passiveAlertView.html';\n\nimport appCustomConfig from '../config';\n\nimport {faTimes} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaTimes,\n});\n\nexport default class PassiveAlertView extends Base {\n\t/** @method */\n\tconstructor(opts = {}) {\n\t\topts.events = {\n\t\t\t'click [data-nx-control=\"close\"]': 'dismiss',\n\t\t\t'hover .hit': 'onHover',\n\t\t\t'mouseout .hit': 'onMouseOut',\n\t\t\t...opts.events,\n\t\t};\n\t\topts.icons = {...icons, ...opts.icons};\n\t\topts.id = opts.id || 'passive-alert';\n\t\topts.template = opts.template || Template;\n\n\t\tsuper(opts);\n\n\t\tthis.timer = null;\n\t}\n\n\t/** @override */\n\tbindModelEvents() {\n\t\tsuper.bindModelEvents();\n\n\t\treturn this.listenTo(this.model, 'change', this.render);\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\tthis.timer && clearTimeout(this.timer);\n\n\t\t$('body').scrollTop(0);\n\t\tthis.timer = setTimeout(this.dismiss, appCustomConfig.PASSIVE_ALERT_DELAY);\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `click` event\n\t */\n\tdismiss(e) {\n\t\t$('body').removeClass('passive-alert');\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `hover` event\n\t */\n\tonHover(e) {\n\t\tthis.timer && clearTimeout(this.timer);\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `mouse` event\n\t */\n\tonMouseOut(e) {\n\t\tif (e.clientY > 50) {\n\t\t\t// not close button\n\t\t\tthis.dismiss();\n\t\t}\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'PassiveAlertView';\n\t}\n}\n","/**\n * The app's main view entry point\n * Setup you interface here - all viewSpecs added to Netx.app.viewSpecs belong to this\n * view's viewCollection; these are your gallery views.\n * Anything you do in `setupViews` will occur on `app:start`\n * @class\n */\nimport Base from '@netx/core/lib/netx-multiView';\nimport Template from '../templates/appView.html';\n\nimport KeyEvents from '@netx/core/functionality/keyEvents';\n\nimport {isMobile} from '@netx/core/lib/underscore-netx';\nimport {session} from '@netx/core-auth/collections/singleton/session';\nimport {userProfile} from '@netx/core-user/collections/singletons/userProfile';\nimport {\n\tcurrentUserMeetsUserLevel,\n\tUserLevel,\n} from '@netx/core-user-next/utils/currentUserMeetsUserLevel';\n\nclass AppView extends Base {\n\t/**\n\t * @override\n\t * @listens module:app#app:started\n\t * @listens module:user#user:sort:type\n\t * @listens {@link Netx.Models.UserProfile#change:name1|change:name3|change:email}\n\t * @listens module:upload#upload:initialized\n\t */\n\tconstructor(opts = {}) {\n\t\topts.additionalViewClasses = opts.additionalViewClasses || 'gallery-view';\n\t\topts.childView = {\n\t\t\ttarget: '.nx-app-content',\n\t\t\tviewClass(model) {\n\t\t\t\treturn model.get('viewClass');\n\t\t\t},\n\t\t\t...opts.childView,\n\t\t};\n\t\topts.events = {\n\t\t\t'click .nx-logged-in-as-cancel': 'cancelLoggedInAs',\n\t\t\t...opts.events,\n\t\t};\n\t\topts.keyEvents = {\n\t\t\ta: {\n\t\t\t\tglobal: true,\n\t\t\t\tcommandKey: true,\n\t\t\t\texecute(e) {\n\t\t\t\t\t/**\n\t\t\t\t\t * Fires eveytime the `a` key is pressed in conjuction with meta/ctrl key\n\t\t\t\t\t * @event key:selectAll\n\t\t\t\t\t * @global\n\t\t\t\t\t */\n\t\t\t\t\tdispatcher.trigger('key:selectAll');\n\n\t\t\t\t\t// Prevent\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t},\n\t\t\tescape: {\n\t\t\t\tglobal: true,\n\t\t\t\texecute(e) {\n\t\t\t\t\t/**\n\t\t\t\t\t * Fires eveytime the escape key is pressed\n\t\t\t\t\t * @event key:escape\n\t\t\t\t\t * @global\n\t\t\t\t\t */\n\t\t\t\t\tdispatcher.trigger('key:escape');\n\t\t\t\t},\n\t\t\t},\n\t\t\t...opts.keyEvents,\n\t\t};\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\t// Debounced methods\n\t\tthis.resize = _.throttle(this.resize, 16.666, true);\n\t\tthis.userUpdated = _.debounce(this.userUpdated, 50);\n\n\t\t// Hey, listen!\n\t\tthis\n\t\t\t// The app is ready and we know the state of the user\n\t\t\t.listenTo(dispatcher, 'app:ready', this.appReady)\n\t\t\t// Required modules are now available - let's fire up the main views\n\t\t\t.listenTo(dispatcher, 'app:started', this.appStarted)\n\t\t\t.listenTo(dispatcher, 'routed', this.setBodyClasses)\n\t\t\t.listenTo(dispatcher, 'user:sort:type', this.userSorted)\n\t\t\t.listenTo(\n\t\t\t\tuserProfile,\n\t\t\t\t'change:name1 change:name3 change:email',\n\t\t\t\tthis.userUpdated,\n\t\t\t);\n\n\t\t//uploadAssetsStore.subscribe(_.bind(this.uploadStateChanged, this));\n\n\t\t// Document listeners\n\t\t$(document)\n\t\t\t// Listen for files being dragged into the app\n\t\t\t.on('dragenter.nxApp', _.bind(this.dragEnter, this))\n\t\t\t// Conversely, listen for when user drags the files back out of the app\n\t\t\t.on('dragleave.nxApp', _.bind(this.dragLeave, this));\n\n\t\t// Drag variables\n\t\t// Track drag enters (dragleave/drageenter are notorious bubblers)\n\t\tthis.dragsEntered = 0;\n\t\tthis.hasDragEntered = false;\n\n\t\tthis.isMainApp = true;\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tthis.Plugins.Destroy('resizeListener');\n\n\t\tsuper.preRender();\n\n\t\t// Additional template vars\n\t\t_.extend(this.templateVars, {\n\t\t\tauthenticated: session.authenticated(),\n\t\t\tisMobile: isMobile(),\n\t\t\tmainApp: this.isMainApp,\n\t\t\tuser: userProfile.attributes,\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Cache\n\t\tthis.$body = $('body');\n\t\tthis.$html = $('html');\n\t\tthis.$document = $(document);\n\n\t\tthis.$content = this.$('#content');\n\t\tthis.$footer = this.$('#footer');\n\t\tthis.$fullScreen = this.$('.nx-app-fullscreen');\n\t\tthis.$header = this.$('#header');\n\t\tthis.$loggedInAs = this.$('.nx-logged-in-as');\n\t\tthis.$loggedInAsUser = this.$('.nx-logged-in-as-user');\n\n\t\t// Initialize resize listener plugin\n\t\tthis.Plugins.Initialize('resizeListener', this.$content);\n\n\t\t// user may be already set, need to trigger\n\t\tthis.userUpdated();\n\t}\n\n\t/** @override */\n\tremove() {\n\t\t// I know that when this view gets remvoed the app is removing itself\n\t\t// But better to clear all set events just in case\n\t\t$(document).off('.nxApp');\n\n\t\tsuper.remove();\n\t}\n\n\t/** @override */\n\tbeforeShowView(view) {\n\t\t// Before we attempt to show anything else in the gallery - we send everything back home that didn't originally belong to our `viewCollection`\n\t\tconst viewSpec = view.viewSpec;\n\t\tthis.viewCollection.each((m) => {\n\t\t\tm && viewSpec && m.cid !== viewSpec.cid && m.switchBack();\n\t\t}, this);\n\n\t\treturn super.beforeShowView(view);\n\t}\n\n\t/** @override */\n\tviewAfterHidden(view) {\n\t\t// If this was not part of our `viewCollection` originally - send back\n\t\t!view.viewSpec.isMyOriginalCollection(this.viewCollection) &&\n\t\t\tview.viewSpec.switchBack();\n\n\t\tsuper.viewAfterHidden(view);\n\t}\n\n\t/** @method */\n\tappReady() {\n\t\tthis.isMainApp = session.getToken() ? true : false;\n\t\tthis.render();\n\t}\n\n\t/** @method */\n\tappStarted() {\n\t\t// Can we drag to upload?\n\t\tthis.dragEnabled =\n\t\t\t!_.isUndefined(session.getToken()) ||\n\t\t\tcurrentUserMeetsUserLevel(UserLevel.IMPORTER);\n\n\t\tthis.setupViews();\n\n\t\t// For when hash changes due to us routing quietly in places\n\t\tthis.listenTo(dispatcher, 'hash:changed', this.setBodyClasses);\n\t}\n\n\t/**\n\t * Cancel 'logged in as'\n\t * @method\n\t * @param {event} e Click event\n\t */\n\tcancelLoggedInAs(e) {\n\t\t// Just reload the app\n\t\tlocation.reload();\n\t}\n\n\t/**\n\t * @method\n\t * @return {boolean} Can upload\n\t */\n\tcanUpload() {\n\t\tif (currentUserMeetsUserLevel(UserLevel.PRODUCER)) {\n\t\t\t// && window.location.hash.includes('category/')) {\n\t\t\tif (Netx.category.current.id !== userProfile.get('category')) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn !this.$body.hasClass('system-page');\n\t}\n\n\t/**\n\t * Bubbling, man\n\t * User has dragged files into the app\n\t * @method\n\t * @param {event} e Dragenter event\n\t */\n\tdragEnter(e) {\n\t\t// Drag must be enabled and we must not already be dragging into the app\n\t\tif (this.dragEnabled && this.canUpload()) {\n\t\t\tif (this.dragsEntered < 0) {\n\t\t\t\tthis.dragsEntered = 0;\n\t\t\t}\n\t\t\t// Thanks jQuery!\n\t\t\tvar dataTransferTypes =\n\t\t\t\te &&\n\t\t\t\te.originalEvent &&\n\t\t\t\te.originalEvent.dataTransfer &&\n\t\t\t\te.originalEvent.dataTransfer.types;\n\t\t\t// We must have a dataTransfer object and a property of 'types' on that object\n\t\t\t// We must not already be uploading files\n\t\t\t// We also support themes preventing the drag enter via `this.dragEntered()` by passing a boolean back\n\t\t\tif (\n\t\t\t\tdataTransferTypes &&\n\t\t\t\t_.indexOf(dataTransferTypes, 'Files') > -1 &&\n\t\t\t\t//!Netx.upload.get('uploading') &&\n\t\t\t\tthis.dragEntered()\n\t\t\t) {\n\t\t\t\tthis.dragsEntered++;\n\t\t\t\tthis.hasDragEntered = true;\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopImmediatePropagation();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e Dragenter event\n\t * @return {boolean} Trigger drag enter\n\t */\n\tdragEntered(e) {\n\t\tif (!this.canUpload()) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.$body.addClass('files-dragging');\n\t\treturn true;\n\t}\n\n\t/**\n\t * Bubbling, man\n\t * @method\n\t * @param {event} e `dragleave` event\n\t */\n\tdragLeave(e) {\n\t\t// Nothing to do\n\t\tif (!this.hasDragEntered) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Count down\n\t\tthis.dragsEntered--;\n\t\t// We have actually left the app!\n\t\tthis.dragsEntered <= 0 && this.dragLeft();\n\t}\n\n\t/** @method */\n\tdragLeft() {\n\t\t// Stop listening\n\t\tthis.$document.off('dragleave.nx');\n\t\tthis.dragsEntered = 0;\n\t\tthis.hasDragEntered = false;\n\t\tthis.$body.removeClass('files-dragging');\n\t}\n\n\t/**\n\t * Content resized\n\t * @method\n\t * @param {event} e `resize` event\n\t */\n\tresize(e) {\n\t\tconst el = this.$content[0];\n\t\tconst width = el.clientWidth;\n\t\tconst classList = el.classList;\n\t\tclassList.toggle('size-small', width <= 640);\n\t\tclassList.toggle('size-medium', width > 640 && width < 1008);\n\t\tclassList.toggle('size-large', width >= 1008);\n\t}\n\n\t/**\n\t * After body classes have been (re)set\n\t * @param {string[]} bodyClasses\n\t */\n\tonBodyClassesSet(bodyClasses) {\n\t\t// override me\n\t}\n\n\t/**\n\t * When routed we can set appropriate body classes to reflect our route\n\t * @method\n\t */\n\tsetBodyClasses() {\n\t\t// On the off chance we have not rendered before a route is fired\n\t\tthis.rendered.then(() => {\n\t\t\tconst hash = window.location.hash;\n\t\t\tconst slash = hash.indexOf('/');\n\t\t\tconst base = hash.substr(1, (slash > -1 ? slash : hash.length) - 1);\n\t\t\tlet remains = hash.substr((slash > -1 ? slash : 0) + 1);\n\t\t\t// We do not care about ids\n\t\t\tremains = remains.replace(/\\d+/g, '');\n\t\t\t// Cehck we didn't leave any slashes at beginning or end after removing ids\n\t\t\tif (remains.substr(0, 1) == '/') {\n\t\t\t\tremains = remains.substr(1);\n\t\t\t}\n\t\t\tif (remains.substr(remains.length - 1, 1) == '/') {\n\t\t\t\tremains = remains.substr(0, remains.length - 1);\n\t\t\t}\n\t\t\t// Remove all classes we added ending in '-page'\n\t\t\tthis.$body.removeClass((index, css) => {\n\t\t\t\t// We want to remove all classes matching '*-page'\n\t\t\t\treturn (css.match(/\\S+-page/g) || []).join(' ');\n\t\t\t});\n\n\t\t\tlet bodyClasses = [];\n\n\t\t\tif (base) {\n\t\t\t\t// Get some specifics\n\t\t\t\tif (hash.includes('search/advanced')) {\n\t\t\t\t\tbodyClasses.push('search-advanced-page');\n\t\t\t\t} else if (hash.includes('search/basic')) {\n\t\t\t\t\tbodyClasses.push('search-basic-page');\n\t\t\t\t} else if (remains && (remains != base || slash > -1)) {\n\t\t\t\t\tremains = remains.replace(/\\//g, '-');\n\t\t\t\t\tbodyClasses.push(`${base}-${remains}-page`);\n\t\t\t\t}\n\t\t\t\t// Standard based on hash base\n\t\t\t\tbodyClasses.push(`${base}-page`);\n\t\t\t}\n\n\t\t\tthis.$body.addClass(bodyClasses.join(' '));\n\n\t\t\tthis.onBodyClassesSet(bodyClasses);\n\t\t});\n\t}\n\n\t/**\n\t * Setup your additonal UI pieces\n\t * Override me in your theme\n\t * @method\n\t * @example\n\t * var Views = Netx.Views;\n\t *\n\t * // HEADER\n\t * this.headerView = this.addSubView( new Views.HeaderView( {\n\t * model : this.model,\n\t * el : this.$header\n\t * } ).render() );\n\t *\n\t * // SIDEBAR NAV\n\t * this.sidebarNavView = this.addSubView( new Views.SideBarView( {\n\t * el: this.$sidebarNav\n\t * } ).render() );\n\t *\n\t * // CART BAR\n\t * this.cartBarView = this.addSubView( new Views.CartActionsBarView( {\n\t * collection : Netx.cart.current,\n\t * el : this.$cartBar\n\t * } ).render() );\n\t *\n\t * // NOTIFICATIONS\n\t * this.notifications = this.addSubView( new Netx.Views.NotificationAlertsView( {\n\t * el : this.$notifications,\n\t * collection : Netx.notification.notifications\n\t * } ).render() );\n\t *\n\t * // Show initial views\n\t * this.sidebarNavView.show();\n\t * this.headerView.show();\n\t * this.cartBarView.show();\n\t * this.notifications.show();\n\t */\n\tsetupViews() {\n\t\t// Setup theme views here\n\t\tconsole.warn(\n\t\t\t'You should have overriden Netx.Views.AppView.prototype.setupViews in your theme.',\n\t\t);\n\t}\n\n\t/**\n\t * The asset upload state has changed\n\t * @method\n\t */\n\tuploadStateChanged(state) {\n\t\tthis.$body.toggleClass('uploading', state.inProgress);\n\t}\n\n\t/**\n\t * @method\n\t */\n\tuserSorted() {\n\t\t//\n\t}\n\n\t/** @method */\n\tuserUpdated() {\n\t\tif (!this.$loggedInAsUser || !this.$loggedInAsUser[0]) return;\n\n\t\t// Update user name\n\t\tthis.$loggedInAsUser[0].innerText = `${userProfile.get(\n\t\t\t'name1',\n\t\t)} ${userProfile.get('name3')} (${userProfile.get('email')})`;\n\t\t// Show/hide\n\t\tthis.$loggedInAs.toggle(session.get('loggedInAsOtherUser'));\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AppView';\n\t}\n}\n\nKeyEvents(AppView);\n\nexport default AppView;\n","/**\n * This view draws an application-specific header, containing some basic controls: search, upload, system, cart, user\n * @class\n * @todo We'd like this to be an abstract container that any module can insert\n * action widgets into. For that, we'd need for an action or a context to be able\n * to specify a view to use here, and come up with some language of how to specify\n * the widget areas (left/right/?) and order of display.\n * @todo DAM-7637 - then we can take logged in logic out of here\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/headerView.html';\nimport {session} from '@netx/core-auth/collections/singleton/session';\n\nclass HeaderView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.className = opts.className || 'row-fluid';\n\t\topts.events = _.extend(\n\t\t\t{\n\t\t\t\t'click .edit': 'edit',\n\t\t\t\t'click .settings': 'settings',\n\t\t\t},\n\t\t\topts.events,\n\t\t);\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\t}\n\n\t/** @override */\n\tbindModelEvents() {\n\t\tsuper.bindModelEvents();\n\t\treturn this.listenTo(\n\t\t\tthis.model,\n\t\t\t'sync change',\n\t\t\t_.throttle(this.render, 50),\n\t\t);\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\n\t\t// Additional template vars\n\t\t_.extend(this.templateVars, {\n\t\t\tauthenticated: session.authenticated(),\n\t\t\tmainApp: session.getToken() ? true : false,\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\tif (session.authenticated() && !session.getToken()) {\n\t\t\tthis.renderSearchWidget();\n\t\t}\n\t}\n\n\t/** @method */\n\trenderSearchWidget() {\n\t\t// TODO: as Charles Barkley would say \"this is turible\"\n\t\t// This is because we are using setElement via providing an `el` property\n\t\tthis.removeSubView(this.searchWidget, true);\n\t\timport(\n\t\t\t/* webpackChunkName: \"view-searchWidget\" */ '@netx/core-search/views/searchWidgetView'\n\t\t).then((SearchWidgetView) => {\n\t\t\t// create & add search widget\n\t\t\tthis.searchWidget = this.addSubView(\n\t\t\t\tnew SearchWidgetView.default({\n\t\t\t\t\tel: '#header-search-widget',\n\t\t\t\t}).render(),\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @fires module:app#app:system\n\t */\n\tsettings() {\n\t\tdispatcher.trigger('app:system');\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'HeaderView';\n\t}\n}\n\nexport default HeaderView;\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\n\nimport ChildViews from '@netx/core/functionality/childViews';\n\nexport default class SharedResourcesView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\tsuper(opts);\n\n\t\t// Debounced/throttled methods\n\t\tthis.checkResults = _.debounce(this.checkResults, 50);\n\t}\n\n\t/** @override */\n\tbindCollectionEvents() {\n\t\tsuper.bindCollectionEvents();\n\t\treturn this.listenTo(this.collection, 'sync reset', this.debouncedRender);\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\tthis.addPagerView();\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'SharedResourcesView';\n\t}\n}\n\n// Functionality\nChildViews(SharedResourcesView);\n","/**\n * @class\n */\nimport Base from '@netx/core-share/views/sharedResourcesView';\nimport Template from '../templates/savedCartsView.html';\n\nimport ChildView from './savedCartView';\n\nexport default class SavedCartsView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.childView = {\n\t\t\tviewClass: ChildView,\n\t\t\t...opts.childView,\n\t\t};\n\t\topts.headerTitle = opts.headerTitle || i18n.t('i18n.savedCarts');\n\t\topts.id = opts.id || 'saved-carts-view';\n\t\topts.loadingClassObjects = opts.loadingClassObjects || ['collection'];\n\t\topts.loadingClassRemoveDelay = opts.loadingClassRemoveDelay || 500;\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\t// Debounced/throttled methods\n\t\tthis.checkResults = _.debounce(this.checkResults, 50);\n\t}\n\n\t/** @method */\n\thasAssets() {\n\t\treturn (\n\t\t\tthis.collection.length > 0 &&\n\t\t\t_.isUndefined(this.collection.findWhere({id: 0}))\n\t\t);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'SavedCartsView';\n\t}\n}\n","import Base from 'netxcore@netx/core-cart/views/savedCartsView';\n\nimport {faAngleRight} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaAngleRight,\n});\n\nexport default class SavedCartsView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.icons = {...icons, ...opts.icons};\n\t\tsuper(opts);\n\t}\n}\n","/**\n * @class\n */\nimport Base from '@netx/core-cart/views/savedCartView';\nimport Template from '../templates/savedCart_menuItem.html';\n\nimport {\n\tfaArrowCircleDown,\n\tfaExternalLinkAlt,\n\tfaInbox,\n\tfaShare,\n\tfaTrashAlt,\n} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaArrowCircleDown,\n\tfaExternalLinkAlt,\n\tfaInbox,\n\tfaShare,\n\tfaTrashAlt,\n});\n\nexport default class SavedCartMenuItem extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\tconst idx = opts.collection.indexOf(opts.model) + 1;\n\t\topts.attributes = {\n\t\t\ttabindex: '-1',\n\t\t\t// autofocus: idx === 1,\n\n\t\t\t...opts.attributes,\n\t\t};\n\t\topts.icons = {...icons, ...opts.icons};\n\t\topts.tagName = 'li';\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\t}\n\n\t/** @override */\n\tbindModelEvents() {\n\t\tsuper.bindModelEvents();\n\t\treturn this.listenTo(this.model, 'change:title', this.render);\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\n\t\t// Additonal tempalte vars\n\t\tObject.assign(this.templateVars, {\n\t\t\tid: this.model.id,\n\t\t});\n\t}\n}\n","/**\n * @class\n */\nimport Base from '@netx/core-cart/views/savedCartsView';\n\nimport ChildView from './savedCart_menuItem';\nimport Template from '../templates/savedCarts_menu.html';\n\nimport cmsConfig from '@netx/core-cms/config';\n\nimport MaterialMenus from '@netx/core/functionality/materialMenus';\n\nimport {faAngleRight, faInbox} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaAngleRight,\n\tfaInbox,\n});\n\nexport default class SavedCartsMenu extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.childView = {\n\t\t\tviewClass: ChildView,\n\t\t\tmaxItems: 10,\n\t\t\t...opts.childView,\n\t\t};\n\t\topts.icons = {...icons, ...opts.icons};\n\t\topts.template = opts.template || Template;\n\n\t\tsuper(opts);\n\n\t\tthis.listenTo(Netx.cart.current, 'sync add remove', this.updatedInboxCount);\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\tthis.$count = this.$('.asset-count');\n\n\t\t// Do some post update rituals\n\t\tthis.updatedInboxCount();\n\n\t\tthis.injectViewAllButton();\n\t}\n\t/**\n\t * @method\n\t * @param {event} e `keydown` event\n\t * It's not pretty, but\n\t * we want this to be listed with the saved cart options\n\t * so we don't have to manage accessibility\n\t * previously it was coded within the nx-childviews block, ordering issues\n\t *\n\t * todo: remove with react\n\t */\n\tinjectViewAllButton() {\n\t\tthis.$('#carts-dropdown-menu ul').append(\n\t\t\t`
  • \n\t\t\t\t\n\t\t\t\t\t${i18n.t('i18n.viewAll')}\n\t\t\t\t\t${icons.faAngleRight}\n\t\t\t\t\n\t\t\t
  • `,\n\t\t);\n\t}\n\n\t/**\n\t * Ok, so your cart count has just changed and maybe you want to do something with that besides updating the count-\n\t * well have I got a surprise for you. Well, not really a surprise as much as a method. You get it. We're cool.\n\t * @method\n\t */\n\tupdatedInboxCount() {\n\t\t// console.log( \"update count\", Netx.cart.current.assetCount() );\n\t\tconst count = Netx.cart.current.assetCount();\n\t\tif (count == null) return;\n\n\t\tthis.$count.html(count);\n\t\tconst parentEl = this.$count.parent();\n\t\t// We have a lot of assets\n\t\tif (count > cmsConfig.collections.maxNumberDisplay) {\n\t\t\tparentEl.addClass('much-assets');\n\t\t}\n\t\t// Yeah, not so much\n\t\telse {\n\t\t\tparentEl.removeClass('much-assets');\n\t\t}\n\t\t// Check if we have any assets in the cart\n\t\tif (!count) {\n\t\t\t// Makes our inbox-full inbox\n\t\t\tparentEl.removeClass('has-assets');\n\t\t} else {\n\t\t\t// Makes our inbox inbox-full\n\t\t\tparentEl.addClass('has-assets');\n\t\t}\n\t}\n\n\t/**\n\t * Since our collection relfects saved carts and not the current cart total\n\t * Do nothing\n\t * @override\n\t */\n\tupdateCount() {}\n}\n\nMaterialMenus(SavedCartsMenu);\n","/**\n * @class\n */\nimport Base from 'netxcore@netx/core-app/views/headerView';\nimport {isPublicUser} from '@netx/core-user-next/utils/isPublicUser';\nimport categoryConfig from '@netx/core-category/config';\nimport SavedCartsMenuView from '@netx/core-cart/views/savedCarts_menu';\nimport coreConfig from '@netx/core-next/config';\n\nimport {randomChars} from '@netx/core/utils/randomChars';\nimport {allSavedCarts} from '@netx/core-cart/singletons/savedCarts';\nimport {Menus} from '@netx/core/legacyMenuManager';\nimport {faFolder, faInbox, faPowerOff} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaFolder,\n\tfaInbox,\n\tfaPowerOff,\n});\n\nexport default class HeaderView extends Base {\n\t/** @method */\n\tconstructor(opts = {}) {\n\t\topts.events = _.extend({\n\t\t\t'click .edit': 'edit',\n\t\t\t'click .logout': 'logout',\n\t\t\t'click .settings': 'settings',\n\t\t\t'click [data-nx-control=\"category-nav\"]': 'toggleCategories',\n\t\t\t'click [data-nx-control=\"page-nav\"]': 'togglePages',\n\t\t\t'click .skip-to-content': 'skipToContent',\n\t\t\t'keydown .skip-to-content': 'skipToContentKeydown',\n\t\t});\n\t\topts.icons = {...icons, ...opts.icons};\n\t\tsuper(opts);\n\n\t\tthis.i18nCountStr = null;\n\n\t\tthis.listenTo(dispatcher, 'cms:pages:loaded', () => {\n\t\t\tthis.menuViews.headerMenu.menu = Menus.headerMenu;\n\t\t\tthis.render();\n\t\t});\n\n\t\tif (!isPublicUser()) {\n\t\t\tthis.savedCartsMenuView = this.addSubView(\n\t\t\t\tnew SavedCartsMenuView({\n\t\t\t\t\tcollection: allSavedCarts,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\t\tconst portal = Netx.cms.portal;\n\t\tconst portalTitle = portal.get('label');\n\t\tconst portalSlug = portal.get('path');\n\t\t// Additional template vars\n\t\tObject.assign(this.templateVars, {\n\t\t\tisPublicUser: isPublicUser(),\n\t\t\tlogoUrl: '/theme/' + portalSlug + '/logo?v=' + randomChars(5),\n\t\t\tlogoLabel: portalTitle + ' ' + i18n.t('i18n.logo'),\n\t\t\thomeRoute: coreConfig.HOME_ROUTE,\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Cache\n\t\tthis.$savedCarts = this.$('.nx-cart-menu');\n\n\t\tif (!isPublicUser()) {\n\t\t\tthis.$savedCarts.append(this.savedCartsMenuView.render().el);\n\t\t}\n\t}\n\n\t/** @method */\n\ttoggleCategories() {\n\t\t// initialize tree if category has yet to be routed to\n\t\tif (Netx.category.current.id == undefined) {\n\t\t\tNetx.category.current.set('categoryid', categoryConfig.categoryid);\n\t\t}\n\n\t\tconst b = $('body').toggleClass('category-nav');\n\t\t// console.log('toggle folders');\n\t\tif (b.hasClass('category-nav')) {\n\t\t\tb.removeClass('page-nav');\n\t\t}\n\t}\n\n\t/** @method */\n\ttogglePages() {\n\t\t// console.log('toggle pages');\n\t\tconst b = $('body').toggleClass('page-nav');\n\t\tif (b.hasClass('page-nav')) {\n\t\t\tb.removeClass('category-nav');\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * on enter or space keydown\n\t * pass event to skipToContent\n\t */\n\tskipToContentKeydown(e) {\n\t\tconst code = e.which;\n\t\t// space or enter\n\t\tif (code === 13 || code === 32) {\n\t\t\tthis.skipToContent(e);\n\t\t}\n\t}\n\t/**\n\t * @method\n\t * find something to focus on\n\t * in the interface\n\t */\n\tskipToContent(e) {\n\t\t// go to first asset\n\t\tlet $skipToHere = $(\n\t\t\t'.assets .asset:first-child .actions > .action',\n\t\t).first();\n\n\t\t// go to primary\n\t\tif ($skipToHere.length === 0 || $skipToHere.isHidden()) {\n\t\t\t$skipToHere = $('.skip-to-here-primary').first();\n\t\t}\n\n\t\t// go to secondary\n\t\tif ($skipToHere.length === 0 || $skipToHere.isHidden()) {\n\t\t\t$skipToHere = $('.skip-to-here').first();\n\t\t}\n\n\t\tif ($skipToHere.length > 0 && !$skipToHere.isHidden()) {\n\t\t\t$skipToHere.focus();\n\t\t} else {\n\t\t\t// console.log('no where to skip to');\n\t\t\tthis.$('#search-basic').focus();\n\t\t}\n\t}\n}\n","/**\n * @class\n */\nimport Base from 'netxcore@netx/core-app/views/appView';\n\nimport HeaderView from './headerView';\n\nimport {isMobile} from '@netx/core-next/utils/browser';\nimport {currentAsset} from '@netx/core-asset/collections/singleton/currentAsset';\nimport {session} from '@netx/core-auth/collections/singleton/session';\nimport {Menus} from '@netx/core/legacyMenuManager';\n\nimport {faTimes} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaTimes,\n});\n\nexport default class AppView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.icons = {...icons, ...opts.icons};\n\t\tsuper(opts);\n\n\t\t// Hey, listen!\n\t\t// search exact routes silently, still need to set body classes\n\t\tthis.listenTo(dispatcher, 'hash:changed', (hash) => {\n\t\t\tif (!hash.includes('search/exact')) return;\n\t\t\tthis.setBodyClasses();\n\t\t});\n\t}\n\n\t/** @override */\n\tbindEvents() {\n\t\tsuper.bindEvents();\n\n\t\tif (isMobile()) {\n\t\t\tif (!this.hammer) {\n\t\t\t\tthis.hammer = new Hammer(this.el);\n\t\t\t}\n\n\t\t\tthis.hammer.on('pan', this.hammerPan.bind(this));\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\tthis.$detailBar = this.$('[data-nx-control=\"asset-detail-bar\"]');\n\t\tthis.$cartBar = this.$('#cart-actions-bar');\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `pan` event\n\t */\n\thammerPan(e) {\n\t\tconst gesture = e.gesture || e;\n\t\tif (!isMobile() || _.isUndefined(gesture)) return;\n\n\t\tconst additionalEvent = gesture.additionalEvent;\n\n\t\tif (additionalEvent !== 'panright' && additionalEvent !== 'panleft') return;\n\t\tconst angle = gesture.angle;\n\t\tif (\n\t\t\tthis.$body.hasClass('page-nav') &&\n\t\t\tadditionalEvent === 'panright' &&\n\t\t\tangle > -15 &&\n\t\t\tangle < 15\n\t\t) {\n\t\t\tthis.$body.removeClass('page-nav');\n\t\t} else if (\n\t\t\tthis.$body.hasClass('category-nav') &&\n\t\t\tadditionalEvent === 'panleft' &&\n\t\t\t(angle < -165 || angle > 165)\n\t\t) {\n\t\t\tthis.$body.removeClass('category-nav');\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t */\n\tsetupViews() {\n\t\t// Not for token users\n\t\tif (session.getToken()) {\n\t\t\tBackbone.history.loadUrl();\n\t\t\treturn;\n\t\t}\n\n\t\t// we can not drag to upload\n\t\tthis.dragEnabled = false;\n\n\t\t// header\n\t\tthis.headerView = this.addSubView(\n\t\t\tnew HeaderView({\n\t\t\t\tmodel: this.model,\n\t\t\t\tel: this.$header,\n\t\t\t\tcollection: Netx.cart.current,\n\t\t\t}).render(),\n\t\t);\n\t\tthis.headerView.show();\n\n\t\tif (Modernizr.touch || window.innerWidth < 500) {\n\t\t\timport(\n\t\t\t\t/* webpackChunkName: \"categoryTreeNodesView\" */ '@netx/core-category/views/categoryTreeNodesView'\n\t\t\t).then((CategoryTreeNodesView) => {\n\t\t\t\t// MOBILE CATEGORY NAV\n\t\t\t\tthis.mobileCatTreeView = this.addSubView(\n\t\t\t\t\tnew CategoryTreeNodesView.default({\n\t\t\t\t\t\tcollection: Netx.category.tree,\n\t\t\t\t\t\tel: this.$('#mobile-category-tree'),\n\t\t\t\t\t}).render(),\n\t\t\t\t);\n\n\t\t\t\tthis.mobileCatTreeView.show();\n\t\t\t});\n\n\t\t\timport(\n\t\t\t\t/* webpackChunkName: \"post-login-appViews\" */ '@netx/core-asset/views/assetDetailActionsBar'\n\t\t\t).then((AssetDetailActionsBarView) => {\n\t\t\t\t// ASSET DETAIL ACTIONS BAR\n\t\t\t\tthis.detailBarView = this.addSubView(\n\t\t\t\t\tnew AssetDetailActionsBarView.default({\n\t\t\t\t\t\tmodule: 'app',\n\t\t\t\t\t\tmodel: currentAsset,\n\t\t\t\t\t\tel: this.$detailBar,\n\t\t\t\t\t}).render(),\n\t\t\t\t);\n\t\t\t\tthis.detailBarView.show();\n\t\t\t});\n\n\t\t\timport(\n\t\t\t\t/* webpackChunkName: \"post-login-appViews\" */ '@netx/core-app/views/mobilePageNav'\n\t\t\t).then((MobilePageNavView) => {\n\t\t\t\t// MOBILE PAGE NAV\n\t\t\t\tthis.mobilePageNavView = this.addSubView(\n\t\t\t\t\tnew MobilePageNavView.default({\n\t\t\t\t\t\tmenu: Menus.mobilePageMenu,\n\t\t\t\t\t\tel: this.$('[data-nx-control=\"pageNav\"]'),\n\t\t\t\t\t}).render(),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tthis.listenTo(dispatcher, 'cms:pages:loaded', () => {\n\t\t\t\tthis.mobilePageNavView.menu = Menus.mobilePageMenu;\n\t\t\t\tthis.mobilePageNavView.render();\n\t\t\t});\n\t\t}\n\n\t\timport(\n\t\t\t/* webpackChunkName: \"post-login-appViews\" */ '@netx/core-cart/views/cartActionsBarView'\n\t\t).then((CartActionsBarView) => {\n\t\t\t// CART BAR\n\t\t\tthis.cartBarView = this.addSubView(\n\t\t\t\tnew CartActionsBarView.default({\n\t\t\t\t\tcollection: Netx.cart.current,\n\t\t\t\t\tel: this.$cartBar,\n\t\t\t\t}).render(),\n\t\t\t);\n\t\t\tthis.cartBarView.show();\n\t\t});\n\t}\n}\n","export {default} from 'netxcore@netx/core-app/controller';\n\nimport {dispatcher} from '@netx/core-next/instance/dispatcher';\nimport CoreView from '@netx/core/lib/netx-view';\nimport CoreModel from '@netx/core/lib/netx-model';\nimport Modernizr from 'core-libs/modernizr/modernizr';\n\nimport LoadingViewTemplate from './templates/loadingView.html';\nimport PassiveAlertView from './views/passiveAlertView';\n\nimport customConfig from './config';\nimport {randomChars} from '@netx/core/utils/randomChars';\nimport AppView from './views/appView';\nimport {setGlobal} from '@netx/core-next/utils/setGlobal';\nimport {appViews} from '@netx/core-app/singletons/appViews';\nimport {fsViews} from '@netx/core-app/singletons/fsViews';\nimport {ready} from '@netx/core-next/whenReady';\n\nimport React from 'react';\nimport {createRoot} from 'react-dom/client';\nimport {\n\tModalManagerProvider,\n\tmodalManagerStore,\n} from '@netx/core-components/ModalManager';\nimport {QueryClientProvider} from '@tanstack/react-query';\nimport {queryClient} from '@netx/core-next/lib';\nimport Theme from '@netx/core-components/Theme';\nimport {DownloadServiceProvider} from '@netx/core-components/DownloadDialog';\n\n/**\n * @event module:app#app:init\n */\ndispatcher.once('app:init', function () {\n\t/////////////////////////////////////\n\t// REQUIRED TO LOAD OLD WORLD CODE\n\t/////////////////////////////////////\n\tconst appView = new AppView({\n\t\tel: '#' + customConfig.CONTAINER_ID,\n\t\tmodel: Netx.app,\n\t\tviewCollection: appViews,\n\t\tNS: Netx.app,\n\t});\n\n\t// TODO: move to lazy load and render at app:start true\n\tconst modalManagerEl = document.createElement('div');\n\tdocument.body.appendChild(modalManagerEl);\n\tconst modalManagerRoot = createRoot(modalManagerEl);\n\tmodalManagerRoot.render(\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t,\n\t);\n\n\tsetGlobal((Netx) => ({\n\t\tview: {\n\t\t\t...Netx.views,\n\t\t\tappView,\n\t\t},\n\t}));\n\n\tappView.render().show();\n\n\tdispatcher.off('app:ready', null, window);\n\tdispatcher.once('app:ready', function (start) {\n\t\tready().then(function () {\n\t\t\tdispatcher.trigger('app:loaded', start);\n\t\t\t// Should we start the app (authenticated)\n\t\t\tstart && dispatcher.trigger('app:start');\n\t\t});\n\t});\n\t/////////////////////////////////////\n\t// !REQUIRED TO LOAD OLD WORLD CODE\n\t/////////////////////////////////////\n\n\tdispatcher.off('app:load:modules');\n\tdispatcher.on('app:load:modules', function (NS) {\n\t\t// Promise.all([\n\t\t// \timport(\n\t\t// \t\t/* webpackMode: \"eager\"*/ /* webpackChunkName: \"app-module-dependencies\" */ '@netx/core-cms'\n\t\t// \t),\n\t\t// ]).then((imports) => {\n\t\t// \tconst [CMS] = imports;\n\n\t\t// \t// Now initialize auth module\n\t\t// \tdispatcher.trigger('netx:load:module', [CMS.default], {\n\t\t// \t\tinitialized() {\n\t\tPromise.all([\n\t\t\timport(\n\t\t\t\t/* webpackMode: \"eager\"*/ /* webpackChunkName: \"app-module-dependencies\" */ '@netx/core-auth'\n\t\t\t),\n\t\t\timport(\n\t\t\t\t/* webpackMode: \"eager\"*/ /* webpackChunkName: \"app-module-dependencies\" */ '@netx/core-notification'\n\t\t\t),\n\t\t]).then((imports) => {\n\t\t\tconst [Auth, Notification] = imports;\n\n\t\t\t// Now initialize auth module\n\t\t\tdispatcher.trigger(\n\t\t\t\t'netx:load:module',\n\t\t\t\t[Auth.default, Notification.default],\n\t\t\t\t{\n\t\t\t\t\tinitialized() {\n\t\t\t\t\t\timport(\n\t\t\t\t\t\t\t/* webpackMode: \"eager\"*/ /* webpackChunkName: \"app-module-dependencies\" */ '@netx/core-cms'\n\t\t\t\t\t\t).then((CMS) => {\n\t\t\t\t\t\t\tdispatcher.trigger('netx:load:module', [CMS.default], {\n\t\t\t\t\t\t\t\tinitialized() {\n\t\t\t\t\t\t\t\t\timport(\n\t\t\t\t\t\t\t\t\t\t/* webpackMode: \"eager\"*/ /* webpackChunkName: \"app-module-dependencies\" */ '@netx/core-auto-template'\n\t\t\t\t\t\t\t\t\t).then((AutoTemplate) => {\n\t\t\t\t\t\t\t\t\t\tdispatcher.trigger(\n\t\t\t\t\t\t\t\t\t\t\t'netx:load:module',\n\t\t\t\t\t\t\t\t\t\t\t[AutoTemplate.default],\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tinitialized() {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdispatcher.trigger('app:extend', NS);\n\t\t\t\t\t\t\t\t\t\t\t\t\tdispatcher.trigger('app:initialized', NS);\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t);\n\t\t\t// \t\t});\n\t\t\t// \t},\n\t\t\t// });\n\t\t});\n\t});\n});\n\n/**\n * @event module:netx#netx:load:module:pdfViewer\n * @param {object} opts Options\n * @fires module:netx#netx:load:module\n */\ndispatcher.on('netx:load:module:pdfViewer', function (opts, cb) {\n\timport(\n\t\t/* webpackChunkName: \"@netx/core-pdf-viewer\" */ '@netx/core-pdf-viewer'\n\t).then((PDFViewer) => {\n\t\tdispatcher.trigger('netx:load:deferred:module', PDFViewer.default, opts);\n\t});\n});\n\n/**\n * App Module Extensions\n * @event module:app#app:extend\n */\ndispatcher.once('app:extend', function (NS) {\n\t////////////////////////////\n\t// Wrapper manipulation\n\t////////////////////////////\n\n\tdispatcher.on('routed', function () {\n\t\t// Kills things (like dropdowns and the like)\n\t\tNS.$body.click();\n\t});\n\n\t////////////////////////////\n\t// Drag Events\n\t////////////////////////////\n\t// For the love of bubbling events\n\t// Prevent the browser from trying to interpret these things\n\tNS.$document\n\t\t.off('dragover')\n\t\t// Bubbles up from drop zones within\n\t\t.on('dragover', 'body', function (e) {\n\t\t\t// Prevent\n\t\t\te.preventDefault();\n\t\t\treturn false;\n\t\t})\n\t\t// Bubbles up from drop zones within\n\t\t.off('drop')\n\t\t.on('drop', 'body', function (e) {\n\t\t\t// Prevent\n\t\t\te.preventDefault();\n\t\t\treturn false;\n\t\t});\n\n\t//DAM-4150 - override FormValidation.i18n for dynamic message\n\tFormValidation.I18n = $.extend(true, FormValidation.I18n || {}, {\n\t\ten_US: {\n\t\t\tstringLength: {\n\t\t\t\tless: 'Please enter no more than %s character(s)',\n\t\t\t\t// this doesn't work\n\t\t\t\tless_plural: 'Please enter no more than %s characters',\n\t\t\t},\n\t\t},\n\t});\n\n\t/**\n\t * Displays a passive alert to the user\n\t * - overriding core to hook up dismiss button, manage a body class,\n\t * and stop the slomo fade out when PASSIVE_ALERT_DELAY is high\n\t * @event module:app#app:passiveAlert\n\t * @param {object} options Options\n\t */\n\tdispatcher.off('app:passiveAlert');\n\tdispatcher.on('app:passiveAlert', function (options) {\n\t\tconst defaults = {\n\t\t\tclassName: 'alert alert-success',\n\t\t\tmessage: 'An event of limited importance has occurred.',\n\t\t};\n\n\t\t// create passive alert model if it's not here yet.\n\t\tif (!Netx.app.passiveAlert) {\n\t\t\tNetx.app.passiveAlert = new CoreModel(defaults);\n\t\t}\n\n\t\t// create/insert passive alert view if it's not here yet.\n\t\tif (!Netx.views.passiveAlertView) {\n\t\t\tconst pav = (Netx.views.passiveAlertView = new PassiveAlertView({\n\t\t\t\tmodel: Netx.app.passiveAlert,\n\t\t\t}));\n\t\t\t$('body').append(pav.el);\n\t\t}\n\n\t\tNetx.app.passiveAlert.set(defaults);\n\t\t// set props of model to options (triggers render)\n\t\tif (_.isString(options)) {\n\t\t\t// just a string?\n\t\t\tNetx.app.passiveAlert.set({message: options});\n\t\t} else if (_.isObject(options)) {\n\t\t\t// a whole object?\n\t\t\tNetx.app.passiveAlert.set(options);\n\t\t}\n\n\t\t// show view\n\t\tNetx.views.passiveAlertView.$el.show(); // could be a fade in ...\n\t\t$('body').addClass('passive-alert');\n\t});\n\n\t/**\n\t * @event module:app#app:app:loading\n\t * @param {object} opts\n\t */\n\tdispatcher.on('app:loading', function (opts = {}) {\n\t\tdispatcher.trigger('app:loading:show', {\n\t\t\ttemplate: LoadingViewTemplate,\n\t\t\tmodel: new CoreModel({\n\t\t\t\tmessage: opts.message || '',\n\t\t\t}),\n\t\t});\n\t});\n\n\t/**\n\t * @event module:app#app:app:loading:show\n\t * @param {object} viewOptions options for the view\n\t */\n\tdispatcher.on(\n\t\t'app:loading:show',\n\t\tfunction (viewOptions) {\n\t\t\tfsViews.add({\n\t\t\t\tviewClass: CoreView,\n\t\t\t\tshowActions: ['app:token:loading:show'],\n\t\t\t\tviewOptions: viewOptions,\n\t\t\t});\n\t\t},\n\t\twindow,\n\t);\n\n\t/**\n\t * @event module:app#app:contact\n\t * @fires module:app#app:contact:show\n\t */\n\tdispatcher.off('app:contact');\n\tdispatcher.on('app:contact', function () {\n\t\tdispatcher.trigger('app:contact:show', {\n\t\t\tprompt: Netx.cms.portal.get('contactMessage'),\n\t\t});\n\t});\n}); // app:extend\n\ndispatcher.on('app:started', function () {\n\tvar portal = Netx.cms.portal;\n\t// toggle watermarking\n\t// TODO: move this to the component\n\tModernizr.addTest('watermark', function () {\n\t\treturn Netx.cms.portal.get('watermark') > 0;\n\t});\n\tif (portal.get('watermark') > 0) {\n\t\tvar url = `/theme/${portal.get('path')}/watermark?v=${randomChars(5)}`;\n\t\t$('head').append(\n\t\t\t``,\n\t\t);\n\t}\n\tif (!_.isUndefined(portal.get('watermarkPos'))) {\n\t\t$('html').addClass('watermark-' + portal.get('watermarkPos'));\n\t}\n\n\t$('#wrapper-wrapper').show();\n});\n","/**\n * App module\n * @module app/index\n */\n\nimport actions from './actions';\nimport menus from './menus';\nimport MenuView from '@netx/core-app/views/menuView';\nimport controller from './controller';\nimport {RegisterLegacyAction} from '@netx/core/legacyActionManager';\nimport {setGlobal} from '@netx/core-next/utils/setGlobal';\nimport {addMenus} from '@netx/core/legacyMenuManager';\n\n/**\n * @property {object} exports - Our module exports\n * @property {string} exports.namespace - Module namespace\n * @property {function} exports.initialize - Module initializer\n */\nexport default {\n\tnamespace: 'app',\n\tinitialize() {\n\t\tRegisterLegacyAction(actions);\n\n\t\taddMenus(menus);\n\n\t\tsetGlobal((Netx) => ({\n\t\t\tViews: {\n\t\t\t\t...Netx.Views,\n\t\t\t\tMenuView,\n\t\t\t},\n\t\t}));\n\n\t\treturn controller.initialize();\n\t},\n};\n","import {appRouter} from '@netx/core-next/instance/router';\nimport {getUserLevel} from '@netx/core-user-next/utils/getUserLevel';\nimport coreConfig from '@netx/core-next/config';\n\n/** @namespace */\n\nexport default {\n\t/**\n\t * Blank route ('') corresponds to no route at all.\n\t * The default behavior for the Netx url without a route is to show the top level category tree.\n\t * @namespace\n\t * @todo decouple?\n\t * @todo HTML-582 - Duplicating boilerplate code on behalf of Nike Foundation. Let's clean this up please.\n\t * @fires module:app#category:route:top\n\t * @listens module:app#auth:session:valid\n\t */\n\t''() {\n\t\tif (getUserLevel() > 0) {\n\t\t\t// TODO: isValid() returns a promise & will always evaluate TRUE; not what we want.\n\t\t\tif (coreConfig.HOME_ROUTE) {\n\t\t\t\tappRouter.home();\n\t\t\t} else {\n\t\t\t\tdispatcher.trigger('category:route:top');\n\t\t\t}\n\t\t} else {\n\t\t\t/** @event */\n\t\t\tdispatcher.on('auth:session:valid', function () {\n\t\t\t\tif (coreConfig.HOME_ROUTE) {\n\t\t\t\t\tappRouter.home();\n\t\t\t\t} else {\n\t\t\t\t\tdispatcher.trigger('category:route:top');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\t// External bundle\n\t'share/request(/:token)': () => window.location.reload(),\n\t'uploads/request(/:token)': () => window.location.reload(),\n\t// \"*action\":\tfunction(action){\n\t// \t// !! IMPORTANT !!\n\t// \t// DEVNOTE: @spence - This is the default method that is run\n\t// \t// when there is no matching route pattern. It is very important\n\t// \t// for proper functioning in certain situations where there may not\n\t// \t// be a valid session in play but we do have an access token.\n\t// \t// This route allows us to catch the route change and fire subsequent\n\t// \t// methods to identify and utilize the token value in the route.\n\t// }\n};\n","import routes from 'netxcore@netx/core-app/routes';\n\n// Deferred module routes\nObject.assign(routes, {\n\t'document(/*anything)'() {\n\t\tdispatcher.trigger('netx:load:module:pdfViewer', {loadUrl: true});\n\t},\n});\n\nexport default routes;\n","/**\n * View utilized by the {@link module:app#app:alert|app:alert} to display alerts to the user\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/alertView.html';\n\nclass AlertView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.events = _.extend(\n\t\t\t{\n\t\t\t\t'click [data-nx-control=\"dismiss\"]:first': 'hide',\n\t\t\t},\n\t\t\topts.events,\n\t\t);\n\t\topts.id = opts.id || _.uniqueId('alert-');\n\t\topts.modalOptions = _.extend(\n\t\t\t{\n\t\t\t\tblocking: true,\n\t\t\t},\n\t\t\topts.modalOptions,\n\t\t);\n\t\topts.removeOnHide = opts.removeOnHide !== false;\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\tthis.alertClass = opts.alertClass;\n\t\tthis.msg = opts.msg;\n\t\tthis.type = opts.type;\n\n\t\tif (this.model) {\n\t\t\tthis.headerTitle = this.model.get('type');\n\t\t}\n\t}\n\n\t/**\n\t * @static\n\t * @type {string}\n\t */\n\tstatic get __name__() {\n\t\treturn 'AlertView';\n\t}\n}\n\nexport default AlertView;\n","import Base from 'netxcore@netx/core-app/views/alertView';\n\nimport {faExclamationTriangle} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaExclamationTriangle,\n});\n\nexport default class AlertView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.icons = {...icons, ...opts.icons};\n\t\tsuper(opts);\n\t}\n}\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/appModalCrumbView.html';\n\nclass AppModalCrumbView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.template = Template;\n\t\tsuper(opts);\n\n\t\t// Related view\n\t\tthis.model.has('view')\n\t\t\t? this.addRelatedView()\n\t\t\t: this.listenToOnce(this.model, 'change:view', this.addRelatedView);\n\t}\n\n\t/** @override */\n\tbindModelEvents() {\n\t\tsuper.bindModelEvents();\n\t\treturn this.listenTo(this.model, 'change:active', this.toggleActive);\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\n\t\tconst modalOptions =\n\t\t\t(this.relatedView && this.relatedView.modalOptions) || {};\n\t\t// Additional template vars\n\t\tObject.assign(this.templateVars, {\n\t\t\taction: this.model.get('uniqueShowAction') || '',\n\t\t\tlabel:\n\t\t\t\tmodalOptions.crumbLabel ||\n\t\t\t\tthis.model.get('label') ||\n\t\t\t\tmodalOptions.headerTitle ||\n\t\t\t\t(this.relatedView && this.relatedView.headerTitle) ||\n\t\t\t\t'',\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Cache\n\t\tthis.$remove = this.$('.nx-action[data-action=\"app:remove:modalView\"]');\n\t\tthis.$title = this.$('.nx-title');\n\n\t\tif (this.relatedView) {\n\t\t\t// Check modal options\n\t\t\tvar modalOptions = this.relatedView.modalOptions || {};\n\t\t\tthis.$remove.toggle(modalOptions.blocking !== true);\n\t\t}\n\t}\n\n\t/**\n\t * Once our model has its view property,\n\t * remeber it at .relatedView, and use it to toggle our crumbs.\n\t * (.relatedView also used in theme override ...)\n\t * @method\n\t */\n\taddRelatedView() {\n\t\tthis.relatedView = this.model.get('view');\n\t\tvar modalOptions = this.relatedView.modalOptions || {};\n\t\tthis.$el.toggle(modalOptions.noCrumb !== true);\n\t}\n\n\t/** @method */\n\ttoggleActive() {\n\t\tthis.$el.toggleClass('active', this.model.get('active') === true);\n\t\t// Update title (it could have changed context)\n\t\tif (this.relatedView) {\n\t\t\tvar modalOpts = this.relatedView.modalOptions || {};\n\t\t\tthis.$title &&\n\t\t\t\tthis.$title.html(\n\t\t\t\t\tmodalOpts.crumbLabel ||\n\t\t\t\t\t\t_.escape(this.model.get('label')) ||\n\t\t\t\t\t\t_.escape(modalOpts.headerTitle) ||\n\t\t\t\t\t\t_.escape(this.relatedView.headerTitle),\n\t\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * @static\n\t * @type {string}\n\t */\n\tstatic get __name__() {\n\t\treturn 'AppModalCrumbView';\n\t}\n}\n\nexport default AppModalCrumbView;\n","/**\n * @class\n */\nimport Base from 'netxcore@netx/core-app/views/appModalCrumbView';\n\nimport {faTimes} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaTimes,\n});\n\nexport default class AppModalCrumbView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.icons = {...icons, ...opts.icons};\n\t\tsuper(opts);\n\t}\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\t\tthis.$el.addClass('primary-background primary-border');\n\t}\n}\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/appModalCrumbsView.html';\n\nimport ChildViews from '@netx/core/functionality/childViews';\n\nimport ChildView from './appModalCrumbView';\n\nclass AppModalCrumbsView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.childView = {\n\t\t\tviewClass: ChildView,\n\t\t\t// Edge case: this is a view that happens to use a viewCollection to simply populate it's children and not\n\t\t\t// to inherit everything from them. Rather than try and accomplish this solution somehow in addChildView\n\t\t\t// I figured it best to be handled in the views that are utilizing a viewCollection differently than say\n\t\t\t// a netx-multiView would - since these options get applied last (superceed all others) we just put back the\n\t\t\t// values we do not want to inherit from a viewSpec\n\t\t\toptions(model, opts) {\n\t\t\t\treturn {\n\t\t\t\t\ttagName: 'li',\n\t\t\t\t\tmodel: model,\n\t\t\t\t\tcollection: model.collection,\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\t'data-nx-control': 'crumb',\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t},\n\t\t\t...opts.childView,\n\t\t};\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\t}\n\n\t/** @override */\n\tbindCollectionEvents() {\n\t\tsuper.bindCollectionEvents();\n\n\t\tthis.rendered.then(() => {\n\t\t\tthis.listenTo(\n\t\t\t\tthis.collection,\n\t\t\t\t'add remove reset',\n\t\t\t\t_.debounce(this.crumbsChanged, 25),\n\t\t\t);\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/** @method */\n\tcheckMultipleCrumbs() {\n\t\tthis.el.classList.toggle('multiple-crumbs', this.collection.length > 1);\n\t}\n\n\t/** @method */\n\tcrumbsChanged() {\n\t\tthis.checkMultipleCrumbs();\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\tthis.checkMultipleCrumbs();\n\t}\n\n\t/**\n\t * @static\n\t * @type {string}\n\t */\n\tstatic get __name__() {\n\t\treturn 'AppModalCrumbsView';\n\t}\n}\n\n// Functionality\nChildViews(AppModalCrumbsView);\n\nexport default AppModalCrumbsView;\n","/**\n * The main modal view. Only one of me should exist in any interface. Otherwise, you might\n * be doing modals wrong ( stacked ).\n * @class\n */\nimport Base from '@netx/core/lib/netx-multiView';\nimport {appRouter, getPrefixedLogger} from '@netx/core-next/instance';\nimport Template from '../templates/appModalView.html';\nimport AppModalCrumbsView from './appModalCrumbsView';\nimport ConfirmView from './confirmView';\n\nconst logger = getPrefixedLogger('views/appFullScreenView');\n\nclass AppModalView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.attributes = _.extend(\n\t\t\t{\n\t\t\t\ttabindex: '-1',\n\t\t\t\trole: 'dialog',\n\t\t\t\t'aria-hidden': 'true',\n\t\t\t\t'aria-labelledby': 'app-modal',\n\t\t\t},\n\t\t\topts.attributes,\n\t\t);\n\t\topts.childView = _.extend(\n\t\t\t{\n\t\t\t\tviewClass(model) {\n\t\t\t\t\treturn model.get('viewClass');\n\t\t\t\t},\n\t\t\t\ttarget: '[data-nx-control=\"modal-content\"]',\n\t\t\t},\n\t\t\topts.childView,\n\t\t);\n\t\topts.className = opts.className || 'modal fade';\n\t\topts.emptyOnHide = opts.emptyOnHide !== false;\n\t\topts.events = _.extend(\n\t\t\t{\n\t\t\t\t'click [data-nx-control=\"close\"]:first': 'close',\n\t\t\t},\n\t\t\topts.events,\n\t\t);\n\t\topts.hideOnEmpty = opts.hideOnEmpty !== false;\n\t\topts.id = opts.id || 'app-modal';\n\t\topts.removeOnHide = false;\n\t\topts.modalOptions = _.extend(\n\t\t\t{\n\t\t\t\tsize: 'md',\n\t\t\t},\n\t\t\topts.modalOptions,\n\t\t);\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(dispatcher, 'routed', this.hideIfWeShould);\n\t\t// A new child view was added - check if it was caused by a route\n\t\tthis.listenTo(this, 'addedNewChildView', (view) => {\n\t\t\tif (view.viewSpec.isMyOriginalCollection(this.viewCollection)) {\n\t\t\t\t// Check if the view was a result of routing\n\t\t\t\tif (view.isRouted !== false && !(view instanceof ConfirmView)) {\n\t\t\t\t\t// view.isRouted = true;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Crumbs\n\t\tthis.modalCrumbsView = this.addSubView(\n\t\t\tnew AppModalCrumbsView({\n\t\t\t\tcollection: this.viewCollection,\n\t\t\t}),\n\t\t);\n\n\t\tthis.activeViewClassNames = '';\n\t}\n\n\t/**\n\t * @override\n\t * @param {event} e Keyup event\n\t */\n\tescape(e) {\n\t\t!this.blocking && this.hide();\n\t}\n\n\t/**\n\t * This is where the any animation should happen\n\t * When the callback is executed the app considers this view as good as hidden\n\t * Overriding for bootstrap modal behavior\n\t * @override\n\t * @param {function} cb Callback\n\t */\n\tbeforeHidden(cb) {\n\t\t// We do not call super\n\t\tif (this.emptyOnHide) {\n\t\t\tlet view;\n\t\t\tthis.viewCollection.each((viewSpec) => {\n\t\t\t\tview = viewSpec.get('view');\n\t\t\t\tview && _.isFunction(view.cancel) && view.cancel();\n\t\t\t});\n\t\t\t// Always use set to empty\n\t\t\tthis.viewCollection.set([]);\n\t\t}\n\n\t\tthis.$backdrop && this.$backdrop.removeClass('in');\n\n\t\t_.delay(() => {\n\t\t\tthis.$backdrop && this.$backdrop.remove();\n\t\t\tthis.$backdrop = null;\n\t\t\t// Trigger animation\n\t\t\tthis.$el.removeClass('in').attr('aria-hidden', true);\n\t\t\t// Give css animations time to finish\n\t\t\t_.delay(() => {\n\t\t\t\tthis.$body && this.$body.removeClass('modal-open');\n\t\t\t\t// Reset scrollbar\n\t\t\t\tthis.$body.css('padding-right', '');\n\t\t\t\tthis.$el.hide();\n\t\t\t\tcb.call(self);\n\t\t\t}, 300);\n\t\t}, 150);\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Cache\n\t\tthis.$crumbs = this.$('[data-nx-control=\"crumbs\"]');\n\t\tthis.$title = this.$('[data-nx-control=\"modal-title\"]');\n\t\tthis.$dialog = this.$('.modal-dialog');\n\t\tthis.$close = this.$('[data-nx-control=\"close\"]');\n\t\tthis.$content = this.$('[data-nx-control=\"modal-content\"]');\n\t\tthis.$body = $('body');\n\n\t\t// Set default size\n\t\tthis.$dialog\n\t\t\t.removeClass('modal-md modal-sm modal-lg')\n\t\t\t.addClass(`modal-${this.modalOptions.size}`);\n\n\t\t// Crumbs\n\t\tthis.modalCrumbsView.setElement(this.$crumbs).render();\n\t}\n\n\t/**\n\t * This is where the any animation should happen\n\t * When the callback is executed the app considers this view as good as shown\n\t * Overriding for bootstrap modal behavior\n\t * @override\n\t * @param {function} cb Callback\n\t */\n\tbeforeShown(cb) {\n\t\tif (this.$backdrop || !this.viewCollection.length) return;\n\n\t\t// Create and append backdrop\n\t\tthis.$backdrop = $('
    ', {\n\t\t\tclass: 'modal-backdrop fade',\n\t\t});\n\t\tthis.$backdrop.appendTo(this.$body);\n\t\tthis.$body.addClass('modal-open');\n\t\t// Set scrollbar\n\t\tconst bodyPad = parseInt(this.$body.css('padding-right') || 0, 10);\n\t\tif (this.scrollbarWidth) {\n\t\t\tthis.$body.css('padding-right', bodyPad + this.scrollbarWidth);\n\t\t}\n\t\tthis.$backdrop.appendTo(this.$body);\n\t\t// Force reflow\n\t\tthis.$backdrop[0].offsetWidth;\n\t\tthis.$backdrop.addClass('in');\n\n\t\t_.delay(() => {\n\t\t\t// Modal\n\t\t\tthis.$el.show().scrollTop(0);\n\t\t\t// Force reflow\n\t\t\tthis.$el[0].offsetWidth;\n\t\t\tthis.$el.addClass('in').attr('aria-hidden', false);\n\t\t\tthis.$el.trigger('focus');\n\t\t\t_.delay(_.bind(cb, self), 300);\n\t\t}, 150);\n\t}\n\n\t/**\n\t * Show is about to start\n\t * At this point no animation or actual showing [should] have taken place\n\t * @override\n\t * @listens Netx.View#showing\n\t */\n\tonShowing() {\n\t\tif (this.viewCollection.length === 0) {\n\t\t\tthis.hide();\n\t\t\treturn;\n\t\t}\n\n\t\tsuper.onShowing();\n\t\tthis.hiddenByRoute = false;\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} newRoute New route\n\t * @param {string} oldRoute Old route\n\t */\n\thideIfWeShould(newRoute, oldRoute) {\n\t\tif (!this.hiddenByRoute && !this.hiding && !this.showing) {\n\t\t\t// We will need to modify this as time goes on and we understand the complexity of\n\t\t\t// the workflow for wizards and such\n\t\t\tconst activeView = this.getActiveView();\n\t\t\tif (this.viewCollection.length > 1) {\n\t\t\t\tif (newRoute !== oldRoute) {\n\t\t\t\t\tthis.viewCollection.each((viewSpec) => {\n\t\t\t\t\t\tconst view = viewSpec.get('view');\n\t\t\t\t\t\tif (activeView && view.cid === activeView.cid) return;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tview &&\n\t\t\t\t\t\t\tview.isRouted &&\n\t\t\t\t\t\t\t!_.isUndefined(view.routeMatch) &&\n\t\t\t\t\t\t\t!_.isNull(oldRoute.match(view.routeMatch))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tview.hasFunctionality('form') &&\n\t\t\t\t\t\t\t\tviewSpec.isMyOriginalCollection(this.viewCollection)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tview.cancel();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tview.hide();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\tthis.isShown &&\n\t\t\t\t!this.hiding &&\n\t\t\t\t!_.isUndefined(activeView) &&\n\t\t\t\tactiveView.isRouted\n\t\t\t) {\n\t\t\t\t// if we should not be showing on this route\n\t\t\t\tif (!activeView.isMyRoute(window.location.hash.slice(1))) {\n\t\t\t\t\tthis.hiddenByRoute = true;\n\t\t\t\t\t// To save people from themselves we always have a slight hide delay\n\t\t\t\t\t// Meaning the view must live for at least 500ms\n\t\t\t\t\t$.when(activeView.hideDelayed ? activeView.hideDelayed : true).then(\n\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t_.delay(() => {\n\t\t\t\t\t\t\t\t// If we are the only view - just hide the modal and not go through\n\t\t\t\t\t\t\t\t// the hiding of the view followed by the modal\n\t\t\t\t\t\t\t\tif (!this.hiding && this.viewCollection.length === 1) {\n\t\t\t\t\t\t\t\t\tactiveView.$el.fadeOut('fast');\n\t\t\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tactiveView.viewSpec.isMyOriginalCollection(\n\t\t\t\t\t\t\t\t\t\t\tthis.viewCollection,\n\t\t\t\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t\t\t\tactiveView.hasFunctionality('form')\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tactiveView.cancel();\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tactiveView.hide();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 20);\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Wait to be shown and then recheck\n\t\telse if (this.showing) {\n\t\t\tthis.whenShown.then(() => {\n\t\t\t\treturn this.hideIfWeShould(newRoute, oldRoute);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Show will be starting soon\n\t * At this point not even `view.show` has been executed\n\t * This allows the view to do anything special it needs to do in anticipation of calling `view.show`\n\t * @method\n\t * @param {Netx.View} view Instance of Netx.View\n\t * @listens Netx.View.MultiView#view:showing\n\t */\n\tbeforeShowView(view) {\n\t\t////////////////////////////////\n\t\t// UPDATE FROM MODAL OPTIONS\n\t\t////////////////////////////////\n\t\tconst modalOpts = view.modalOptions || {};\n\n\t\t// Update size\n\t\tthis.$dialog &&\n\t\t\tthis.$dialog\n\t\t\t\t.removeClass('modal-md modal-sm modal-lg')\n\t\t\t\t.addClass('modal-' + (modalOpts.size || this.modalOptions.size));\n\n\t\t// Prevent the content area from jumping\n\t\tconst currentHeight = this.$childTargetEl.height();\n\t\tif (currentHeight) {\n\t\t\tthis.$childTargetEl.height(currentHeight);\n\t\t}\n\n\t\t// Update blocking\n\t\tthis.blocking = modalOpts.blocking === true;\n\t\tthis.$el.toggleClass('blocking', this.blocking);\n\t\t// Update title - will look to the view's modal options first and then fallback to the view's title\n\t\tthis.$title && this.$title.html(modalOpts.headerTitle || view.headerTitle);\n\n\t\t// Clean up and apply any new classNames\n\t\tthis.$el.removeClass(this.activeViewClassNames);\n\t\tthis.activeViewClassNames = modalOpts.classNames || '';\n\t\tthis.$el.addClass(this.activeViewClassNames);\n\t\t////////////////////////////////\n\t\t// !UPDATE FROM MODAL OPTIONS\n\t\t////////////////////////////////\n\n\t\treturn super.beforeShowView(view);\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e Click event\n\t */\n\tclose(e) {\n\t\t!this.blocking && this.hide();\n\t}\n\n\t/**\n\t * @override\n\t * @param {Netx.View} view Instance of `Netx.View`\n\t * @listens {@link Netx.Views.MultiView#view:shown}\n\t */\n\tviewAfterShown(view) {\n\t\tsuper.viewAfterShown(view);\n\n\t\t// Reset height\n\t\tview.rendered.then(() => {\n\t\t\tthis.$childTargetEl.height('');\n\t\t});\n\t}\n\n\t/**\n\t * Provided with the view we are changing to and the knowledge of the current view\n\t * you can block the change by returning `false`\n\t * @override\n\t * @param {Netx.View} view Instance of Netx.View we are changing to\n\t * @returns {boolean} Ok to change/show view\n\t */\n\tviewChanging(view) {\n\t\tconst activeView = this.getActiveView();\n\t\tconst modalOpts = view.modalOptions || {};\n\t\t// What blocks a change:\n\t\t// We must have a currently active view - we must have more than 1 view and the current view mustnot be blocking\n\t\t// unless the view trying to show is blocking - since it is new it takes precedent\n\t\treturn (\n\t\t\tmodalOpts.blocking ||\n\t\t\t!activeView ||\n\t\t\tthis.viewCollection.length === 1 ||\n\t\t\tactiveView.stickyModal !== true\n\t\t);\n\t}\n\n\t/**\n\t * A view was instantiated (a brand new childView was born)\n\t * @override\n\t * @param {Netx.View} view Instance of Netx.View\n\t */\n\tviewInstantiated(view) {\n\t\tsuper.viewInstantiated(view);\n\n\t\t// All child views will be fully removed on hide\n\t\tif (view.viewSpec.isMyOriginalCollection(this.viewCollection)) {\n\t\t\tview.removeOnHide = true;\n\t\t\tview.removeOnSimpleHide = false;\n\t\t}\n\t\t// Sticky? - TODO: Revisit the difference between sticky and blocking - I got confused I think - I am\n\t\tconst modalOpts = view.modalOptions || {};\n\t\tview.stickyModal = modalOpts.blocking === true;\n\t}\n\n\t/**\n\t * @override\n\t * @param {Netx.View} view Instance of Netx.View\n\t */\n\tviewRemoved(view) {\n\t\tif (\n\t\t\t!this.hiddenByRoute &&\n\t\t\tview.viewSpec.isMyOriginalCollection(this.viewCollection)\n\t\t) {\n\t\t\t// If a new view came in in the mean time and it is routed - do nothing - we are at the route we should be\n\t\t\tconst activeView = this.getActiveView();\n\t\t\tif (activeView && activeView.cid !== view.cid && activeView.isRouted) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// HACK: preserve this value across callbacks:\n\t\t\t// (isRouting() reports false if a callback is fired via setTimeout(), such as in certain Bootstrap hiding animations.)\n\t\t\tconst isRouting = Backbone.history.isRouting();\n\t\t\t// If we opened this modal view due to a route...\n\t\t\tif (view.isRouted) {\n\t\t\t\tlogger.silly('removing routed view >', view.viewSpec.id);\n\n\t\t\t\tif (view.viewSpec.isMyOriginalCollection(this.viewCollection)) {\n\t\t\t\t\tdelete view.isRouted;\n\t\t\t\t}\n\t\t\t\t// Unless we're currently routing, route back to where we were before we opened the modal.\n\t\t\t\tif (!isRouting) {\n\t\t\t\t\tif (!_.isUndefined(view.routeMatch)) {\n\t\t\t\t\t\tappRouter.exitRoute(view.routeMatch);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tappRouter.back();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdelete this.hiddenByRoute;\n\n\t\tsuper.viewRemoved(view);\n\t}\n\n\t/**\n\t * @static\n\t * @type {string}\n\t */\n\tstatic get __name__() {\n\t\treturn 'AppModalView';\n\t}\n}\n\nexport default AppModalView;\n","import Base from 'netxcore@netx/core-app/views/appModalView';\n\nimport {faTimes} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaTimes,\n});\n\nexport default class AppModalView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.icons = {...icons, ...opts.icons};\n\n\t\topts.events = _.extend(\n\t\t\t{\n\t\t\t\tkeydown: 'closeOnEscape',\n\t\t\t},\n\t\t\topts.events,\n\t\t);\n\n\t\tsuper(opts);\n\t}\n\n\tcloseOnEscape(e) {\n\t\t// console.log('keydown:', e.which);\n\t\tconst code = e.which;\n\t\tif (code === 27) {\n\t\t\tthis.close();\n\t\t}\n\t}\n}\n","/**\n * Simple confirmation dialog view, with no model. Utilized by the {@link module:app#app:confirm|app:confirm} event\n * @class\n */\nimport {dispatcher} from '@netx/core-next/instance/dispatcher';\nimport Base from './alertView';\nimport Template from '../templates/confirmView.html';\n\nclass ConfirmView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.className = `app-confirm ${opts.className || ''}`;\n\t\topts.events = {\n\t\t\t'click [data-nx-control=\"yes\"]'() {\n\t\t\t\tthis.finish(true);\n\t\t\t},\n\t\t\t'click [data-nx-control=\"no\"]': 'cancel',\n\t\t\t...opts.events,\n\t\t};\n\t\topts.headerTitle = opts.headerTitle || i18n.t('i18n.confirm');\n\t\topts.id = opts.id || 'app-confirm';\n\t\topts.modalOptions = {\n\t\t\tblocking: true,\n\t\t\tsize: 'md',\n\t\t\t...opts.modalOptions,\n\t\t};\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\t/**\n\t\t * @type {array}\n\t\t * @default\n\t\t */\n\t\tthis.args = opts.args || [];\n\n\t\t/**\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tthis.classes = opts.classes || '';\n\n\t\t/**\n\t\t * if this.yesEvent or this.noEvent are undefined, this view will build the appropriate\n\t\t * events by appending ':confirmed' or ':cancelled' to this.eventStr .\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tthis.eventStr = opts.eventStr;\n\n\t\t/**\n\t\t * Any object that a custom template to confirmView might want to play with:\n\t\t * @type object\n\t\t * @default\n\t\t */\n\t\tthis.goo = opts.goo;\n\n\t\t/**\n\t\t * @type {string}\n\t\t * @default\n\t\t * @note This is being used as the argument to message.format() -- please document\n\t\t */\n\n\t\tthis.itemLabel = opts.itemLabel || '';\n\n\t\t/**\n\t\t * The confirmation message.\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tthis.message = opts.message || i18n.t('i18n.areYouSure');\n\n\t\t/**\n\t\t * Event triggered when the user clicks 'no'\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tthis.noEvent = opts.noEvent;\n\n\t\t/**\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tthis.noLabel = opts.noLabel != null ? opts.noLabel : i18n.t('i18n.no');\n\n\t\t/**\n\t\t * Event triggered when the user clicks 'yes'\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tthis.yesEvent = opts.yesEvent;\n\n\t\t/**\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tthis.yesLabel = opts.yesLabel != null ? opts.yesLabel : i18n.t('i18n.yes');\n\n\t\t/**\n\t\t * Pass a function that will be fired when the user cancels\n\t\t * @memberOf Netx.Views.ConfirmView\n\t\t * @alias onCancelled\n\t\t * @type {function}\n\t\t */\n\t\tthis.onCancelled = opts.onCancelled;\n\n\t\t/**\n\t\t * Pass a function that will be fired when the user confirms\n\t\t * @memberOf Netx.Views.ConfirmView\n\t\t * @alias onConfirmed\n\t\t * @type {function}\n\t\t */\n\t\tthis.onConfirmed = opts.onConfirmed;\n\n\t\tthis.title = opts.title;\n\n\t\t// Set on modal options\n\t\tthis.modalOptions.classNames = this.classes;\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\n\t\t// Prevent bad goo data from ever causing template errors, as with DAM-6941:\n\t\tthis.goo = this.goo || {};\n\n\t\t// Additonal template vars\n\t\t// Just in case this view ever gets a model - it will lose the benefits it currently has\n\t\tObject.assign(this.templateVars, {\n\t\t\tclasses: this.classes,\n\t\t\tgoo: this.goo,\n\t\t\theaderTitle: this.headerTitle,\n\t\t\tmessage: this.message,\n\t\t\titemLabel: this.itemLabel,\n\t\t\tnoLabel: this.noLabel,\n\t\t\tyesLabel: this.yesLabel,\n\t\t});\n\t}\n\n\t/** @method */\n\tescape() {\n\t\tthis.cancel();\n\t}\n\n\t/** @override */\n\tcancel(e) {\n\t\tif (e && e.preventDefault) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\tthis.trigger('cancelled', this);\n\t\tthis.hide();\n\n\t\tconst event = this.noEvent || `${this.eventStr}:cancelled`;\n\t\tdispatcher.trigger.apply(dispatcher, [event].concat(this.args));\n\n\t\t// If any callbacks were provided, execute them.\n\t\ttypeof this.onCancelled === 'function' &&\n\t\t\tthis.onCancelled.apply(this, this.args);\n\t}\n\n\t/** @method */\n\tconfirm() {\n\t\tthis.hide();\n\n\t\tconst event = this.yesEvent || `${this.eventStr}:confirmed`;\n\t\t// return an argument list with the event\n\t\tdispatcher.trigger.apply(dispatcher, [event].concat(this.args));\n\n\t\t// If any callbacks were provided, execute them.\n\t\ttypeof this.onConfirmed === 'function' &&\n\t\t\tthis.onConfirmed.apply(this, this.args);\n\t}\n\n\t/**\n\t * Handles acceptance or rejection of confirm dialog\n\t * @method\n\t * @param {boolean} bool Was the confirm accepted or rejected?\n\t */\n\tfinish(bool) {\n\t\tbool ? this.confirm() : this.cancel();\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'ConfirmView';\n\t}\n}\n\nexport default ConfirmView;\n","import Base from 'netxcore@netx/core-app/views/confirmView';\n\nimport {faExternalLinkAlt} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaExternalLinkAlt,\n});\n\nexport default class ConfirmView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.icons = {...icons, ...opts.icons};\n\t\tsuper(opts);\n\t}\n}\n","/**\n * View that dynamically creates a set of
  • elements from a Netx.Menu model\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/menuView.html';\nimport {\n\tFindLegacyAction,\n\tRegisterLegacyAction,\n} from '@netx/core/legacyActionManager';\n\nclass MenuView extends Base {\n\t/** @type {boolean} */\n\tget isMenuView() {\n\t\treturn this.constructor.__isMenuView__;\n\t}\n\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\t// don't add .loading classes to menus\n\t\topts.loadingMethods = [];\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\t/**\n\t\t * The 'actions' array is set by the instantiator\n\t\t * @memberOf Netx.Views.MenuView\n\t\t * @alias actions\n\t\t * @type {array}\n\t\t */\n\t\tthis.actions = opts.actions || [];\n\n\t\tthis.context = opts.context === true;\n\t\tthis.menu = opts.menu;\n\n\t\t// Hey, listen\n\t\tthis\n\t\t\t// OPTIMIZATION TODO: only listen when routes exist in menu, not like this\n\t\t\t.listenTo(dispatcher, 'hash:changed', this.setActiveClasses)\n\t\t\t.listenTo(dispatcher, 'app:close:menus', () => {\n\t\t\t\tif (this.$dropdown && this.$dropdown.hasClass('open')) {\n\t\t\t\t\tthis.$dropdownToggle.click();\n\t\t\t\t}\n\t\t\t});\n\t}\n\n\t/** @override */\n\tcancel(e) {\n\t\tif (this.$dropdown && this.$dropdown.hasClass('open')) {\n\t\t\tthis.$dropdownToggle.click();\n\t\t}\n\t}\n\n\t/**\n\t * Instead of templates, this module renders its own html with javascript.\n\t * @override\n\t */\n\tdoTemplate() {\n\t\t// TODO MENU TEMPLATE\n\t\tif (this.template === Template) {\n\t\t\tlet html = '';\n\t\t\tlet section = 0;\n\t\t\t// a recursive function to walk the actions array:\n\t\t\tconst _toHtml = (item) => {\n\t\t\t\tif (_.isArray(item)) {\n\t\t\t\t\t// found a section\n\t\t\t\t\thtml += '
    \\n';\n\t\t\t\t\tsection++;\n\t\t\t\t\t_.each(item, _toHtml); // recursion!\n\t\t\t\t\thtml += '
    \\n';\n\t\t\t\t} else if (_.isObject(item)) {\n\t\t\t\t\t// found a submenu\n\t\t\t\t\t// I designed this to use generic objects for submenus, but Spence assumed Netx.Menu objects which makes sense too ... so now we support either.\n\t\t\t\t\tvar label, actions;\n\t\t\t\t\tif (_.isFunction(item.get)) {\n\t\t\t\t\t\t// submenu is a Netx.Menu object\n\t\t\t\t\t\tlabel = item.get('label');\n\t\t\t\t\t\tactions = item.get('actions');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel = item.label;\n\t\t\t\t\t\tactions = item.actions;\n\t\t\t\t\t}\n\n\t\t\t\t\thtml += '
  • \\n';\n\t\t\t\t\thtml +=\n\t\t\t\t\t\t'' +\n\t\t\t\t\t\ti18n.t(label) +\n\t\t\t\t\t\t'\\n';\n\t\t\t\t\thtml += '\\n';\n\t\t\t\t} else {\n\t\t\t\t\t// found an action\n\t\t\t\t\t// TODO: check performance of Find, and/or implement Netx.Actions differently now that we have Menus.\n\t\t\t\t\tlet a = FindLegacyAction(item);\n\t\t\t\t\tif (!a) {\n\t\t\t\t\t\t//throw new Error(\"unknown action '\" + item + \"'\");\n\t\t\t\t\t\tconsole.warn(\"unknown action '\" + item + \"'; not rendering\");\n\t\t\t\t\t} else if (!a.fake) {\n\t\t\t\t\t\thtml +=\n\t\t\t\t\t\t\t'
  • ' +\n\t\t\t\t\t\t\ti18n.t(a.label) +\n\t\t\t\t\t\t\t'
  • ';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// walk the actions array, recursively:\n\t\t\t_.each(this.menu.get('actions'), _toHtml);\n\n\t\t\t// If our element is a div.dropdown, wrap with structure\n\t\t\tif (this.$el.filter('div.dropdown').length > 0) {\n\t\t\t\t// NOTE: data-toggle div is required by bootstrap.\n\t\t\t\thtml =\n\t\t\t\t\t'
    ';\n\t\t\t}\n\n\t\t\treturn html;\n\t\t}\n\t\t// Custom template\n\t\telse {\n\t\t\tlet depth = 0;\n\t\t\t// We need to strip the comment from the template (menu refactor when?!)\n\t\t\tlet $template = $(this.template({}).replace(/^\\n\\n/, ''));\n\t\t\t// First level\n\t\t\tlet $html = $template.clone(); // <----- this line == 99% of (long) render time for this view. Can we figure out how not to do this? -m-\n\t\t\t// Keep a copy of our current menu, untouched. So we can follow depth as needed.\n\t\t\tlet $currentMenu = $template.clone();\n\n\t\t\t// Empty everything inside but the header\n\t\t\t$html.children().not('header').remove();\n\t\t\t// Add some needed/helpful attributes\n\t\t\t$html\n\t\t\t\t.not('header')\n\t\t\t\t.attr('role', 'menu')\n\t\t\t\t.attr('data-nx-menu-depth', depth);\n\t\t\t/**\n\t\t\t * _findTarget\n\t\t\t * Find target based on attribute name\n\t\t\t * @function\n\t\t\t *\n\t\t\t * @param {object} $item jQuery object of element\n\t\t\t * @param {string} attr The attribute to search for\n\t\t\t *\n\t\t\t * @returns {object} jQuery element sought (or false if not found)\n\t\t\t */\n\t\t\tconst _findTarget = ($item, attr) => {\n\t\t\t\tlet $actionTarget = $item.attr(attr);\n\t\t\t\tif ($actionTarget) {\n\t\t\t\t\treturn $item;\n\t\t\t\t} else {\n\t\t\t\t\t$actionTarget = $item.find('[' + attr + ']');\n\t\t\t\t\tif ($actionTarget.length) {\n\t\t\t\t\t\treturn $actionTarget;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t\t/**\n\t\t\t * _processItem\n\t\t\t * Process provided item with provided action\n\t\t\t * @function\n\t\t\t *\n\t\t\t * @param {object} $item jQuery object of element\n\t\t\t * @param {object} action Action object\n\t\t\t *\n\t\t\t * @returns {object} Processed jQuery element\n\t\t\t */\n\t\t\tconst _processItem = ($item, action) => {\n\t\t\t\tif (action.fake) return;\n\n\t\t\t\t// Our element to target\n\t\t\t\tlet $actionTarget = false;\n\n\t\t\t\t// Has data-action\n\t\t\t\t$actionTarget = _findTarget($item, 'data-action');\n\t\t\t\tif (action.event) {\n\t\t\t\t\tif ($actionTarget) {\n\t\t\t\t\t\t$actionTarget.attr('data-action', action.event);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Nothing found\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif ($actionTarget) {\n\t\t\t\t\t\t// Only remove if a real data action has not been provided\n\t\t\t\t\t\tif ($actionTarget.attr('data-action') === '{{action}}') {\n\t\t\t\t\t\t\t$actionTarget.removeAttr('data-action').removeClass('nx-action');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Nothing found\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Has route\n\t\t\t\t$actionTarget = _findTarget($item, 'href');\n\t\t\t\tif (action.route && !_.isFunction(action.route)) {\n\t\t\t\t\tif ($actionTarget) {\n\t\t\t\t\t\tconst hash = action.route.slice(0, 1) === '#' ? '' : '#';\n\t\t\t\t\t\t$actionTarget.attr('href', hash + action.route);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Nothing found\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif ($actionTarget) {\n\t\t\t\t\t\t// Only remove if a real href has not been provided\n\t\t\t\t\t\tif ($actionTarget.attr('href') === '{{route}}') {\n\t\t\t\t\t\t\t$actionTarget.removeAttr('href');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Nothing found\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Has data-target\n\t\t\t\t$actionTarget = _findTarget($item, 'data-target');\n\t\t\t\tif (action.target) {\n\t\t\t\t\tif ($actionTarget) {\n\t\t\t\t\t\t$actionTarget.attr('data-target', action.target);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Nothing found\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif ($actionTarget) {\n\t\t\t\t\t\t// Only remove if a real data target has not been provided\n\t\t\t\t\t\tif ($actionTarget.attr('data-target') === '{{target}}') {\n\t\t\t\t\t\t\t$actionTarget.removeAttr('data-target');\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Nothing found\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Has label\n\t\t\t\tif (action.label) {\n\t\t\t\t\t$item = $(\n\t\t\t\t\t\t$item[0].outerHTML.replace(/{{label}}/g, i18n.t(action.label)),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Remove label\n\t\t\t\telse {\n\t\t\t\t\t$item = $($item[0].outerHTML.replace(/{{label}}/g, ''));\n\t\t\t\t}\n\n\t\t\t\t// Has icon\n\t\t\t\tif (action.icon) {\n\t\t\t\t\tconst icon =\n\t\t\t\t\t\ttypeof action.icon === 'string'\n\t\t\t\t\t\t\t? ``\n\t\t\t\t\t\t\t: action.icon || '';\n\t\t\t\t\t$item = $($item[0].outerHTML.replace(/{{icon}}/g, icon));\n\t\t\t\t}\n\t\t\t\t// Remove icon\n\t\t\t\telse {\n\t\t\t\t\tlet customIcon = $item.find('i').attr('class');\n\t\t\t\t\tif (customIcon) {\n\t\t\t\t\t\tcustomIcon = customIcon.includes('{{icon}}');\n\t\t\t\t\t}\n\t\t\t\t\tif (customIcon) {\n\t\t\t\t\t\t$item.find('i').remove();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$item[0].innerHTML = $item[0].innerHTML.replace(/{{icon}}/g, '');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn $item;\n\t\t\t};\n\t\t\t/**\n\t\t\t * _toCustomHtml\n\t\t\t * Create our custom HTML\n\t\t\t * @function\n\t\t\t *\n\t\t\t * @param {*} item An array (section), an object (submenu) or a menu item\n\t\t\t * @param {object} $_html The jQuery object to append to\n\t\t\t */\n\t\t\tconst _toCustomHtml = (item, $_html) => {\n\t\t\t\tlet $item;\n\t\t\t\t// Section\n\t\t\t\tif (_.isArray(item)) {\n\t\t\t\t\t// If we have a current menu already get the item from there - else get it from the main node\n\t\t\t\t\t$item = $currentMenu\n\t\t\t\t\t\t? $currentMenu.children().not('header').first().clone()\n\t\t\t\t\t\t: $template.children().not('header').first().clone();\n\t\t\t\t\t// We just take the tag type used for items in the template and append with class 'divider'\n\t\t\t\t\t$_html.append(\n\t\t\t\t\t\t$('
  • ', {\n\t\t\t\t\t\t\tclass: 'divider',\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t\tconst $section = $currentMenu.clone();\n\t\t\t\t\t// Empty everything inside except the header\n\t\t\t\t\t$section.children().not('header').remove();\n\t\t\t\t\t// Add some needed/helpful attributes\n\t\t\t\t\t$section\n\t\t\t\t\t\t.not('header')\n\t\t\t\t\t\t.attr('role', 'menu')\n\t\t\t\t\t\t.attr('data-nx-menu-depth', depth);\n\t\t\t\t\t//$_html.after( $section );\n\t\t\t\t\t$_html.append($section);\n\t\t\t\t\t// Loop over actions in array\n\t\t\t\t\t_.each(item, (_item) => {\n\t\t\t\t\t\t_toCustomHtml(_item, $section);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Submenu\n\t\t\t\telse if (_.isObject(item)) {\n\t\t\t\t\tdepth++;\n\n\t\t\t\t\tlet label, icon, actions;\n\t\t\t\t\t// Submenu is a Netx.Menu object\n\t\t\t\t\tif (_.isFunction(item.get)) {\n\t\t\t\t\t\tlabel = item.get('label');\n\t\t\t\t\t\ticon = item.get('icon');\n\t\t\t\t\t\tactions = item.get('actions');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel = item.label;\n\t\t\t\t\t\ticon = item.icon;\n\t\t\t\t\t\tactions = item.actions;\n\t\t\t\t\t}\n\t\t\t\t\t// If we have a current menu already get the item from there - else get it from the main node\n\t\t\t\t\t$item = $currentMenu\n\t\t\t\t\t\t? $currentMenu.children().not('header').first().clone()\n\t\t\t\t\t\t: $template.children().not('header').first().clone();\n\t\t\t\t\t// First lets get the submenu of the item - if it has one\n\t\t\t\t\tlet $subMenu = $item.find('.sub-menu');\n\t\t\t\t\t// Look for a submenu elsewhere\n\t\t\t\t\tif (!$subMenu.length) {\n\t\t\t\t\t\tif ($currentMenu) $subMenu = $currentMenu.find('.sub-menu').first();\n\t\t\t\t\t\tif (!$subMenu.length) {\n\t\t\t\t\t\t\t$subMenu = $template.find('.sub-menu').first();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// If submenu was provided in template\n\t\t\t\t\tif ($subMenu.length) {\n\t\t\t\t\t\t// Submenu to append to\n\t\t\t\t\t\t$subMenu = $subMenu.clone();\n\t\t\t\t\t\t// Keep a copy of our current menu, untouched.\n\t\t\t\t\t\t$currentMenu = $subMenu.clone();\n\t\t\t\t\t\t// It is now safe to empty out submenu\n\t\t\t\t\t\t$subMenu.children().not('header').remove();\n\t\t\t\t\t\t// Make sure we do not have a submenu element in the item still\n\t\t\t\t\t\t$item.find('.sub-menu').remove();\n\t\t\t\t\t}\n\t\t\t\t\t// No submenu provided - we will reuse the parent node\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Keep a copy of our current menu, untouched.\n\t\t\t\t\t\t$currentMenu = $template.clone();\n\t\t\t\t\t\t// Submenu to append to\n\t\t\t\t\t\t$subMenu = $template.clone().addClass('sub-menu');\n\t\t\t\t\t\t$subMenu.children().not('header').remove();\n\t\t\t\t\t}\n\t\t\t\t\t// Add pertinent dropdown classes\n\t\t\t\t\t$subMenu\n\t\t\t\t\t\t.addClass('dropdown-menu')\n\t\t\t\t\t\t.attr('role', 'menu')\n\t\t\t\t\t\t.attr('data-nx-menu-depth', depth);\n\t\t\t\t\t// Process submenu\n\t\t\t\t\t$subMenu = _processItem($subMenu, {label: label});\n\t\t\t\t\t// Process the item\n\t\t\t\t\t$item = _processItem($item, {label: label, icon: icon});\n\t\t\t\t\t// Add dropdown classes to item\n\t\t\t\t\t$item\n\t\t\t\t\t\t.addClass('dropdown')\n\t\t\t\t\t\t.addClass('parent')\n\t\t\t\t\t\t.addClass('dropdown-submenu');\n\n\t\t\t\t\t// Check for \n\t\t\t\t\tlet $a = $item.find('a');\n\t\t\t\t\tif ($a.length) {\n\t\t\t\t\t\t$a.addClass('dropdown-toggle')\n\t\t\t\t\t\t\t.attr('data-toggle', 'dropdown')\n\t\t\t\t\t\t\t.attr('title', label);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$item\n\t\t\t\t\t\t\t.addClass('dropdown-toggle')\n\t\t\t\t\t\t\t.attr('data-toggle', 'dropdown')\n\t\t\t\t\t\t\t.attr('title', label); //tooltips for dropdowns\n\t\t\t\t\t}\n\t\t\t\t\t// Loop over actions within item\n\t\t\t\t\t_.each(actions, (item) => {\n\t\t\t\t\t\t_toCustomHtml(item, $subMenu);\n\t\t\t\t\t});\n\t\t\t\t\t// This stops the quirky behavior of append\n\t\t\t\t\t// If you append an element straight up to another element that is not unique enough it will append to all elements that are \"similar\"\n\t\t\t\t\t$_html.append($item.html($item.html() + $subMenu[0].outerHTML));\n\t\t\t\t}\n\t\t\t\t// Menu item\n\t\t\t\telse {\n\t\t\t\t\t// Get action object\n\t\t\t\t\tlet action = FindLegacyAction(item);\n\t\t\t\t\t$item = $currentMenu\n\t\t\t\t\t\t? $currentMenu.children().not('header').first().clone()\n\t\t\t\t\t\t: $template.children().not('header').first().clone();\n\t\t\t\t\tif (!action) {\n\t\t\t\t\t\tconsole.warn('The action \"' + item + '\" has not been registered.');\n\t\t\t\t\t\t// add a minimal fake action, so we still trigger an event\n\t\t\t\t\t\taction = {event: item, fake: true};\n\t\t\t\t\t\tRegisterLegacyAction(action);\n\t\t\t\t\t}\n\t\t\t\t\t// Check for a current sub menu, otherwise get from main node\n\t\t\t\t\t// Make sure item does not have a submenu element in it\n\t\t\t\t\t$item.find('.sub-menu').remove();\n\t\t\t\t\t// Process item\n\t\t\t\t\t$item = _processItem($item, action);\n\t\t\t\t\t// Append item\n\t\t\t\t\t$_html.append($item);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Header\n\t\t\tvar headerLabel = this.menu.get('label'),\n\t\t\t\t$header = $html.find('header').first();\n\n\t\t\tif ($header.length) {\n\t\t\t\tif (headerLabel) {\n\t\t\t\t\t$header.replaceWith(\n\t\t\t\t\t\t$($header[0].outerHTML.replace(/{{label}}/g, i18n.t(headerLabel))),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\t$header.replaceWith(\n\t\t\t\t\t\t$($header[0].outerHTML.replace(/{{label}}/g, '')),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Loop over main actions\n\t\t\t_.each(this.menu.get('actions'), (item) => {\n\t\t\t\tdepth = 1;\n\t\t\t\t// Reset to main node\n\t\t\t\t$currentMenu = $template.clone();\n\t\t\t\t_toCustomHtml(item, $html);\n\t\t\t});\n\n\t\t\t// Clean up\n\t\t\t$currentMenu = $template = null;\n\n\t\t\tif (this.context) {\n\t\t\t\treturn [\n\t\t\t\t\t'
    ',\n\t\t\t\t\t'
    ',\n\t\t\t\t\t$html[0].outerHTML,\n\t\t\t\t\t'
    ',\n\t\t\t\t].join('');\n\t\t\t} else {\n\t\t\t\treturn $html[0].outerHTML;\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Cache\n\t\tthis.$dropdown = this.$('.dropdown:not(.dropdown-submenu)');\n\t\t// The dropdown could be this.el\n\t\tif (!this.$dropdown.length && this.$el.is('.dropdown')) {\n\t\t\tthis.$dropdown = this.$el;\n\t\t}\n\t\tthis.$dropdownToggle = this.$dropdown.find('.dropdown-toggle');\n\t\tthis.$subMenus = this.$('.dropdown.dropdown-submenu');\n\n\t\tthis.configureSubmenus();\n\t}\n\n\t/**\n\t * Enable/disable of our menu is handled by the parent view,\n\t * because the relevant el can be outside of our domain,\n\t * but we can & do check our own submenus.\n\t * @method\n\t */\n\tconfigureSubmenus() {\n\t\t// Check submenus:\n\t\t_.each(this.$subMenus, (el) => {\n\t\t\tconst $el = this.$(el);\n\t\t\t// TODO: see TODO in Netx.View.configureMenu() re: possible bug here.\n\t\t\t// Check if we have any enabled actions\n\t\t\tlet allActions = $el.find('.nx-action');\n\t\t\tlet disabledActions = $el.find('.nx-action[disabled]');\n\n\t\t\t// Maybe it is just href based and not data-action\n\t\t\tif (!allActions.length) {\n\t\t\t\tallActions = $el.find('[href]');\n\t\t\t\tdisabledActions = $el.find('[href][disabled]');\n\t\t\t}\n\n\t\t\t// Deal with the dropdown toggle as well\n\t\t\t$el\n\t\t\t\t.siblings('[data-toggle=\"dropdown\"]')\n\t\t\t\t.enableIf(disabledActions.length < allActions.length);\n\t\t});\n\n\t\tthis.setActiveClasses();\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} hash Current hash\n\t * @param {string} lasthash Last hash\n\t */\n\tsetActiveClasses(hash, lasthash) {\n\t\tif (!hash) {\n\t\t\thash = Backbone.history.location.hash;\n\t\t}\n\t\t//manage the active state of menu items]\n\t\tthis.$('.active').removeClass('active');\n\n\t\t// look for parent routes, set active class on href or role=\"presentation\"\n\t\tlet $actionTarget, $tabPresentation;\n\t\tif (hash.lastIndexOf('/') > 0) {\n\t\t\twhile (hash.lastIndexOf('/') > 0) {\n\t\t\t\t$actionTarget = this.$('a[href=\"' + _.escape(hash) + '\"]');\n\t\t\t\tif ($actionTarget.length) {\n\t\t\t\t\t$tabPresentation = $actionTarget.closest('[role=\"presentation\"]');\n\t\t\t\t\t($tabPresentation.length ? $tabPresentation : $actionTarget).addClass(\n\t\t\t\t\t\t'active',\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\thash = hash.slice(0, hash.lastIndexOf('/'));\n\t\t\t}\n\t\t} else {\n\t\t\t$actionTarget = this.$('a[href=\"' + hash + '\"]');\n\t\t\t$actionTarget.closest('[role=\"presentation\"]').addClass('active');\n\t\t}\n\t}\n\n\t/**\n\t * Sometimes this view is instantiated on an existing element; when we 'remove' this view, we want to preserve\n\t * its outer element, so we can't call Backbone's remove() method. Instead, we use removeInner().\n\t * @todo: elevate to Netx.View?\n\t * @method\n\t */\n\tremoveInner() {\n\t\tthis.stopListening().undelegateEvents().$el.empty();\n\t}\n\n\t/** @type {boolean} */\n\tstatic get __isMenuView__() {\n\t\treturn true;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'MenuView';\n\t}\n}\n\nexport default MenuView;\n","import Base from 'netxcore@netx/core-app/views/menuView';\n\nimport MaterialMenus from '@netx/core/functionality/materialMenus';\nimport {isMobile} from '@netx/core-next/utils/browser';\nimport {FindLegacyAction} from '@netx/core/legacyActionManager';\n\n/**\n * @class\n * @override\n */\nclass MenuView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.events = {\n\t\t\t'click [data-toggle=\"dropdown\"]': function (e) {\n\t\t\t\tif (isMobile) {\n\t\t\t\t\t// mobile layout\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t$(e.currentTarget).parent('li').toggleClass('open');\n\t\t\t\t}\n\t\t\t},\n\t\t\t'keydown a.nx-action': 'keydownAction',\n\t\t\t...opts.events,\n\t\t};\n\n\t\tsuper(opts);\n\n\t\tthis.removeOnHide = opts.removeOnHide === true;\n\t}\n\t/**\n\t * @method\n\t * @param {event} e `keydown` event\n\t * calls netx-view to perform action\n\t * if it is kept on a parent li\n\t *\n\t * todo: remove with react refactor\n\t */\n\tkeydownAction(e) {\n\t\tconst code = e.which;\n\t\t// space or enter\n\t\tif (code === 13 || code === 32) {\n\t\t\tconst actionStr = this.$(e.currentTarget).parent('li').data('action');\n\t\t\tconst action = FindLegacyAction(actionStr) || false;\n\t\t\tif (action) {\n\t\t\t\tthis.performAction(action, [this, e]);\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @override */\n\tdoTemplate() {\n\t\tlet html = super.doTemplate();\n\n\t\t// role=\"menu\" to role=\"list\"\n\t\thtml = html.replace(/role=\"menu\"/g, 'role=\"list\"');\n\n\t\t// kill bootstrap toggle\n\t\tif (this.menu.get('hoistable') !== false) {\n\t\t\t// html = html.replace(/data-toggle=\"dropdown\"/g, '');\n\t\t\thtml = html.replace(/class=\"divider\"/g, 'class=\"mdc-list-divider\"');\n\t\t}\n\t\treturn html;\n\t}\n\n\t/** @method */\n\tonMenuClose() {\n\t\tif (this.removeOnHide) {\n\t\t\tthis.remove();\n\t\t}\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tconst el = this.el;\n\n\t\tif (this.menu.get('hoistable') !== false) {\n\t\t\t// A quick and dirty way to make our menus behave as material design\n\t\t\t// until we reqork menus and allow for proper theming\n\t\t\t// Store for `configureSubmenus`\n\t\t\tconst isHeaderTitleActions = (this.isHeaderTitleActions =\n\t\t\t\tel.classList.contains('header__title-actions'));\n\n\t\t\t// When in a drawer we need to unwrap and discard the 'mdc-list' element\n\t\t\t// as you can only have one in a drawer (they do not appear to currently support mdc-list groups in drawers)\n\t\t\tconst isInDrawer = el.classList.contains('drawer-menu');\n\t\t\tif (isInDrawer) {\n\t\t\t\tconst lists = el.querySelectorAll('.mdc-list');\n\t\t\t\tlists.forEach((list) => {\n\t\t\t\t\tconst parent = list.parentNode;\n\t\t\t\t\twhile (list.firstChild) parent.insertBefore(list.firstChild, list);\n\t\t\t\t\tparent.removeChild(list);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Context menu\n\t\t\tif (this.context) {\n\t\t\t\t// We need to just hack at the thing - we are making this so that mdc-menus\n\t\t\t\t// \"just work\" with our sontext menus\n\t\t\t\tconst toggleEl = el.querySelector('.dropdown-toggle');\n\t\t\t\ttoggleEl && toggleEl.parentNode.removeChild(toggleEl);\n\t\t\t\tconst wrapperEl = el.querySelector('.dropdown-menu');\n\t\t\t\tif (wrapperEl) {\n\t\t\t\t\tel.appendChild(wrapperEl.firstChild);\n\t\t\t\t\twrapperEl.parentNode.removeChild(wrapperEl);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Store for `configureSubmenus`\n\t\t\tconst dropdownParent = (this.dropdownParent =\n\t\t\t\tel.querySelectorAll('.dropdown.parent'));\n\n\t\t\tthis.listActions = [];\n\t\t\tif (dropdownParent && dropdownParent.length) {\n\t\t\t\tdropdownParent.forEach((drop, idx, all) => {\n\t\t\t\t\tthis.listActions = [\n\t\t\t\t\t\t...this.listActions,\n\t\t\t\t\t\t...drop.querySelectorAll('.nx-action'),\n\t\t\t\t\t];\n\t\t\t\t\tdrop.classList.add('mdc-menu-surface--anchor');\n\t\t\t\t\tthis.checkDropdownParent(drop);\n\n\t\t\t\t\tconst menuEl = drop.querySelector('[role=\"list\"]');\n\t\t\t\t\tif (menuEl) {\n\t\t\t\t\t\t// We need to wrap our menu because mdc expects the .mdc-list to live within the menu and not be\n\t\t\t\t\t\t// the menu - this is a limiatation of our menu system atm\n\t\t\t\t\t\tconst mdcMenuWrapper = document.createElement('div');\n\t\t\t\t\t\tmdcMenuWrapper.classList.add(\n\t\t\t\t\t\t\t'mdc-menu',\n\t\t\t\t\t\t\t'mdc-menu-surface',\n\t\t\t\t\t\t\t'mdc-menu--hoist',\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tmenuEl.parentNode.insertBefore(mdcMenuWrapper, menuEl);\n\t\t\t\t\t\tmdcMenuWrapper.appendChild(menuEl);\n\n\t\t\t\t\t\tmenuEl.classList.add('mdc-list');\n\t\t\t\t\t\tmenuEl.querySelectorAll('li').forEach((li) => {\n\t\t\t\t\t\t\tli.classList.add('mdc-list-item');\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.context) {\n\t\t\t\tconst menuEl = (this.context ? el : dropdownParent).querySelector(\n\t\t\t\t\t'[role=\"list\"]',\n\t\t\t\t);\n\t\t\t\tif (menuEl) {\n\t\t\t\t\t// We need to wrap our menu because mdc expects the .mdc-list to live within the menu and not be\n\t\t\t\t\t// the menu - this is a limiatation of our menu system atm\n\t\t\t\t\tconst mdcMenuWrapper = document.createElement('div');\n\t\t\t\t\tmdcMenuWrapper.classList.add(\n\t\t\t\t\t\t'mdc-menu',\n\t\t\t\t\t\t'mdc-menu-surface',\n\t\t\t\t\t\t'mdc-menu--hoist',\n\t\t\t\t\t);\n\n\t\t\t\t\tmenuEl.parentNode.insertBefore(mdcMenuWrapper, menuEl);\n\t\t\t\t\tmdcMenuWrapper.appendChild(menuEl);\n\n\t\t\t\t\tmenuEl.classList.add('mdc-list');\n\t\t\t\t\tmenuEl.querySelectorAll('li').forEach((li) => {\n\t\t\t\t\t\tli.classList.add('mdc-list-item');\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst dropdownEls = el.querySelectorAll('.dropdown-menu');\n\t\t\tif (dropdownEls && dropdownEls.length) {\n\t\t\t\tfor (let i = 0; i < dropdownEls.length; i++) {\n\t\t\t\t\tconst dropdownEl = dropdownEls[i];\n\t\t\t\t\t// Inject the cancel button if we ar enot in a drawer\n\t\t\t\t\tif (!dropdownEl.closest('.mdc-drawer__content')) {\n\t\t\t\t\t\tconst cancelLi = document.createElement('li');\n\t\t\t\t\t\tcancelLi.classList.add('nx-cancel', 'cancel', 'mdc-list-item');\n\t\t\t\t\t\tcancelLi.innerText = i18n.t('i18n.cancel');\n\t\t\t\t\t\tdropdownEl.appendChild(cancelLi);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst menuEl = dropdownEl.querySelector('[role=\"menu\"]');\n\t\t\t\t\tif (menuEl) {\n\t\t\t\t\t\tmenuEl.classList.add('mdc-list');\n\t\t\t\t\t\tmenuEl.querySelectorAll('li').forEach((li) => {\n\t\t\t\t\t\t\tli.classList.add('mdc-list-item');\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isHeaderTitleActions) {\n\t\t\t\tthis.$el\n\t\t\t\t\t.find('a.dropdown-toggle')\n\t\t\t\t\t.addClass('mdc-fab', 'mdc-ripple-surface')\n\t\t\t\t\t.attr('aria-label', 'Actions')\n\t\t\t\t\t.find('svg')\n\t\t\t\t\t.addClass('mdc-fab__icon');\n\t\t\t}\n\n\t\t\t// Store for `configureSubmenus`\n\t\t\tthis.listEl = this.el.querySelector('.mdc-list');\n\t\t} else {\n\t\t\tconsole.log('nope', this.menu.attributes);\n\t\t}\n\t\tsuper.postRender();\n\t}\n\n\t/**\n\t * @method\n\t */\n\tcheckDropdownParent(dropdownParent) {\n\t\tif (\n\t\t\t!dropdownParent ||\n\t\t\tdropdownParent.length === 0 ||\n\t\t\tthis.isHeaderTitleActions ||\n\t\t\tthis.menu.get('hoistable') === false\n\t\t)\n\t\t\treturn;\n\n\t\t// For when the menu was already defining each item as an mdc-icon-button\n\t\t// dropdownParent.classList.remove('mdc-icon-button');\n\t\tif (dropdownParent && dropdownParent.length) {\n\t\t\tdropdownParent.forEach((drop, idx, all) => {\n\t\t\t\tdrop.classList.remove('mdc-icon-button');\n\t\t\t});\n\t\t}\n\n\t\tconst isIterable = (obj) => {\n\t\t\t// checks for null and undefined\n\t\t\tif (obj == null) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn typeof obj[Symbol.iterator] === 'function';\n\t\t};\n\n\t\tconst hasEnabledActions = this.listActions.some(\n\t\t\t(listAction) => listAction.getAttribute('disabled') == null,\n\t\t);\n\t\tif (!hasEnabledActions) {\n\t\t\tif (isIterable(dropdownParent)) {\n\t\t\t\tdropdownParent.forEach((drop, idx, all) => {\n\t\t\t\t\tdrop.setAttribute('disabled', true);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdropdownParent.setAttribute('disabled', true);\n\t\t\t}\n\t\t} else {\n\t\t\tif (isIterable(dropdownParent)) {\n\t\t\t\tdropdownParent.forEach((drop, idx, all) => {\n\t\t\t\t\tdrop.removeAttribute('disabled');\n\t\t\t\t\tconst dropdowntoggle = drop.querySelector('.dropdown-toggle');\n\t\t\t\t\tif (dropdowntoggle) {\n\t\t\t\t\t\tdropdowntoggle.classList.add(\n\t\t\t\t\t\t\t'mdc-icon-button',\n\t\t\t\t\t\t\t'mdc-ripple-surface',\n\t\t\t\t\t\t);\n\t\t\t\t\t\tdropdowntoggle.classList.remove('mdc-button');\n\t\t\t\t\t\tdropdowntoggle.classList.remove('mdc-button--unelevated');\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tdropdownParent.removeAttribute('disabled');\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @override */\n\tconfigureSubmenus() {\n\t\tsuper.configureSubmenus();\n\n\t\tif (this.menu.get('hoistable') !== false) {\n\t\t\t// One more dirty thing!\n\t\t\t// Do not show item seperator if there are not any enabled actions\n\t\t\t// to follow\n\t\t\tif (this.listEl) {\n\t\t\t\tthis.listEl\n\t\t\t\t\t.querySelectorAll('.mdc-list-divider')\n\t\t\t\t\t.forEach((dividerEl) => {\n\t\t\t\t\t\tconst menuEl = dividerEl.nextSibling;\n\t\t\t\t\t\tif (!menuEl) return;\n\n\t\t\t\t\t\tconst hasEnabledAction = menuEl.querySelector(\n\t\t\t\t\t\t\t'.nx-action:not(.disabled)',\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tdividerEl.style.display = hasEnabledAction ? '' : 'none';\n\t\t\t\t\t\tmenuEl.style.display = hasEnabledAction ? '' : 'none';\n\t\t\t\t\t});\n\t\t\t}\n\t\t\tthis.checkDropdownParent(this.dropdownParent);\n\t\t}\n\t}\n}\n\nMaterialMenus(MenuView);\n\nexport default MenuView;\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/pagerView.html';\n\nclass PagerView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.events = _.extend(\n\t\t\t{\n\t\t\t\t'click [data-nx-control=\"firstPage\"]': 'firstPage',\n\t\t\t\t'click [data-nx-control=\"lastPage\"]': 'lastPage',\n\t\t\t\t'click [data-nx-control=\"gotoPage\"]': 'gotoPage',\n\t\t\t\t'click [data-nx-control=\"prevPage\"]': 'prevPage',\n\t\t\t\t'click [data-nx-control=\"nextPage\"]': 'nextPage',\n\t\t\t},\n\t\t\topts.events,\n\t\t);\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\t}\n\n\t/** @override */\n\tbindModelEvents() {\n\t\tsuper.bindModelEvents();\n\t\treturn this.listenTo(\n\t\t\tthis.model,\n\t\t\t'change:pageTotal change:currentPage',\n\t\t\t_.debounce(this.render, 50),\n\t\t);\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\n\t\tvar currentPage = this.model.get('currentPage'),\n\t\t\tlastPage = this.model.get('pageTotal'),\n\t\t\tpagesToDisplay = this.model.get('pagesToDisplay'),\n\t\t\tpageArray = [];\n\n\t\tif (pagesToDisplay) {\n\t\t\tpageArray = _.crumbs(lastPage, currentPage, pagesToDisplay);\n\t\t}\n\n\t\t// Additional template vars\n\t\t_.extend(this.templateVars, {\n\t\t\tpageArray: pageArray,\n\t\t\tisFirstPage: currentPage === 1,\n\t\t\tisLastPage: currentPage === lastPage,\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Hide if a single page\n\t\tthis.$el.toggle(this.model.get('pageTotal') > 1);\n\t}\n\n\t/**\n\t * Got to first available page\n\t * @method\n\t * @param {event} e Click event\n\t * @fires module:app#app:pager:firstPage\n\t */\n\tfirstPage(e) {\n\t\tdispatcher.trigger('app:pager:firstPage', this.model, this.collection);\n\t}\n\n\t/**\n\t * Go to a specified page if possible\n\t * @method\n\t * @param {event} e Click event\n\t * @fires module:app#app:pager:gotoPage\n\t */\n\tgotoPage(e) {\n\t\tconst page = this.$(e.target).data('nx-page');\n\t\tdispatcher.trigger('app:pager:gotoPage', this.model, this.collection, page);\n\t}\n\n\t/**\n\t * Go to last available page\n\t * @method\n\t * @param {event} e Click event\n\t * @fires module:app#app:pager:lastPage\n\t */\n\tlastPage(e) {\n\t\tdispatcher.trigger('app:pager:lastPage', this.model, this.collection);\n\t}\n\n\t/**\n\t * Got to previous available page\n\t * @method\n\t * @param {event} e Click event\n\t * @fires module:app#app:pager:prevPage\n\t */\n\tprevPage(e) {\n\t\tdispatcher.trigger('app:pager:prevPage', this.model, this.collection);\n\t}\n\n\t/**\n\t * Go to next available page\n\t * @method\n\t * @param {event} e Click event\n\t * @fires module:app#app:pager:nextPage\n\t */\n\tnextPage(e) {\n\t\tdispatcher.trigger('app:pager:nextPage', this.model, this.collection);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'PagerView';\n\t}\n}\n\nexport default PagerView;\n","import Base from 'netxcore@netx/core-app/views/pagerView';\n\nimport {faAngleLeft, faAngleRight} from '@fortawesome/pro-light-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaAngleLeft,\n\tfaAngleRight,\n});\n\nexport default class PagerView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.icons = {...icons, ...opts.icons};\n\t\tsuper(opts);\n\t}\n}\n","/**\n * Assets Collection\n *\n * Much of the DAM API operates on sets of assets. This Assets collection is home to many of those API methods,\n * and all other asset collection classes inherit from this one.\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/asset';\nimport _ from 'underscore';\nimport {getPrefixedLogger} from '@netx/core-next/instance/logger';\nimport PagerModel from '@netx/core-app/models/pager';\nimport AssetSetModel from '../models/assetSet';\nimport CategoryModel from '@netx/core-category/models/category';\nimport SearchRulesCollection from '@netx/core-search/collections/searchRules_assets';\n\nimport {types as assetSetTypes} from '../properties/assetSets';\nimport customConfig from '../config';\n\nimport {\n\tfacetSupports,\n\tsearchProperties,\n\tsystemFacets,\n} from '@netx/core-search/properties/search';\nimport {escapeURI} from '@netx/core/utils/escapeURI';\nimport {unescapeURI} from '@netx/core/utils/unescapeURI';\n\nconst logger = getPrefixedLogger('collections/assets');\n\nexport default class Assets extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * this.fetchSpecificMethod defines the API call for fetching specific asset objects of this type; it will be overridden in Netx.Collections.MiniAssets\n\t * @type {string}\n\t * @default\n\t */\n\tget fetchSpecificMethod() {\n\t\treturn 'getAssetObjects';\n\t}\n\n\t/**\n\t * The following RPC methods cause the DAM to operate on the assets described in the collection.\n\t * All manipulation takes place in the DAM; the browser does not directly manipulate image\n\t * data, files or the database.\n\t * @rpcs\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\tread(opts) {\n\t\t\t\tthis.setStartPosition();\n\n\t\t\t\t// An empty search was sent\n\t\t\t\tif (!this.selection.length) {\n\t\t\t\t\tthis.pager.set({\n\t\t\t\t\t\titemTotal: 0,\n\t\t\t\t\t});\n\t\t\t\t\treturn new $.Deferred().resolve([]);\n\t\t\t\t}\n\n\t\t\t\tconst search = this.selection.createSearchObject();\n\n\t\t\t\t// Configure paging:\n\t\t\t\t// if chunk-fetch is requested, use chunk logic to determine the start & length.\n\t\t\t\tif (opts.chunk) {\n\t\t\t\t\tthis._startPosition = opts.refetch\n\t\t\t\t\t\t? this.selection.startPosition\n\t\t\t\t\t\t: this.selection.startPosition + this.length;\n\t\t\t\t\tthis._maxItems = opts.refetch\n\t\t\t\t\t\t? this.length + this.chunkSize\n\t\t\t\t\t\t: this.selection.maxItems;\n\t\t\t\t}\n\t\t\t\t// Otherwise use the standard values.\n\t\t\t\telse {\n\t\t\t\t\tthis._startPosition = this.selection.startPosition;\n\t\t\t\t\tthis._maxItems = this.selection.maxItems;\n\t\t\t\t}\n\n\t\t\t\tif (this.useFacetedSearch()) {\n\t\t\t\t\t// Faceted\n\t\t\t\t\tthis._filterMode = this.selection.searchFacets.filterMode;\n\t\t\t\t\treturn [\n\t\t\t\t\t\t_.contains(search.elementTypes, 200)\n\t\t\t\t\t\t\t? 'searchAssetsByAttributeHistory'\n\t\t\t\t\t\t\t: 'facetedSearch',\n\t\t\t\t\t\tsearch.sortField,\n\t\t\t\t\t\tsearch.sortOrder,\n\t\t\t\t\t\tsearch.matchCriteria,\n\t\t\t\t\t\tsearch.elementTypes,\n\t\t\t\t\t\tsearch.elementSubType1s,\n\t\t\t\t\t\tsearch.elementSubType2s,\n\t\t\t\t\t\tsearch.elementValue1s,\n\t\t\t\t\t\tsearch.elementValue2s,\n\t\t\t\t\t\tsearch.elementValue3s,\n\t\t\t\t\t\tthis._startPosition,\n\t\t\t\t\t\tthis._maxItems,\n\t\t\t\t\t\tthis.selection.searchFacets.selectedValues(),\n\t\t\t\t\t\tthis._filterMode,\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\t// Default\n\t\t\t\t\treturn [\n\t\t\t\t\t\t'searchAssetObjects',\n\t\t\t\t\t\tsearch.sortField,\n\t\t\t\t\t\tsearch.sortOrder,\n\t\t\t\t\t\tsearch.matchCriteria,\n\t\t\t\t\t\tsearch.elementTypes,\n\t\t\t\t\t\tsearch.elementSubType1s,\n\t\t\t\t\t\tsearch.elementSubType2s,\n\t\t\t\t\t\tsearch.elementValue1s,\n\t\t\t\t\t\tsearch.elementValue2s,\n\t\t\t\t\t\tsearch.elementValue3s,\n\t\t\t\t\t\tsearch.saveSearch,\n\t\t\t\t\t\tsearch.notifyType,\n\t\t\t\t\t\tsearch.ignoreStat,\n\t\t\t\t\t\tthis._startPosition,\n\t\t\t\t\t\tthis._maxItems,\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Given an array of ids, fetch the full asset beans\n\t\t\t * @method\n\t\t\t */\n\t\t\tfetchSpecificAssets(assetIds, opts) {\n\t\t\t\treturn [this.fetchSpecificMethod, assetIds];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Soon this will go away as we will get `size` on all our calls\n\t\t\t * @method\n\t\t\t */\n\t\t\tfetchAssetCount(opts) {\n\t\t\t\t// Cleared in parser\n\t\t\t\tthis.fetchingAssetCount = true;\n\n\t\t\t\tconst search = this.selection.createSearchObject();\n\t\t\t\treturn [\n\t\t\t\t\t'searchAssetListLength',\n\t\t\t\t\tsearch.sortField,\n\t\t\t\t\tsearch.sortOrder,\n\t\t\t\t\tsearch.matchCriteria,\n\t\t\t\t\tsearch.elementTypes,\n\t\t\t\t\tsearch.elementSubType1s,\n\t\t\t\t\tsearch.elementSubType2s,\n\t\t\t\t\tsearch.elementValue1s,\n\t\t\t\t\tsearch.elementValue2s,\n\t\t\t\t\tsearch.elementValue3s,\n\t\t\t\t\tsearch.saveSearch,\n\t\t\t\t\tsearch.notifyType,\n\t\t\t\t\tsearch.ignoreStat,\n\t\t\t\t];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Rather than get full asset beans from a search, just fetch the asset ids\n\t\t\t * @method\n\t\t\t */\n\t\t\tgetAssetIds(opts) {\n\t\t\t\tconst search = this.selection.createSearchObject();\n\t\t\t\treturn [\n\t\t\t\t\t'searchAssetData',\n\t\t\t\t\tsearch.sortField,\n\t\t\t\t\tsearch.sortOrder,\n\t\t\t\t\tsearch.matchCriteria,\n\t\t\t\t\tsearch.elementTypes,\n\t\t\t\t\tsearch.elementSubType1s,\n\t\t\t\t\tsearch.elementSubType2s,\n\t\t\t\t\tsearch.elementValue1s,\n\t\t\t\t\tsearch.elementValue2s,\n\t\t\t\t\tsearch.elementValue3s,\n\t\t\t\t\tsearch.saveSearch,\n\t\t\t\t\tsearch.notifyType,\n\t\t\t\t\tsearch.ignoreStat,\n\t\t\t\t\t// Start at the first one and get eeeeeeeverything\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Essentially the same as calling fetchSpecificAssets, only the parser will not set it on this\n\t\t\t * It is to fetch assets on the fly by id without affecting the collection\n\t\t\t * @method\n\t\t\t * @deprecated\n\t\t\t */\n\t\t\t// Appears unused.\n\t\t\tgetAssetObjects() {\n\t\t\t\tconsole.warn('assets.getAssetObjects() deprecated, gone in 8.13');\n\t\t\t\treturn ['getAssetObjects', 'getAssetObjectIds'];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * getMostViewedAssets(): like fetch(), but this fetches a set of assets from the DAM that cannot yet be obtained by searchAssetListObjects()\n\t\t\t * @method\n\t\t\t */\n\t\t\tgetMostViewedAssets() {\n\t\t\t\treturn ['getMostViewedAssets', customConfig.MOST_VIEWED_SIZE];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * getRecentlyUploadedAssets(): like fetch(), but this fetches a set of assets from the DAM that cannot yet be obtained by searchAssetListObjects()\n\t\t\t * @method\n\t\t\t */\n\t\t\tgetRecentlyUploadedAssets() {\n\t\t\t\treturn [\n\t\t\t\t\t'getRecentlyUploadedAssets',\n\t\t\t\t\tcustomConfig.RECENTLY_UPLOADED_SIZE,\n\t\t\t\t];\n\t\t\t},\n\t\t\t/**\n\t\t\t * createPDF(): generate a PDF of assets on the DAM, and prepare it for download/share.\n\t\t\t * @method\n\t\t\t * @deprecated\n\t\t\t */\n\t\t\tcreatePDF(opts) {\n\t\t\t\tconsole.warn('assets.createPDF deprecated, gone in 8.12!'); // the share controller does this a whole different way now.\n\t\t\t\tconst search = this.selection.createSearchObject();\n\t\t\t\tconst pdf = this.pdf;\n\t\t\t\treturn [\n\t\t\t\t\t'createPDFFromSearch',\n\t\t\t\t\tsearch.sortField,\n\t\t\t\t\tsearch.sortOrder,\n\t\t\t\t\tsearch.matchCriteria,\n\t\t\t\t\tsearch.elementTypes,\n\t\t\t\t\tsearch.elementSubType1s,\n\t\t\t\t\tsearch.elementSubType2s,\n\t\t\t\t\tsearch.elementValue1s,\n\t\t\t\t\tsearch.elementValue2s,\n\t\t\t\t\tsearch.elementValue3s,\n\t\t\t\t\tpdf.templateName,\n\t\t\t\t\tpdf.titleStr,\n\t\t\t\t\tpdf.hiRes,\n\t\t\t\t\tpdf.pdfExportPreset,\n\t\t\t\t];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * createPDFWithOptions(): like createPDF() but with more options.\n\t\t\t * @method\n\t\t\t * @deprecated\n\t\t\t */\n\t\t\tcreatePDFWithOptions(opts) {\n\t\t\t\tconsole.warn('assets.createPDFWithOptions deprecated, gone in 8.12!');\n\t\t\t\tconst cpwo = this.cpwo;\n\t\t\t\treturn [\n\t\t\t\t\t'createPDFWithOptions',\n\t\t\t\t\t// the share controller does this a whole different way now.\n\t\t\t\t\tthis.ids(),\n\t\t\t\t\tcpwo.sortField,\n\t\t\t\t\tcpwo.portrait,\n\t\t\t\t\tcpwo.cols,\n\t\t\t\t\tcpwo.rows,\n\t\t\t\t\tcpwo.attrNames,\n\t\t\t\t\tcpwo.attrLines,\n\t\t\t\t\tcpwo.highRes,\n\t\t\t\t\tcpwo.templateName,\n\t\t\t\t\tcpwo.titleStr,\n\t\t\t\t\tcpwo.pdfExportPreset,\n\t\t\t\t];\n\t\t\t},\n\t\t\t/**\n\t\t\t * Add/move cart assets to category\n\t\t\t * @method\n\t\t\t */\n\t\t\tcategorize(opts) {\n\t\t\t\treturn [\n\t\t\t\t\t'batchCategorizeAssets',\n\t\t\t\t\tthis.ids(),\n\t\t\t\t\tthis.categorizeArgs.targetCat,\n\t\t\t\t\tthis.categorizeArgs.action,\n\t\t\t\t];\n\t\t\t},\n\t\t\t/**\n\t\t\t * Move cart assets to category\n\t\t\t * @method\n\t\t\t */\n\t\t\tmoveToCategory(opts) {\n\t\t\t\treturn [\n\t\t\t\t\t'batchCategorizeAssets',\n\t\t\t\t\tthis.ids(),\n\t\t\t\t\tthis.categorizeArgs.targetCat,\n\t\t\t\t\tthis.categorizeArgs.move,\n\t\t\t\t];\n\t\t\t},\n\t\t\t/**\n\t\t\t * addToCategory() and removeFromCategory(): perform these category operations on every asset in our collection.\n\t\t\t * (The collection must be fetched first.)\n\t\t\t */\n\t\t\t/**\n\t\t\t * addToCategory(): add to a specified category every asset in our collection\n\t\t\t * @method\n\t\t\t */\n\t\t\t_addToCategory(opts) {\n\t\t\t\tconst cid = this.get('categoryid');\n\t\t\t\treturn ['setAssetCategoryLinks', this.ids(), this.targetCategory, true];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * removeFromCategory(): remove from specified category every asset in our collection\n\t\t\t * @method\n\t\t\t */\n\t\t\tremoveFromCategory(opts) {\n\t\t\t\treturn [\n\t\t\t\t\t'batchCategorizeAssets',\n\t\t\t\t\tthis.ids(),\n\t\t\t\t\tthis.targetCategory,\n\t\t\t\t\t'remove',\n\t\t\t\t];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * moveToCategory(): move to a specified category every asset in our collection\n\t\t\t * @method\n\t\t\t */\n\t\t\t_moveToCategory(opts) {\n\t\t\t\tconst cid = this.get('categoryid');\n\t\t\t\treturn [\n\t\t\t\t\t'setAssetCategoryLinks',\n\t\t\t\t\tthis.ids(),\n\t\t\t\t\tthis.targetCategory,\n\t\t\t\t\tfalse,\n\t\t\t\t];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * reserve() reserves assetIDs from the DAM, and creates asset models for those IDs that can later be imported.\n\t\t\t * Used by the asset import logic of the upload module.\n\t\t\t * @method\n\t\t\t * @todo: I still find this screwy. An asset that has a reserved ID ought to have an import() method too.\n\t\t\t * Or else this reserve method should live where the rest of the import logic lives. Like,\n\t\t\t * a subclass of Netx.Models.Upload called Netx.Models.Import that handles all that stuff?\n\t\t\t */\n\t\t\treserve: ['reserveAssetIds', 'reserveCount'],\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} result Result\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(result, opts) {\n\t\t\t\t// Did we fetch faceted, or normal?\n\t\t\t\tconst facetedResult = this.useFacetedSearch();\n\t\t\t\tlet assets = result.results || result;\n\n\t\t\t\t// DAM-15036 - Omit any assets without valid assetIds\n\t\t\t\tassets = _.filter(assets, (a) => {\n\t\t\t\t\tif (!a.assetId) {\n\t\t\t\t\t\tlogger.warn('server returned a bogus asset');\n\t\t\t\t\t}\n\t\t\t\t\treturn a.assetId;\n\t\t\t\t});\n\n\t\t\t\t// Check length of results; did we reach the end yet?\n\t\t\t\tif (assets.length > this.chunkSize) {\n\t\t\t\t\tassets.pop();\n\t\t\t\t\tthis.lastChunk = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.lastChunk = true;\n\t\t\t\t}\n\n\t\t\t\t// Don't remove existing assets if we are doing a chunk fetch.\n\t\t\t\t// (This options object will be passed to set.)\n\t\t\t\topts.remove = !opts.chunk;\n\n\t\t\t\tif (facetedResult) {\n\t\t\t\t\tconst systemFacetLabels = systemFacets;\n\t\t\t\t\tconst facets = _.map(result.facets, (facet) =>\n\t\t\t\t\t\t_.extend(facet, {\n\t\t\t\t\t\t\ttitle: systemFacetLabels[facet.label] || facet.label,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\n\t\t\t\t\t// Only return facets that have options with a count\n\t\t\t\t\tthis.selection.searchFacets.set(facets);\n\t\t\t\t\tthis.selection.searchFacets.itemTotal = result.size;\n\n\t\t\t\t\tthis.pager.set({\n\t\t\t\t\t\titemTotal: result.size,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn assets;\n\t\t\t},\n\t\t\t/**\n\t\t\t * fetchSpecificAssets returns an array of asset beans\n\t\t\t * @method\n\t\t\t * @param {array} assets\n\t\t\t */\n\t\t\tfetchSpecificAssets(assets, assetIds, opts) {\n\t\t\t\t// Omit any assets without valid assetIds\n\t\t\t\tthis.set(\n\t\t\t\t\t_.filter(assets, (asset) => asset.assetId),\n\t\t\t\t\topts,\n\t\t\t\t);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * fetchAssetCount returns simply a count (will one day be usurped by the `size` paramater)\n\t\t\t * @method\n\t\t\t * @param {number}\n\t\t\t */\n\t\t\tfetchAssetCount(count, opts) {\n\t\t\t\tif (count == null) {\n\t\t\t\t\tthrow new Error('bad return value from getAssetCount');\n\t\t\t\t}\n\t\t\t\tthis.pager.set({\n\t\t\t\t\titemTotal: count,\n\t\t\t\t});\n\n\t\t\t\t// Clear up this flag\n\t\t\t\tdelete this.fetchingAssetCount;\n\t\t\t},\n\t\t\t/**\n\t\t\t * Sets assetIds property and returns the array of assetIds\n\t\t\t * @param {array} assetIds Array of assetIds contained in collection\n\t\t\t * @return {array} Array of assetIds contained in collection\n\t\t\t */\n\t\t\tgetAssetIds(assetIds) {\n\t\t\t\tthis.assetIds = assetIds;\n\t\t\t\treturn assetIds;\n\t\t\t},\n\t\t\t/**\n\t\t\t * getMostViewedAssets returns an array of asset beans\n\t\t\t * @method\n\t\t\t * @param {array} assets\n\t\t\t * @todo Any reason why we are using reset instead of set - I know reset is faster but bypasses all add/remove/merge events\n\t\t\t */\n\t\t\tgetMostViewedAssets(assets) {\n\t\t\t\tthis.reset(assets);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * getRecentlyUploadedAssets returns an array of asset beans\n\t\t\t * @method\n\t\t\t * @param {array} assets\n\t\t\t * @todo Any reason why we are using reset instead of set - I know reset is faster but bypasses all add/remove/merge events\n\t\t\t */\n\t\t\tgetRecentlyUploadedAssets(assets) {\n\t\t\t\tthis.reset(assets);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Provided a count of new assets, reserve returns an array of asset ids that have been reserved for our new assets\n\t\t\t * @param {array} ids\n\t\t\t */\n\t\t\treserve(ids, opts) {\n\t\t\t\tids.forEach((id, idx, all) => {\n\t\t\t\t\tthis.add(\n\t\t\t\t\t\tnew Model({\n\t\t\t\t\t\t\tassetId: id,\n\t\t\t\t\t\t\tinCurrentCart: false,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\t// This is related to a circular reference somewhere\n\t\t// Anytime you find that a require at the top results in an empty object - this is why\n\t\t// https://stackoverflow.com/questions/37127083/can-two-files-have-each-other-as-dependencies-in-javascript-when-using-webpack\n\t\t//Model = '../models/asset');\n\t\topts.model = opts.model || Model;\n\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * When getAssetIds() is called this property is updated with an array of all asset ids in the collection\n\t\t * @memberof Netx.Collections.Assets\n\t\t * @alias assetIds\n\t\t * @type {array}\n\t\t */\n\t\tthis.assetIds = opts.assetIds || [];\n\n\t\t/**\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.chunkSize = parseInt(opts.chunkSize) || customConfig.CHUNK_SIZE;\n\n\t\t/**\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.curPage = opts.curPage || 0;\n\n\t\t// An Assets collection can manage paged fetching of its assets. If the value 'chunkSize' is smaller than the value 'pageSize',\n\t\t// chunk loading is enabled.\n\t\t// TODO: use a Netx.Models.Pager here.\n\t\t/**\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.pageSize = parseInt(opts.pageSize) || customConfig.PAGE_SIZE;\n\n\t\t/**\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tthis.routeContext = opts.routeContext || '';\n\n\t\t/**\n\t\t * For reserve\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.reserveCount = 0;\n\n\t\t/**\n\t\t * This will contain a SearchRules collection to describe the set of assets this collection will fetch.\n\t\t * @memberof Netx.Collections.Assets\n\t\t * @alias selection\n\t\t * @type {Netx.Collections.SearchRules}\n\t\t */\n\t\tthis.selection = opts.selection || new SearchRulesCollection();\n\t\tthis.addSubCollection(this.selection);\n\t\tdelete opts.selection;\n\n\t\t// We have this problem that a sort runs whenever a model changes - even if the change does not require a sort (for example: inCurrentCart)\n\t\tthis.sortableChange = true; //false;\n\n\t\tthis.pager = new PagerModel(\n\t\t\t{\n\t\t\t\tpageSize: this.pageSize,\n\t\t\t\tpagesToDisplay: 10,\n\t\t\t\t// I would really like to just do !( opts.pagerRoutes ) but lint yells about confusing use of `!`\n\t\t\t\troutesToPage: opts.pagerRoutes === false ? false : true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tcollection: this,\n\t\t\t},\n\t\t);\n\t\tthis.addSubModel(this.pager);\n\n\t\t/**\n\t\t * (because we can't pass strings directly in backbone.rpc method defs)\n\t\t * (because ... backbone.rpc!)\n\t\t * @property {object} categorizeArgs - Arguments for the batchCategorizeAssets rpc call\n\t\t * @property {string} categorizeArgs.add - Because RPC\n\t\t * @property {string} categorizeArgs.move - Because RPC\n\t\t * @property {string} categorizeArgs.remove - Because RPC\n\t\t * @property {number} categorizeArgs.targetCat - Category id\n\t\t * @property {string} categorizeArgs.action - Action to take (\"Add\", \"Move\", \"Remove\")\n\t\t */\n\t\tthis.categorizeArgs = {\n\t\t\tadd: 'add',\n\t\t\tmove: 'move',\n\t\t\tremove: 'remove',\n\t\t\ttargetCat: 0,\n\t\t\taction: '',\n\t\t};\n\n\t\t// TODO: Maybe SearchRules should manage this, aggregating these events into some sort of 'rulesChanged' event.\n\t\t// Or mabye Netx.Collection should do that generically.\n\n\t\t// Sometimes we fetch in 'faceted search' mode.\n\t\tconst useFS =\n\t\t\topts.useFacetedSearch != null\n\t\t\t\t? opts.useFacetedSearch === true\n\t\t\t\t: customConfig.USE_FACETED_SEARCH;\n\t\tconst fsOpts = opts.facetedSearchOptions || {};\n\t\tthis.useFacetedSearch(useFS, fsOpts);\n\n\t\t// Find & use any selection params set in options\n\t\tif (!_.isEmpty(opts)) {\n\t\t\t// are any of the options searchRule attributes?\n\t\t\t_.each(this.selection.at(0).keys(), (p) => {\n\t\t\t\tif (!opts[p]) return;\n\n\t\t\t\tif (_.isArray[p]) {\n\t\t\t\t\t// TODO: make this work for multidimensional options (more than one search rule specified) ?\n\t\t\t\t} else {\n\t\t\t\t\tthis.selection.at(0).set(p, opts[p]);\n\t\t\t\t}\n\t\t\t});\n\t\t\t// are any of the options searchRules properties?\n\t\t\t_.each(searchProperties, (p) => {\n\t\t\t\tif (opts[p] == null) return;\n\n\t\t\t\tthis.selection[p] = opts[p];\n\t\t\t});\n\t\t\t// are we attempting to set maxItems, which is not allowed in this context?\n\t\t\tif (opts.maxItems != null) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'Error: attempting to set maxItems in search rules collection, but it will be ignored. Set pageSize or chunkSize on asset collection instead.',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// this.chunkSize is used for fetching a subset of a page, for endless scroll & such.\n\t\t// allow chunkSize to change.\n\t\t//\n\t\tthis.fetch = _.wrap(this.fetch, (origFetch, opts) => {\n\t\t\tif (this.chunkSize) {\n\t\t\t\tthis.selection.maxItems = this.chunkSize + 1;\n\t\t\t}\n\t\t\treturn origFetch.call(this, opts);\n\t\t});\n\n\t\t// For fetching assets on the fly without affecting this collection\n\t\tthis.getAssetObjectIds = [];\n\n\t\t// When our selection changes, our contents are no longer valid\n\t\tconst invalidate = () => {\n\t\t\tthis.stopListening(this, 'useFaceted');\n\n\t\t\tdelete this.fetchingAssetCount;\n\t\t\tif (this.length) {\n\t\t\t\t// clear out our contents, so subsequent fetch() runs faster.\n\t\t\t\tthis.reset();\n\t\t\t}\n\t\t};\n\n\t\t// Hey, listen!\n\t\tthis\n\t\t\t// We have an extra fetch method that needs to simulate standard fetch events:\n\t\t\t.listenTo(\n\t\t\t\tthis,\n\t\t\t\t'request:fetchSpecificAssets',\n\t\t\t\t(collection, xhr, opts) => {\n\t\t\t\t\tif (!opts.silent) {\n\t\t\t\t\t\tthis.trigger('request:read', this, xhr, opts);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t)\n\t\t\t.listenTo(\n\t\t\t\tthis,\n\t\t\t\t'complete:fetchSpecificAssets',\n\t\t\t\t(collection, result, opts) => {\n\t\t\t\t\tif (!opts.silent) {\n\t\t\t\t\t\tthis.trigger('sync', this, this.models, opts);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t)\n\t\t\t// When a faceted search happens, this.selection.searchFacets wants to mirror our fetch events:\n\t\t\t.listenTo(this, 'request:read', (collection, xhr, opts) => {\n\t\t\t\topts = opts || {};\n\t\t\t\tif (!opts.silent && this.useFacetedSearch()) {\n\t\t\t\t\tthis.selection.searchFacets.trigger(\n\t\t\t\t\t\t'request:read',\n\t\t\t\t\t\tthis.selection.searchFacets,\n\t\t\t\t\t\txhr,\n\t\t\t\t\t\topts,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t})\n\t\t\t// When we sync listen for change in using faceted\n\t\t\t.listenTo(this, 'sync', (collection, result, opts) => {\n\t\t\t\tthis.stopListening(this, 'useFaceted');\n\t\t\t\tthis.listenTo(\n\t\t\t\t\tthis,\n\t\t\t\t\t'useFaceted',\n\t\t\t\t\t_.throttle((state) => {\n\t\t\t\t\t\tthis.fetch();\n\t\t\t\t\t}, 150),\n\t\t\t\t);\n\t\t\t\t// If so instructed, cache our selection after a successful sync.\n\t\t\t\t// (This allows Netx.assets.cursor to explore the same set of assets.)\n\t\t\t\tif (opts.cacheSelection) {\n\t\t\t\t\tdispatcher.trigger('asset:cursor:cacheFetch', this);\n\t\t\t\t}\n\t\t\t\tif (!opts.silent && this.useFacetedSearch()) {\n\t\t\t\t\tthis.selection.searchFacets.trigger(\n\t\t\t\t\t\t'sync',\n\t\t\t\t\t\tthis.selection.searchFacets,\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\topts,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t})\n\t\t\t// Always trigger a 'counted' event when this.pager.itemTotal changes to a defined value,\n\t\t\t// or a 'countUnknown' event when we no longer have a correct value.\n\t\t\t.listenTo(this.pager, 'change:itemTotal', (m, count) => {\n\t\t\t\tcount != null\n\t\t\t\t\t? this.trigger('counted', count)\n\t\t\t\t\t: this.trigger('countUnknown');\n\t\t\t})\n\t\t\t// We will get multiple events here; fire on just the first event\n\t\t\t.listenTo(\n\t\t\t\tthis.selection,\n\t\t\t\t'change add remove reset',\n\t\t\t\t_.throttle(invalidate, 250, {trailing: false}),\n\t\t\t)\n\t\t\t// Keep up with destruction\n\t\t\t.listenTo(this, 'destroy', (model, collection, opts) => {\n\t\t\t\t//Object {remove: true, add: true, merge: true, index: 0}\n\t\t\t\tlet count = this.pager.get('itemTotal');\n\t\t\t\tif (!count || isNaN(count)) count = 0;\n\t\t\t\tif (count) count--;\n\t\t\t\tthis.pager.set('itemTotal', count);\n\t\t\t})\n\t\t\t// Remove deleted assets\n\t\t\t.listenTo(dispatcher, 'asset:deleted', (assetId) => {\n\t\t\t\tthis.get(assetId) && this.remove(assetId);\n\t\t\t})\n\t\t\t// Listen for removal from category (if this happens to be a category asset collection)\n\t\t\t.listenTo(dispatcher, 'asset:moved:to:category', (assetId, newCat) => {\n\t\t\t\tif (!this.categoryId) return;\n\t\t\t\tlet asset = this.get(assetId);\n\t\t\t\tif (asset && newCat !== this.categoryId) {\n\t\t\t\t\tthis.remove(assetId);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'asset:editor:edited smartLabels:updated',\n\t\t\t\t(assetId) => {\n\t\t\t\t\tif (!this.get(assetId)) return;\n\t\t\t\t\tthis.reFetch({});\n\t\t\t\t},\n\t\t\t)\n\t\t\t// Listen for sort events\n\t\t\t.listenTo(dispatcher, 'user:sort', this.setSort);\n\t}\n\n\t/**\n\t * assetCount() returns an asset count, if the count is known. If the count isn't know,\n\t * it returns undefined and triggers an asset count call to the DAM. When the count is known,\n\t * 'counted' will be triggered on the collection with the correct count as an argument.\n\t *\n\t * Views that wish to display a count should call assetCount(), and listen for the 'counted' event.\n\t * @method\n\t * @return {number|undefined} Asset count\n\t */\n\tassetCount() {\n\t\tif (this.useFacetedSearch()) {\n\t\t\tif (!this.pager.get('itemTotal') && this.length) {\n\t\t\t\tthis.pager.set('itemTotal', this.selection.searchFacets.itemTotal || 0);\n\t\t\t}\n\t\t\treturn this.pager.get('itemTotal');\n\t\t}\n\n\t\t// Fixes false '0' occurences\n\t\tif (\n\t\t\tthis.pager.has('itemTotal') &&\n\t\t\tthis.pager.get('itemTotal') >= this.length\n\t\t) {\n\t\t\treturn this.pager.get('itemTotal');\n\t\t}\n\n\t\tif (this.fetchingAssetCount || this.length) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tthis.pager.set('itemTotal', 0);\n\t\treturn 0;\n\t}\n\n\t/**\n\t * Destroy all assets in this collection -- here and on the server.\n\t * @method\n\t * @fires module:asset#asset:deleted\n\t * @fires module:asset#asset:deleted:error\n\t */\n\tdestroyAll() {\n\t\t// Store for promises\n\t\tconst promises = [];\n\n\t\t// Do not create functions in while loops\n\t\tconst error = (assetId) => {\n\t\t\tdispatcher.trigger('asset:deleted:error', assetId);\n\t\t\tdispatcher.trigger('asset:deleted:error:' + assetId);\n\t\t};\n\t\tconst success = (assetId) => {\n\t\t\tdispatcher.trigger('asset:deleted', assetId);\n\t\t\tdispatcher.trigger('asset:deleted:' + assetId);\n\t\t};\n\n\t\t// Loop over all assets in this collection\n\t\tlet asset;\n\t\twhile (this.length > 0) {\n\t\t\tasset = this.at(0);\n\t\t\tconst aID = asset.get('assetId');\n\t\t\tpromises.push(\n\t\t\t\tasset.destroy().then(_.partial(success, aID), _.partial(error, aID)),\n\t\t\t);\n\t\t}\n\t\t// Wait for all promises to return\n\t\treturn $.when.apply($, promises);\n\t}\n\n\t/**\n\t * @method\n\t * @return {boolean}\n\t */\n\tisSortable() {\n\t\t// Cannot sort on cart or custom search types currently\n\t\tvar customSearchType = this.selection.findWhere({elementType: 9});\n\t\treturn _.isUndefined(customSearchType);\n\t}\n\n\t/**\n\t * Re-fetch all assets in collection\n\t * @method\n\t * @param {object} opts Fetch options\n\t */\n\treFetch(opts) {\n\t\t// See the wrapped fetch method in constructor\n\t\tconst hasChunkSize = !!this.chunkSize;\n\n\t\t// Backup values\n\t\tconst oldChunkSize = this.chunkSize;\n\t\tconst oldMaxItems = this.selection.maxItems;\n\n\t\t// Change to the amount of assets we currently have\n\t\thasChunkSize\n\t\t\t? (this.chunkSize = this.length)\n\t\t\t: (this.selection.maxItems = this.length + 1); // start positions begins at 1\n\n\t\treturn this.fetch(opts).always(() => {\n\t\t\t// Restore values\n\t\t\tthis.chunkSize = oldChunkSize;\n\t\t\tthis.selection.maxItems = oldMaxItems;\n\t\t});\n\t}\n\n\t/**\n\t * Respond to sort events\n\t * @method\n\t * @param {string} sortField Field to sort by\n\t * @param {number} sortOrder Sort direction ( 0/1 )\n\t */\n\tsetSort(sortField, sortOrder) {\n\t\tthis.selection.sortField = sortField;\n\t\tthis.selection.sortOrder = sortOrder;\n\t\tthis.trigger('sortChanged', this);\n\t}\n\n\t/**\n\t * selection start position basec on paging\n\t * @method\n\t * defaults to 1\n\t */\n\tsetStartPosition() {\n\t\tthis.curPage = this.curPage || 1;\n\t\t// otherwise set start position based on page\n\t\tthis.selection.startPosition = this.pageSize * (this.curPage - 1) + 1;\n\t}\n\n\t/**\n\t * Create an AssetSet model describing this set of assets.\n\t * This generic version returns just the current set of assets in this collection at this moment -- ignorant of paging, selection, etc.\n\t * Subclasses (cartAssets, searchAssets, categoryAssets, etc) will override this to return more meaningful asset sets.\n\t * @method\n\t * @return {module:asset/models/assetSet} AssetSet\n\t */\n\ttoAssetSet() {\n\t\treturn new AssetSetModel({\n\t\t\ttype: assetSetTypes.asset,\n\t\t\tids: this.ids(),\n\t\t\tlabel: i18n.t('i18n.nAssets', {count: this.length}),\n\t\t\tmodels: this.models,\n\t\t});\n\t}\n\n\t////////////////////////////////////\n\t// CATEGORIZE\n\t////////////////////////////////////\n\n\t/**\n\t * @method\n\t * @param {number} catId Category id\n\t * @todo DAM-8470, then unwrap this.\n\t */\n\taddToCategory(catId) {\n\t\tconst d = new $.Deferred();\n\t\tconst cat = new CategoryModel({id: catId});\n\t\tcat.fetch().then((c) => {\n\t\t\tconst assetIds = this.ids();\n\t\t\tif (!assetIds.length) {\n\t\t\t\treturn d.reject();\n\t\t\t}\n\n\t\t\tthis.targetCategory = catId;\n\t\t\tthis._addToCategory().then(() => {\n\t\t\t\td.resolve();\n\t\t\t}, d.reject);\n\t\t}, d.reject);\n\t\treturn d.promise();\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} catId Category id\n\t * @todo DAM-8470, then unwrap this.\n\t */\n\tmoveToCategory(catId) {\n\t\tconst d = new $.Deferred();\n\t\tconst cat = new CategoryModel({id: catId});\n\t\tcat.fetch().then((c) => {\n\t\t\tvar assetIds = this.ids();\n\t\t\tif (!assetIds.length) {\n\t\t\t\treturn d.reject();\n\t\t\t}\n\n\t\t\tthis.targetCategory = catId;\n\t\t\tthis._moveToCategory().then(() => {\n\t\t\t\td.resolve();\n\t\t\t}, d.reject);\n\t\t}, d.reject);\n\t\treturn d.promise();\n\t}\n\n\t////////////////////////////////////\n\t// !CATEGORIZE\n\t////////////////////////////////////\n\n\t////////////////////////////////////\n\t// CHUNKS\n\t////////////////////////////////////\n\n\t/**\n\t * For chunked loading of pages, addChunk loads the next not-yet-loaded section of a page.\n\t * @method\n\t * @param {object} opts Chunk fetch options\n\t */\n\taddChunk(opts = {}) {\n\t\tif (\n\t\t\t// Do nothing if we're in the midst of a sync, or if we have no more chunks.\n\t\t\tthis.syncing ||\n\t\t\tthis.lastChunk ||\n\t\t\tthis.pageSize == this.length ||\n\t\t\tthis.length >= this.pageSize\n\t\t) {\n\t\t\treturn new $.Deferred().resolve();\n\t\t}\n\n\t\tconst lengthBefore = this.length;\n\t\t// disable the 'loading' class/div behaviour when loading a chunk\n\t\topts.chunk = this.loadingChunk = true;\n\n\t\treturn this.fetch(opts).then(() => {\n\t\t\t// if we didn't get anything new?\n\t\t\tif (this.length == lengthBefore && !this.lastChunk) {\n\t\t\t\t// Out-of-order fetches can occur, leading to a deadly chunk loop.\n\t\t\t\t// Clean that up by re-fetching the entire page so far.\n\t\t\t\topts.refetch = true;\n\t\t\t\treturn this.fetch(opts).then((response) => {\n\t\t\t\t\tdelete this.loadingChunk;\n\t\t\t\t\treturn this;\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tdelete this.loadingChunk;\n\t\t\treturn this;\n\t\t});\n\t}\n\n\t////////////////////////////////////\n\t// !CHUNKS\n\t////////////////////////////////////\n\n\t////////////////////////////////////\n\t// FACETS\n\t////////////////////////////////////\n\n\t/**\n\t * This checks that there are no invalid facet search types in our search rules\\\n\t * @method\n\t * @return {boolean} Valid\n\t */\n\tcheckValidFacetSearchType() {\n\t\tlet valid = true;\n\t\tthis.selection.each((m) => {\n\t\t\tif (valid && _.indexOf(facetSupports, m.get('elementType')) < 0) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\t\t});\n\n\t\treturn valid;\n\t}\n\n\t/**\n\t * When an option is selected or deselected in our search facets, this function is called.\n\t * By default it triggers a fetch. Override it for different behavior.\n\t * @method\n\t * @param {Netx.Models.SearchFacet} model SearchFacet model that changed\n\t * @param {object} opts Options\n\t */\n\tfacetSelected(model, collection, opts) {\n\t\t// Reset start position to 1\n\t\tthis.selection.startPosition = 1;\n\t\tthis.pager.gotoPage(1, true);\n\t\tthis.fetch(_.extend({}, opts, {duplicateQueryPolicy: 'abort'}));\n\t}\n\n\t/**\n\t * calling this.useFacetedSearch() with a boolean sets faceted search mode on or off,\n\t * and returns the state.\n\t * Calling it with no arguments just returns the state.\n\t * @method\n\t * @param {boolean} state true (on) or false (off)\n\t * @param {object} opts options to set on the searchFacets child collection -- such as 'filterMode'\n\t */\n\tuseFacetedSearch(state, opts) {\n\t\t// Check that we are using a valid search type\n\t\tconst validSearchType = this.checkValidFacetSearchType();\n\t\t// Let it set the things it would normally set regardless\n\t\tif (state != null) {\n\t\t\tif (state) {\n\t\t\t\t_.extend(this.selection.searchFacets, opts || {});\n\t\t\t\t// Listen for facet options to change\n\t\t\t\tthis.stopListening(dispatcher, 'search:facet:option:changed').listenTo(\n\t\t\t\t\tdispatcher,\n\t\t\t\t\t'search:facet:option:changed',\n\t\t\t\t\t(model, collection) => {\n\t\t\t\t\t\t// Make sure we're the right collection:\n\t\t\t\t\t\t// added !this.hasRouteContext() because collection !== this.selection.searchFacets\n\t\t\t\t\t\t// results in false for both category and search asset collections\n\t\t\t\t\t\t// are they using the same facet collection? Not seeing ids to compare\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tcollection !== this.selection.searchFacets ||\n\t\t\t\t\t\t\t!this.hasRouteContext()\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\tthis.facetSelected.apply(this, arguments);\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthis.stopListening(dispatcher, 'search:facet:option:changed');\n\t\t\t}\n\n\t\t\tthis._usingFacetedSearch = state;\n\t\t\t// This only matters if they have chosen a valid search type\n\t\t\tif (validSearchType) {\n\t\t\t\tif (!state) this.selection.searchFacets.turnOff();\n\t\t\t\tthis.trigger('useFaceted', state, this);\n\t\t\t} else if (state && !validSearchType) {\n\t\t\t\t// Dispatch something to let the user know that facets have been disabled for this search type\n\t\t\t}\n\t\t}\n\t\t// Not valid\n\t\t// We do it like this so we are not actually turning facets off if a user wished to turn them on\n\t\t// we are just turning them off for this search type but will honor the users wishes to have facets on for\n\t\t// all other valid searches\n\t\telse if (!validSearchType) {\n\t\t\t// Dispatch something to let the user know that facets have been disabled for this search type\n\t\t\tthis.selection.searchFacets.turnOff();\n\t\t\treturn false;\n\t\t}\n\t\t// We made it\n\t\treturn this._usingFacetedSearch;\n\t}\n\t////////////////////////////////////\n\t// !FACETS\n\t////////////////////////////////////\n\n\t////////////////////////////////////\n\t// PAGING\n\t////////////////////////////////////\n\t/**\n\t * Determine if this collection is the one referred to in the route hash\n\t * helpful for search facets, is this the right collection? have we changed contexts?\n\t * should facets be reset or are we paging? Is our context in the location.hash?\n\t * @method\n\t */\n\thasRouteContext() {\n\t\t// Check for unescaped and escaped\n\t\tconst hash = unescapeURI(window.location.hash);\n\t\treturn (\n\t\t\thash.indexOf(unescapeURI(this.routeContext)) > -1 ||\n\t\t\thash.indexOf(escapeURI(this.routeContext)) > -1\n\t\t);\n\t}\n\n\t////////////////////////////////////\n\t// !PAGING\n\t////////////////////////////////////\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Assets';\n\t}\n}\n","import Base from 'netxcore@netx/core-asset/collections/assets';\n\nimport {isMobile} from '@netx/core-next/utils/browser';\nimport {systemFacets} from '@netx/core-search/properties/search';\nimport {escapeURI} from '@netx/core/utils/escapeURI';\nimport {unescapeURI} from '@netx/core/utils/unescapeURI';\n\n/** @override */\nexport default class Assets extends Base {\n\tget isSyncing() {\n\t\treturn this._rpc && this.syncing;\n\t}\n\t// gross, for now overriding the whole read\n\t// parser to filter and sort facets\n\t/** @override */\n\tget parsers() {\n\t\treturn {\n\t\t\t...super.parsers,\n\t\t\tread(result, opts) {\n\t\t\t\t// Did we fetch faceted, or normal?\n\t\t\t\tconst facetedResult = this.useFacetedSearch();\n\t\t\t\tlet assets = result.results || result;\n\n\t\t\t\t// DAM-15036 - Omit any assets without valid assetIds\n\t\t\t\tassets = _.filter(assets, (a) => {\n\t\t\t\t\tif (!a.assetId) {\n\t\t\t\t\t\tconsole.log('server returned a bogus asset');\n\t\t\t\t\t}\n\t\t\t\t\treturn a.assetId;\n\t\t\t\t});\n\n\t\t\t\t// Check length of results; did we reach the end yet?\n\t\t\t\tif (assets.length > this.chunkSize) {\n\t\t\t\t\tassets.pop();\n\t\t\t\t\tthis.lastChunk = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.lastChunk = true;\n\t\t\t\t}\n\n\t\t\t\t// Don't remove existing assets if we are doing a chunk fetch.\n\t\t\t\t// (This options object will be passed to set.)\n\t\t\t\topts.remove = !opts.chunk;\n\n\t\t\t\tif (facetedResult) {\n\t\t\t\t\tconst portalAttrIds = Netx.attributes.ids();\n\t\t\t\t\tresult.facets = result.facets.filter((facetOb) =>\n\t\t\t\t\t\tportalAttrIds.includes(facetOb.id),\n\t\t\t\t\t);\n\t\t\t\t\tresult.facets.sort(function (a, b) {\n\t\t\t\t\t\treturn portalAttrIds.indexOf(a.id) - portalAttrIds.indexOf(b.id);\n\t\t\t\t\t});\n\n\t\t\t\t\tconst systemFacetLabels = systemFacets;\n\t\t\t\t\tconst facets = _.map(result.facets, (facet) =>\n\t\t\t\t\t\t_.extend(facet, {\n\t\t\t\t\t\t\ttitle: systemFacetLabels[facet.label] || facet.label,\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\n\t\t\t\t\t// Only return facets that have options with a count\n\t\t\t\t\tthis.selection.searchFacets.set(facets);\n\t\t\t\t\tthis.selection.searchFacets.itemTotal = result.size;\n\n\t\t\t\t\tthis.pager.set({\n\t\t\t\t\t\titemTotal: result.size,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn assets;\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\tsuper(models, opts);\n\n\t\t// DAM-19030 - there's gotta be a better way, but for now...\n\t\tif (isMobile()) {\n\t\t\tthis.pager.set({pagesToDisplay: 6});\n\t\t}\n\n\t\t// parse method?\n\t\tthis.on('sync', (result, options) => {\n\t\t\tdispatcher.trigger('search:facet:onOff', this);\n\t\t});\n\t}\n\n\t/**\n\t * Determine if this collection is the one referred to in the route hash\n\t * Overriding to check for routeContext.length, so asset.cursor doesn't fetch with every search\n\t * @override\n\t */\n\thasRouteContext() {\n\t\tconst {hash} = window.location;\n\t\tconst unescapedHash = unescapeURI(window.location.hash);\n\t\tconst routeContext = this.routeContext;\n\t\t// Check for unescaped and escaped\n\t\treturn (\n\t\t\trouteContext.length &&\n\t\t\t// DAM-19489 DAM-19485 - hash with \"cart-assets\" gives a\n\t\t\t// false positives for a routeContext of \"cart\"\n\t\t\t(routeContext !== 'cart' || routeContext === hash) &&\n\t\t\t(unescapedHash.indexOf(unescapeURI(routeContext)) > -1 ||\n\t\t\t\tunescapedHash.indexOf(escapeURI(routeContext)) > -1)\n\t\t);\n\t}\n}\n","import {appRouter} from '@netx/core-next/instance/router';\nimport Base from './assetView';\nimport Template from '../templates/assetListItemView.html';\n\nimport CartAssetsCollection from '@netx/core-cart/collections/cartAssets';\n\n/**\n * Displays a single asset view\n * @class\n */\nexport default class AssetListItemView extends Base {\n\t/**\n\t * @override\n\t * @listens module:cart#cart:saved:removing:assets\n\t */\n\tconstructor(opts = {}) {\n\t\topts.events = {\n\t\t\tclick: 'clicked',\n\t\t\t...opts.events,\n\t\t};\n\t\topts.className = `asset ${opts.className || ''}`;\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\t// We are in a saved cart\n\t\tif (this.collection instanceof CartAssetsCollection && this.collection.id) {\n\t\t\t// Look me up if I am being removed\n\t\t\tthis.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'cart:saved:removing:assets',\n\t\t\t\t(assetIds, cartId) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tcartId === this.collection.id &&\n\t\t\t\t\t\t_.indexOf(assetIds, this.model.id) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.$el.addClass('removing-from-cart');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `click` event\n\t */\n\tclicked(e) {\n\t\tif (e.originalEvent.defaultPrevented) return;\n\t\tappRouter.navigate(`asset/${this.model.id}`, true);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetListItemView';\n\t}\n}\n","import {appRouter} from '@netx/core-next/instance/router';\nimport Base from 'netxcore@netx/core-asset/views/assetListItemView';\nimport {isMobile} from '@netx/core-next/utils/browser';\nimport {isPublicUser} from '@netx/core-user-next/utils/isPublicUser';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\n\nimport {\n\tfaArrowDown,\n\tfaCheck,\n\tfaMinus,\n\tfaPlus,\n\tfaShare,\n} from '@fortawesome/pro-solid-svg-icons';\n\nconst icons = Base.initializeIcons({\n\tfaArrowDown,\n\tfaCheck,\n\tfaMinus,\n\tfaPlus,\n\tfaShare,\n});\n\nimport cmsConfig from '@netx/core-cms/config';\n\n/** @override */\nexport default class AssetListItemView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.events = {\n\t\t\tdragend: 'dragEnd',\n\t\t\tdragstart: 'dragStart',\n\t\t\tselected: 'selected',\n\t\t\t'click [data-nx-control=\"toggle-cart\"]': 'toggleCart',\n\t\t\t'click .hit-area': 'assetRoute',\n\t\t\tclick: function (e) {\n\t\t\t\t// gross\n\t\t\t\t// tapping routes to asset\n\t\t\t\t// but not if user tapped on an action\n\t\t\t\tif (isMobile() && !e.target.classList.contains('nx-action')) {\n\t\t\t\t\tthis.assetRoute(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\tpan: 'hammerPan',\n\t\t\t'keydown .action': 'onKeyDown',\n\t\t\t...opts.events,\n\t\t};\n\t\topts.icons = {...icons, ...opts.icons};\n\t\tsuper(opts);\n\n\t\t// todo render only when going from thumb to preview\n\t\t// styles don't refresh when going to thumb however so...\n\t\tthis.listenTo(dispatcher, 'asset:thumb:set', this.render);\n\n\t\t// We are in a saved cart\n\t\tif (\n\t\t\tthis.collection.constructor.__name__ === 'CartAssets' &&\n\t\t\tthis.collection.id\n\t\t) {\n\t\t\t// Look me up if I am being removed\n\t\t\tthis.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'cart:saved:removing:assets',\n\t\t\t\t(assetIds, cartId) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tcartId === this.collection.id &&\n\t\t\t\t\t\t_.indexOf(assetIds, this.model.id) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\t// Fake progress\n\t\t\t\t\t\t// TODO: We should be able to accomplish this with `simulateProgress`/`endProgressSimulation`\n\t\t\t\t\t\tlet width = 0;\n\t\t\t\t\t\tthis.interval && clearInterval(this.interval);\n\t\t\t\t\t\tthis.interval = setInterval(() => {\n\t\t\t\t\t\t\twidth += (100 - width) * 0.2;\n\t\t\t\t\t\t\tthis.$progressBar && this.$progressBar.width(`${width}%`);\n\t\t\t\t\t\t}, 500);\n\n\t\t\t\t\t\t// Just in case - we also monitor this cleanup in remove - do not want a rogue interval out there\n\t\t\t\t\t\t// TODO: Check that we were part of the param `assetIds` array and that the cartId is `this.collection`s id?\n\t\t\t\t\t\tthis.listenToOnce(\n\t\t\t\t\t\t\tdispatcher,\n\t\t\t\t\t\t\t'cart:removed',\n\t\t\t\t\t\t\t(assetIds, cartId) => {\n\t\t\t\t\t\t\t\tthis.interval && clearInterval(this.interval);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\t/** @override */\n\tbindEvents() {\n\t\tsuper.bindEvents();\n\n\t\tif (!this.hammer) {\n\t\t\tthis.hammer = new Hammer(this.el);\n\t\t}\n\n\t\tthis.hammer.on('pan', this.hammerPan.bind(this));\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * @method\n\t * @fires module:cart#cart:add\n\t */\n\tselected() {\n\t\tdispatcher.trigger('cart:add', this.model);\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\n\t\tconst attr = this.assetAttributes.at(0);\n\t\tconst val = this.model.getAttribute(attr.id);\n\n\t\tObject.assign(this.templateVars, {\n\t\t\tattrName: attr.get('name'),\n\t\t\tattrValue: val || '',\n\t\t\trequireLogin: cmsConfig.requireLogin,\n\t\t\tthumbSrc:\n\t\t\t\tparseInt(getPreference('assetList.thumbSize')) >\n\t\t\t\tparseInt(getPreference('image.thumb_max_length'))\n\t\t\t\t\t? this.model.get('previewUrl')\n\t\t\t\t\t: this.model.get('thumbUrl'),\n\t\t});\n\n\t\t// THEM-1603 - public user cart, now with more local storage!\n\t\tif (isPublicUser()) {\n\t\t\tthis.isInCart();\n\t\t}\n\t}\n\n\t/**\n\t * Check local storage instead of relying on the asset model\n\t * @method\n\t */\n\tisInCart() {\n\t\tif (Netx.cart) {\n\t\t\tthis.$el.toggleClass(\n\t\t\t\t'in-cart',\n\t\t\t\tNetx.cart.current.isInCart(this.model.id),\n\t\t\t);\n\t\t}\n\t}\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\tthis.$addToCart = this.$('.add-to-cart');\n\t\tthis.$removeFromCart = this.$('.remove-from-cart');\n\n\t\t// this.$el.hammer();\n\t\tif (isPublicUser()) {\n\t\t\tthis.isInCart();\n\t\t}\n\t\tvar iconOverride = _.overrideDefaultIcon(this.model.get('previewUrl'));\n\t\tif (iconOverride) {\n\t\t\tthis.$el.addClass(iconOverride);\n\t\t}\n\n\t\tthis.$el.attr('tabindex', -1);\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `pan` event\n\t */\n\thammerPan(e) {\n\t\tconst additionalEvent = e.additionalEvent;\n\n\t\tif (additionalEvent) {\n\t\t\tif (\n\t\t\t\tMath.abs(e.deltaX) <= 50 ||\n\t\t\t\t(additionalEvent !== 'panright' && additionalEvent !== 'panleft')\n\t\t\t)\n\t\t\t\treturn;\n\n\t\t\tif (additionalEvent == 'panright') {\n\t\t\t\tthis.undelegateEvents();\n\t\t\t\tthis.$el.removeClass('with-actions');\n\t\t\t\t_.delay(() => {\n\t\t\t\t\tthis.delegateEvents();\n\t\t\t\t}, 500);\n\t\t\t} else if (additionalEvent == 'panleft') {\n\t\t\t\tif (!this.$el.hasClass('with-options')) {\n\t\t\t\t\tthis.undelegateEvents();\n\t\t\t\t\t$(e.target.parentNode)\n\t\t\t\t\t\t.find('.with-actions')\n\t\t\t\t\t\t.removeClass('with-actions');\n\t\t\t\t\tthis.$el.addClass('with-actions');\n\t\t\t\t\t_.delay(() => {\n\t\t\t\t\t\tthis.delegateEvents();\n\t\t\t\t\t}, 500);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e Click event\n\t * @fires module:cart#cart:toggle\n\t */\n\ttoggleCart(e) {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tconst isRemove = e.currentTarget.classList.contains('remove-from-cart');\n\t\tthis.$addToCart.attr('tabindex', isRemove ? 0 : -1);\n\t\tthis.$removeFromCart.attr('tabindex', isRemove ? -1 : 0);\n\n\t\tdispatcher.trigger('cart:toggle', this.model);\n\n\t\tif (isPublicUser()) {\n\t\t\t// check local storage instead of relying on the asset model\n\t\t\tthis.isInCart();\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `click` event\n\t */\n\tclicked(e) {\n\t\t// do nothing\n\t}\n\t/**\n\t * @method\n\t * @param {event} e `click` event\n\t */\n\tassetRoute(e) {\n\t\tconst type = this.model.get('template') ? 'template' : 'asset';\n\t\tappRouter.navigate(`#${type}/${this.model.id}`, true);\n\t}\n\t/**\n\t * @method\n\t * @param {event} e `keydown` event\n\t * It's not pretty, but it manages\n\t * arrow key focus on list item actions\n\t *\n\t * todo: refactor with react\n\t */\n\tonKeyDown(e) {\n\t\tconst code = e.keyCode;\n\t\tif (code === 39 || code === 37) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t}\n\n\t\t// current focus\n\t\tlet $currentTarget = $(e.currentTarget);\n\n\t\t// possibly an action\n\t\tconst actionStr = $currentTarget.attr('data-action');\n\n\t\t// try and find something new to focus on\n\t\tlet $nextTarget;\n\n\t\tif (code === 39) {\n\t\t\t// arrow to next\n\n\t\t\tconst viewAction = e.currentTarget.classList.contains('detail-view');\n\n\t\t\tif (viewAction) {\n\t\t\t\t$nextTarget = $currentTarget\n\t\t\t\t\t.parent()\n\t\t\t\t\t.find('.action-items .action:first-child');\n\t\t\t} else {\n\t\t\t\t$nextTarget = $currentTarget.nextAll('.action:visible').first();\n\t\t\t}\n\t\t} else if (code === 37) {\n\t\t\t// arrow to previous\n\n\t\t\tconst viewAction = e.currentTarget.classList.contains('download');\n\n\t\t\tif (viewAction) {\n\t\t\t\t$nextTarget = $currentTarget\n\t\t\t\t\t.parent()\n\t\t\t\t\t.parent()\n\t\t\t\t\t.find('.detail-view.action');\n\t\t\t} else {\n\t\t\t\t$nextTarget = $currentTarget.prevAll('.action:visible').first();\n\t\t\t}\n\t\t\t// space or enter\n\t\t} else if (actionStr && actionStr.length && (code === 32 || code === 13)) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\n\t\t\t// going back and forth with this one, wtf\n\n\t\t\t// const action = Netx.Actions.Find(actionStr) || false;\n\t\t\t// if (action) {\n\t\t\t// console.log('ACTION! start', actionStr);\n\t\t\t// this.performAction(action, [this, e]);\n\t\t\t// }\n\t\t}\n\n\t\tif ($nextTarget) {\n\t\t\tthis.$('.action').attr('tabindex', -1);\n\t\t\t$nextTarget.attr('tabindex', 0);\n\t\t\t$nextTarget.focus();\n\t\t}\n\t}\n}\n","/**\n * A view for listing a collection of assets\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/assetListView.html';\n\nimport ChildView from './assetListItemView';\nimport ChildViews from '@netx/core/functionality/childViews';\n\nimport UserSortView from '@netx/core-user/views/userSortView';\n\nimport customConfig from '../config';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\nimport {assetAttributes} from '@netx/core-attribute/singletons';\nimport {\n\tcurrentUserMeetsUserLevel,\n\tUserLevel,\n} from '@netx/core-user-next/utils/currentUserMeetsUserLevel';\n\n// Bumsmack\nimport '../lib/jquery.bum-smack-1.2.0/jquery.bum-smack';\nimport '../lib/jquery.bum-smack-1.2.0/netx-jquery.bum-smack';\n\nexport default class AssetListView extends Base {\n\t/**\n\t * @override\n\t * @listens module:app#app:resize\n\t * @listens module:asset#asset:task:complete\n\t * @listens module:asset#asset:tasks:complete\n\t */\n\tconstructor(opts = {}) {\n\t\topts.childView = _.extend(\n\t\t\t{\n\t\t\t\tviewClass: ChildView,\n\t\t\t\ttarget: '.nx-childviews',\n\t\t\t\tid(model) {\n\t\t\t\t\treturn `asset-${model.get('assetId')}`;\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\t'data-contextmenu-target': 'assetContextMenu',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\topts.childView,\n\t\t);\n\t\topts.className = opts.className || 'asset-list-wrapper';\n\t\topts.headerTitle = opts.headerTitle || i18n.t('i18n.assets');\n\t\topts.template = opts.template || Template;\n\t\topts.loadingClassObjects = opts.loadingClassObjects || ['collection'];\n\t\tsuper(opts);\n\n\t\t// Debounced methods\n\t\tthis.checkForChunks = _.debounce(this.checkForChunks, 100);\n\n\t\t/**\n\t\t * View-specific message controlled in the template\n\t\t * @type {String}\n\t\t */\n\t\tthis.message = opts.message || '';\n\n\t\t/**\n\t\t * the threshold argument to Jquery-Bumsmack; specifies how close to the\n\t\t * bottom of the scrollContainer the smack event will be triggered.\n\t\t * @type {string}\n\t\t */\n\t\tthis.scrollThreshold = opts.scrollThreshold || '.9';\n\t\tthis.scrollEdge = opts.scrollEdge || 'bottom';\n\n\t\t/**\n\t\t * @memberOf Netx.Views.AssetListView\n\t\t * @alias assetAttributes\n\t\t * @type {module:asset/collections/attributes}\n\t\t */\n\t\tthis.assetAttributes = opts.assetAttributes || assetAttributes;\n\n\t\t/**\n\t\t * @memberOf Netx.Views.AssetListView\n\t\t * @alias userPrefKeys\n\t\t * @type {object}\n\t\t */\n\t\tthis.userPrefKeys = _.extend(\n\t\t\t{\n\t\t\t\tlayoutType: 'asset.list.type',\n\t\t\t\tsortField: 'asset.list.sort.field',\n\t\t\t\tsortOrder: 'asset.list.sort.order',\n\t\t\t},\n\t\t\topts.userPrefKeys,\n\t\t);\n\n\t\t/**\n\t\t * Currently selected list layout type\n\t\t * @memberOf Netx.Views.UserSortView\n\t\t * @alias listLayoutTypeSelected\n\t\t * @type {string}\n\t\t */\n\t\tthis.listLayoutTypeSelected =\n\t\t\tgetPreference(this.userPrefKeys.layoutType) || 'list';\n\n\t\t// Hey, listen!\n\t\tthis\n\t\t\t// When an asset task is done (importing etc) let the mosaic plugin know\n\t\t\t.listenTo(dispatcher, 'asset:task:complete', (task) => {\n\t\t\t\tif (this.collection.get(task.id)) {\n\t\t\t\t\tthis.assetTaskDone();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.listenTo(dispatcher, 'asset:tasks:complete', () => {\n\t\t\t\tthis.assetTaskDone();\n\t\t\t})\n\t\t\t.listenTo(this.collection, 'thumbnailUpdated', () => {\n\t\t\t\tthis.assetTaskDone();\n\t\t\t});\n\n\t\t// Load in chunks, if configured.\n\t\tif (this.collection.pageSize > this.collection.chunkSize) {\n\t\t\tthis.listenTo(this, 'shown', this.checkForChunks);\n\t\t}\n\t}\n\n\t/** @override */\n\tbindCollectionEvents() {\n\t\tsuper.bindCollectionEvents();\n\n\t\tthis.listenTo(this.collection, 'sortChanged', () => {\n\t\t\tthis.isShown && dispatcher.trigger('asset:sort', this.collection);\n\t\t});\n\n\t\tif (this.collection.pageSize > this.collection.chunkSize) {\n\t\t\tthis.listenTo(this.collection, 'sync', this.checkForChunks);\n\t\t}\n\t\treturn this.listenTo(this.collection, 'thumbnailUpdated', () => {\n\t\t\tthis.assetTaskDone();\n\t\t});\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\t// Not sure why we are adamant about this?\n\t\tdelete this.$dataCount;\n\t\tdelete this.$assetCount;\n\n\t\t// Cleanup\n\t\tthis.userSortView && this.removeSubView(this.userSortView, true);\n\n\t\tsuper.preRender();\n\n\t\t// Vars\n\t\tconst sortField = getPreference(this.userPrefKeys.sortField) || 'name';\n\t\tlet sortOrder = parseInt(getPreference(this.userPrefKeys.sortOrder));\n\n\t\t// Store\n\t\tthis.listLayoutTypeSelected =\n\t\t\tgetPreference(this.userPrefKeys.layoutType) || 'list';\n\n\t\t// Defautl sort order if not set\n\t\tif (isNaN(sortOrder)) {\n\t\t\tsortOrder = 1;\n\t\t}\n\n\t\t// Additional template vars\n\t\t_.extend(this.templateVars, {\n\t\t\tassetAttributes: this.attributeSetsSelection\n\t\t\t\t? this.attributeSetsSelection.getAttributes()\n\t\t\t\t: this.assetAttributes,\n\t\t\theaderTitle: this.headerTitle,\n\t\t\tmessage: this.message,\n\t\t\tuniqueId: this.uniqueId,\n\t\t\tsortable: this.collection.isSortable(),\n\t\t\tsortField: sortField,\n\t\t\tsortOrder: sortOrder,\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Cache\n\t\tthis.$assetCount = this.$('.asset-count');\n\t\tthis.$dataCount = this.$('[data-count]');\n\t\tthis.$scrollContainer = this.$el.closest('.scrollable');\n\n\t\t// Show sorting interface?\n\t\tif (this.autoSort) {\n\t\t\tconst sortViewTarget = this.$('[data-sortview]');\n\t\t\tif (\n\t\t\t\tsortViewTarget.length &&\n\t\t\t\tcurrentUserMeetsUserLevel(UserLevel.BROWSER)\n\t\t\t) {\n\t\t\t\t// User sort view\n\t\t\t\tthis.userSortView = this.addSubView(\n\t\t\t\t\tnew UserSortView({\n\t\t\t\t\t\tel: sortViewTarget,\n\t\t\t\t\t\tmodel: this.model,\n\t\t\t\t\t\tcollection: this.collection,\n\t\t\t\t\t}).render(),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (this.respectLayoutType) {\n\t\t\t// Set our currently chosen style: 'list' or 'grid' or 'card'\n\t\t\tconst listPref = getPreference(this.userPrefKeys.layoutType) || 'list';\n\t\t\tthis.$el.removeClass(customConfig.LIST_TYPE.join(' ')).addClass(listPref);\n\t\t}\n\n\t\tthis.$el.toggleClass('has-message', this.message !== '');\n\t}\n\n\t/**\n\t * @method\n\t */\n\tassetTaskDone() {\n\t\t// ...\n\t}\n\n\t/** @method */\n\tcheckForChunks() {\n\t\tif (!this.$childTargetEl) {\n\t\t\treturn _.delay(_.bind(this.checkForChunks, this), 250);\n\t\t}\n\t\t// Are we hidden? ('shown' will trigger this method again)\n\t\t// Or is our collection empty?\n\t\tif (this.$el.isHidden() || !this.collection.length || !this.renderedOnce) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Find the height of the last row of our list, which hopefully is close to the same height as the next row we add.\n\t\t// (in grid mode these can be different by 5-10% or so, at most.) // TODO: calculate that value?\n\t\tlet lastRowHeight = this.$childTargetEl.find('.asset:last').outerHeight();\n\t\tif (!lastRowHeight) {\n\t\t\t// It can happen that our first chunk has no height because none of the images have been fetched from the server yet.\n\t\t\t// In that case, try again in a little while.\n\t\t\t_.delay(_.bind(this.checkForChunks, this), 250);\n\n\t\t\t// TODO: Better would be to get events as the images for assets in the chunk arrive in the browser.\n\t\t\t// Perhaps this view should listen for 'load' events from img tags, trigger updateGrid() for those, and have updateGrid() call checkForChunks() ?\n\t\t\treturn;\n\t\t} else {\n\t\t\t// Find the current height of our element, which slides around inside the scrollContainer:\n\t\t\t// var heightBefore = this.$childrenEl.outerHeight();\n\n\t\t\tconst sch = this.$scrollContainer.outerHeight(true, true);\n\t\t\tconst sco = this.$scrollContainer[0].scrollHeight;\n\t\t\tconst sct = this.$scrollContainer[0].scrollTop;\n\n\t\t\tif (sct + lastRowHeight > sco - sch && !this.collection.lastChunk) {\n\t\t\t\t// Tell the collection to fetch another chunk.\n\t\t\t\t// TODO: NO TOUCHING! trigger an event instead of calling a method directly here.\n\t\t\t\t// (Make it a handler on the collection, so a theme can override or intercept.)\n\t\t\t\tthis.collection.addChunk();\n\t\t\t} else if (!this.collection.lastChunk) {\n\t\t\t\tthis.$scrollContainer\n\t\t\t\t\t.smack({\n\t\t\t\t\t\tthreshold: this.scrollThreshold,\n\t\t\t\t\t\tedge: this.scrollEdge,\n\t\t\t\t\t})\n\t\t\t\t\t.then(_.bind(this.checkForChunks, this));\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @method */\n\tresize() {\n\t\tif (!this.isShown || !this.renderedOnce) return;\n\n\t\tif (this.collection.pageSize > this.collection.chunkSize) {\n\t\t\tthis.checkForChunks();\n\t\t}\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetListView';\n\t}\n}\n\n// Functionality\nChildViews(AssetListView);\n","/**\n * NetxDragSelect\n * @extends NetxDrag\n * TODO: define a contianer other than body and a zindex (so we dont go over the header and stuff on autoscroll )\n */\nimport 'javascript-detect-element-resize';\nimport netxDrag from './jquery-netx-drag';\n\n// Constructor\nfunction NetxDragSelect(options, el) {\n\t// Extedn options\n\tthis.options = options;\n\t// Main element\n\tthis.el = $(el);\n\t// Uniqueness\n\tthis.uuid = new Date().getTime();\n\tthis.baseName = 'netx-drag-select';\n\tthis.name = this.baseName + '-' + this.uuid;\n\tthis.ns = '.' + this.name;\n\n\t(this.clickTimer = null), (this.checkingClick = false);\n\tthis.dblClicked = true;\n\n\tif (!this.options.boundContainer) {\n\t\tthis.options.boundContainer = this.el[0];\n\t}\n\n\tthis.$proxyEl = $(this.options.boundContainer);\n\n\tif (!this.options.scrollContainer)\n\t\tthis.options.scrollContainer = this.options.boundContainer;\n\n\t// Target\n\tthis.targetItem = $(this.options.boundContainer);\n\tthis.targetItems = $(this.options.boundContainer);\n\t// Selection\n\tthis.selected = [];\n\t// Ctrl/Cmd key active\n\tthis.controlKey = false;\n\t// Shift key active\n\tthis.shiftKey = false;\n\t// Last element added to selction's index\n\tthis.lastAddedIndex = 0;\n\t// How we keep track of where shortcuts will fire\n\tthis.focued = false;\n\tthis.tempSelection = [];\n\n\tif (this.options.dragBox) {\n\t\t// Select box\n\t\tthis.$itemContainer = $('
    ', {\n\t\t\tid: this.name,\n\t\t\tclass: this.options.ghostBoxClass,\n\t\t})\n\t\t\t.appendTo(this.$proxyEl)\n\t\t\t.hide();\n\t}\n\n\t// Initialize\n\tthis.init();\n}\n\n// Extend\nNetxDragSelect.prototype = $.extend({}, netxDrag.Constructor.prototype, {\n\t/**\n\t * Overrride - but calls super\n\t * @returns {object} this\n\t */\n\tinit: function() {\n\t\t// Super\n\t\tnetxDrag.Constructor.prototype.init.apply(this, arguments);\n\n\t\tif (this.is_touch) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Update items\n\t\tthis._bindItems();\n\t\treturn this;\n\t},\n\t/**\n\t * Override - but calls super\n\t * @param {event} e Event\n\t * @returns {object} this\n\t */\n\t_dragHandler: function(e) {\n\t\t// Nothing to do here if we do not want a ghost box\n\t\tif (!this.$itemContainer || this.el.isHidden()) return this;\n\n\t\tif ($(e.target).hasClass(this.options.items) || $(e.target).closest(this.options.items).length) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Refresh items\n\t\tthis._bindItems();\n\n\t\t// We must have some items and this target must not be one of them\n\t\tif (\n\t\t\t!this.$items.length ||\n\t\t\t_.indexOf(this.$items, $(e.target).closest('[draggable]')[0]) > -1\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this.options.clear) {\n\t\t\tthis.clear();\n\t\t}\n\n\t\t// Some of our views kill the element - let's cram it down their throat.\n\t\tif (this.options.dragBox && !this.$proxyEl.find('#' + this.name).length) {\n\t\t\t// Select box\n\t\t\tthis.$itemContainer = $('
    ', {\n\t\t\t\tid: this.name,\n\t\t\t\tclass: this.options.ghostBoxClass,\n\t\t\t})\n\t\t\t\t.appendTo(this.$proxyEl)\n\t\t\t\t.hide();\n\t\t}\n\n\t\t// Super\n\t\treturn netxDrag.Constructor.prototype._dragHandler.apply(this, arguments);\n\t},\n\t/**\n\t * Override\n\t * @param {event} e Event\n\t * @returns {object} this\n\t */\n\tonDragStart: function(e) {\n\t\t// Reset temp selection\n\t\tthis.tempSelection = [];\n\t\t// Let the body know\n\t\t$('body').addClass('nx-drag-selecting');\n\t\treturn this;\n\t},\n\t/**\n\t * Override\n\t * @param {event} e Event\n\t * @returns {object} this\n\t */\n\tonDragMove: function(e) {\n\t\tvar bottom,\n\t\t\tdiffLeft,\n\t\t\tdiffTop,\n\t\t\th,\n\t\t\tleft,\n\t\t\tos,\n\t\t\tright,\n\t\t\tscrollDiffX,\n\t\t\tscrollDiffY,\n\t\t\ttop,\n\t\t\tw;\n\t\t// Check scroll difference\n\t\tscrollDiffY = this.scrollContainer.scroll.y - this.con_scroll_y;\n\t\tscrollDiffX = this.scrollContainer.scroll.x - this.con_scroll_x;\n\t\t// Compensate for scrolling that may occur during dragging\n\t\tdiffTop = this.ui.pointer.diff_top + scrollDiffY; // The amount we have moved from screen top\n\t\tdiffLeft = this.ui.pointer.diff_left + scrollDiffX; // The amount we have moved from screen left\n\t\t// Bounds\n\t\ttop = this.ms_init_pos.top; // Where the mouse first made click contact (y)\n\t\tbottom = top + diffTop;\n\t\tleft = this.ms_init_pos.left; // Where the mouse first made click contact (x)\n\t\tright = left + diffLeft;\n\t\t// Calculate dimensions\n\t\tw = right - left;\n\t\th = bottom - top;\n\t\t// We are flipping the box horizontally\n\t\tif (w < 0) {\n\t\t\tleft = left + w;\n\t\t\tw = w * -1;\n\t\t\tright = left + w;\n\t\t}\n\t\t// We are flipping the box vertically\n\t\tif (h < 0) {\n\t\t\ttop = top + h;\n\t\t\th = h * -1;\n\t\t\tbottom = top + h;\n\t\t}\n\t\t// Keep in bounds\n\t\tif (top < this.boundContainer.y) {\n\t\t\ttop = this.boundContainer.y;\n\t\t}\n\t\tif (left < this.boundContainer.x) {\n\t\t\tleft = this.boundContainer.x;\n\t\t}\n\t\tif (bottom > this.boundContainer.y2) {\n\t\t\tbottom = this.boundContainer.y2;\n\t\t}\n\t\tif (right > this.boundContainer.x2) {\n\t\t\tright = this.boundContainer.x2;\n\t\t}\n\t\t// Store\n\t\tthis.itemContainer = {\n\t\t\tw: right - left,\n\t\t\th: bottom - top,\n\t\t\tx: left,\n\t\t\ty: top,\n\t\t\tx2: right,\n\t\t\ty2: bottom,\n\t\t};\n\t\t// Get our relative locations\n\t\tthis.calculateItemBoundOffset();\n\t\t// Update ghost box element\n\t\tthis.$itemContainer.fadeIn('fast').css({\n\t\t\tleft: this.itemContainer.relative.x,\n\t\t\ttop: this.itemContainer.relative.y,\n\t\t\twidth: this.itemContainer.w,\n\t\t\theight: this.itemContainer.h,\n\t\t});\n\t\t// Our x and y is going to be off for collision - correct it\n\t\tos = this.$itemContainer.offset();\n\t\tthis.itemContainer.x = os.left;\n\t\tthis.itemContainer.x2 = os.left + this.itemContainer.w;\n\t\tthis.itemContainer.y = os.top;\n\t\tthis.itemContainer.y2 = os.top + this.itemContainer.h;\n\t\t// Check for collisions\n\t\tthis._overlap(e);\n\t\treturn this;\n\t},\n\t/**\n\t * Override\n\t * @param {event} e Event\n\t * @returns {object} this\n\t */\n\tonDragStop: function(e) {\n\t\t// Get rid of the ghost box\n\t\tif (this.$itemContainer) this.$itemContainer.fadeOut('fast');\n\t\t// Let the body know\n\t\t$('body').removeClass('nx-drag-selecting');\n\t\t// Check if we had drag selected anything - we do this so nothing gets fired until selection is over as to not cause\n\t\t// the browser to come to a crawl if wnough is being triggered.\n\t\tthis.tempSelection.length &&\n\t\t\tthis.addToSelection(this.tempSelection, e, true);\n\t\tthis.tempSelection = [];\n\t\treturn this;\n\t},\n\t/**\n\t * Override\n\t * @returns {object} this\n\t */\n\tdestroy: function() {\n\t\tif (this.lingerTimer) clearInterval(this.lingerTimer);\n\n\t\tthis.$doc && this.$doc.off(this.ns);\n\t\tthis.$win && this.$win.off(this.ns);\n\t\tthis.$proxyEl && this.$proxyEl.off(this.ns);\n\t\tthis.$scrollContainer && this.$scrollContainer.off(this.ns);\n\n\t\t$('body').removeClass('nx-drag-selecting');\n\t\t// Kill all events in our namespace\n\t\tthis.el\n\t\t\t.off(this.ns)\n\t\t\t.children()\n\t\t\t.off(this.ns);\n\t\t//this.el.off( this.ns );\n\t\tthis.el.removeData('netxDragSelect').removeClass(this.name);\n\t\tthis.observer && this.observer.disconnect();\n\n\t\tdelete this.items;\n\t\tdelete this.tempSelection;\n\t\tdelete this.el;\n\t\tdelete this.$proxyEl;\n\n\t\treturn this;\n\t},\n\t/**\n\t * Override\n\t * @param {event} e Event\n\t * @returns {object} Positions and selections\n\t */\n\t_getDragData: function(e) {\n\t\tvar os = this._getOffset(e);\n\t\tos.$elements = this.el.find('.' + this.options.dragSelectedClass);\n\t\treturn os;\n\t},\n});\n\n// Methods\nvar methods = {\n\taddToSelection: function($el, e) {\n\t\t_.each(\n\t\t\t$el,\n\t\t\tfunction(_el) {\n\t\t\t\tthis._addToSelection($(_el), e);\n\t\t\t},\n\t\t\tthis,\n\t\t);\n\t},\n\t/**\n\t * Add to selection\n\t * Add an item to the selection\n\t * @param {object} $el jQuery object to be added\n\t * @param {event} e The event to send\n\t * @returns {object} this\n\t */\n\t_addToSelection: function($el, e) {\n\t\tvar opts = this.options;\n\t\t// Check if this is an allowed selectable item\n\t\t// Returns false if it is to be ignored\n\t\tif (this._ignoreSelect($el)) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Call select callback\n\t\tif (_.isFunction(opts.select)) {\n\t\t\topts.select.call(this.$item, this._getDragEvent('selected', e), this.ui);\n\t\t}\n\t\t// Send event to item\n\t\tvar _e = this._getDragEvent('selected', e, this.ui);\n\t\t// Let the item know\n\t\t$el[0].dispatchEvent(_e);\n\t\treturn this;\n\t},\n\t/**\n\t * Clear\n\t * Clears selection\n\t * @returns {object} this\n\t */\n\tclear: function(e) {\n\t\t// Clear all selected\n\t\t// this.removeFromSelection( this.$items.filter('.' + this.options.dragSelectedClass ) );\n\t\t// Send event to item\n\t\tvar _e = this._getDragEvent('clearselection', e, this.ui);\n\t\t// Let the item know\n\t\tthis.el[0].dispatchEvent(_e);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Bind to item clicks\n\t * Listen to clicks on items\n\t * @returns {object} this\n\t */\n\t_bindItems: function() {\n\t\t// Refresh items (we do this because the items change with bum smacking and rendering and etc)\n\t\tthis.$items = this.el.find(this.options.items);\n\t\treturn this;\n\t},\n\t/**\n\t * Rebind click listeners\n\t * @method\n\t */\n\t_contentsChanged: function() {\n\t\tthis._bindItems();\n\t},\n\t/**\n\t * Ignore select\n\t * Check if element should be ignored for selecting\n\t * @param {object} $el jQuery object\n\t * @returns {bool} Whether or not to ignore\n\t */\n\t_ignoreSelect: function($el) {\n\t\tvar opts = this.options;\n\t\tif ($.inArray($el[0], this.$items) > -1) {\n\t\t\tif (_.isFunction(opts.ignoreSelect)) {\n\t\t\t\treturn opts.ignoreSelect(e);\n\t\t\t}\n\t\t\treturn $el.is(opts.ignoreSelect.join(', '));\n\t\t}\n\t\treturn true;\n\t},\n\t/**\n\t * Overlap\n\t * Check if item is within selection bounds\n\t * @param {event} e The event to send\n\t * @returns {object} this\n\t */\n\t_overlap: function(e) {\n\t\tvar tempSelection = this.tempSelection,\n\t\t\titemContainer = this.itemContainer,\n\t\t\tbLeft,\n\t\t\tbTop,\n\t\t\t$el,\n\t\t\tidx,\n\t\t\toffset;\n\n\t\t// Loop through each item and see if it is within ghostBox/selection\n\t\t_.each(\n\t\t\tthis.$items,\n\t\t\tfunction(el, k) {\n\t\t\t\t$el = $(el);\n\t\t\t\toffset = $el.offset();\n\t\t\t\tbTop = offset.top; // + this.scrollContainer.scroll.y,\n\t\t\t\tbLeft = offset.left; // + this.scrollContainer.scroll.x;\n\t\t\t\t// Check if overlaps\n\t\t\t\tif (\n\t\t\t\t\t!(\n\t\t\t\t\t\titemContainer.y2 < bTop ||\n\t\t\t\t\t\titemContainer.y > bTop + $el.outerHeight() ||\n\t\t\t\t\t\titemContainer.x2 < bLeft ||\n\t\t\t\t\t\titemContainer.x > bLeft + $el.outerWidth()\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tidx = _.indexOf(tempSelection, el);\n\t\t\t\t\tif (idx < 0) {\n\t\t\t\t\t\ttempSelection.push(el);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tidx = _.indexOf(tempSelection, el);\n\t\t\t\t\tif (idx > -1) {\n\t\t\t\t\t\ttempSelection.splice(idx, 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tthis,\n\t\t);\n\t\t// Chain it\n\t\treturn this;\n\t},\n\tremoveFromSelection: function($el, e) {\n\t\t_.each(\n\t\t\t$el,\n\t\t\tfunction(_el) {\n\t\t\t\tthis._removeFromSelection($(_el), e);\n\t\t\t},\n\t\t\tthis,\n\t\t);\n\t\treturn this;\n\t},\n\t/**\n\t * Remove from selection\n\t * Remove an item from the selection\n\t * @param {object} $el jQuery object to be removed\n\t * @param {event} e The event to send\n\t * @returns {object} this\n\t */\n\t_removeFromSelection: function($el, e) {\n\t\t// Call unselect callback\n\t\tif (_.isFunction(this.options.unselect)) {\n\t\t\tthis.options.unselect.call(\n\t\t\t\tthis.$item,\n\t\t\t\tthis._getDragEvent('unselected', e),\n\t\t\t\tthis.ui,\n\t\t\t);\n\t\t}\n\t\t// Send event to item\n\t\tvar _e = this._getDragEvent('unselected', e, this.ui);\n\t\t// Let the item know\n\t\t$el[0].dispatchEvent(_e);\n\t},\n\n\t/**\n\t * Update\n\t * Updates selectable items\n\t * Calls this._bindItems()\n\t * @returns {object} this\n\t */\n\tupdateItems: function() {\n\t\tthis.$items && this.$items.off(this.ns);\n\t\tthis._bindItems();\n\n\t\treturn this;\n\t},\n};\n_.extend(NetxDragSelect.prototype, methods);\n\n// Make plugin accessible via jQuery namesapce\nfunction Plugin(option) {\n\tvar _arguments = arguments,\n\t\t$this,\n\t\tplugin,\n\t\toptions;\n\treturn this.each(function() {\n\t\t$this = $(this);\n\t\tplugin = $this.data('netxDragSelect');\n\t\toptions = _.extend(\n\t\t\t{},\n\t\t\t$.fn.netxDragSelect.defaults,\n\t\t\t_.isObject(option) ? option : {},\n\t\t);\n\t\tif (plugin) {\n\t\t\tif (typeof option === 'object' || !option) {\n\t\t\t\tplugin.init();\n\t\t\t} else if (option.charAt(0) !== '_' && plugin[option]) {\n\t\t\t\tplugin[option](_arguments[1]);\n\t\t\t} else {\n\t\t\t\tplugin.init();\n\t\t\t}\n\t\t\treturn $this;\n\t\t} else if (option != 'destroy') {\n\t\t\tplugin = new NetxDragSelect(options, $this[0]);\n\t\t\t$this.data('netxDragSelect', plugin);\n\t\t\treturn $this;\n\t\t}\n\t});\n}\n\n$.fn.netxDragSelect = Plugin;\n$.fn.netxDragSelect.Constructor = NetxDragSelect;\n\n// Defaults\n$.fn.netxDragSelect.defaults = _.extend({}, netxDrag.defaults, {\n\t// Where to append ghost box (selector) - defaults to this.el\n\tappendTo: false,\n\t// The container the drag box is bound to - defaults to this.el\n\tboundContainer: false,\n\t// Should we clear the selection before making a new one\n\tclear: true,\n\t// Whether or not to append a dragBox ghost element\n\tdragBox: true,\n\t// Item selected class\n\tdragSelectedClass: 'nx-selected',\n\t// Ghost box (selector) class\n\tghostBoxClass: 'netx-drag-select-ghost-box',\n\t// Items to select within element instantiator\n\titems: 'li',\n\t// Elements to ignore (by tagname)\n\tignoreSelect: [],\n\t// How close you need to be to the edge to start a scroll\n\tscrollAreaSize: 10,\n\n\t//select : function( event, ui ) {},\t // On item select\n\t//unselect : function( event, ui ) {}\t // On item deselct\n});\n\nexport default Plugin;\n","/**\n * @class\n */\nimport Base from 'netxcore@netx/core-asset/views/assetListView';\nimport CartAssetsCollection from '@netx/core-cart/collections/cartAssets';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\nimport customConfig from '../config';\n\n// Drag select assets\nimport 'core-libs/nx-drag/jquery-netx-dragselect';\n\nexport default class AssetListView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.childView = {\n\t\t\tid(model) {\n\t\t\t\treturn `asset-${model.id}`;\n\t\t\t},\n\t\t\toptions: {\n\t\t\t\ttagName: 'div',\n\t\t\t\tclassName: 'asset',\n\t\t\t\tattributes: {\n\t\t\t\t\t'data-contextmenu-target': 'assetContextMenu',\n\t\t\t\t},\n\t\t\t},\n\t\t\tdraggable: false,\n\t\t\t...opts.childView,\n\t\t};\n\t\topts.className =\n\t\t\topts.className || 'flex-row-grid-wrap assets-list-wrapper nx-assets';\n\t\tsuper(opts);\n\t\t/**\n\t\t * Is drag enabled\n\t\t * @memberOf Netx.Views.AssetListView\n\t\t * @alias dragEnabled\n\t\t */\n\t\tthis.dragEnabled = false;\n\t\t// opts.dragEnabled != null ? opts.dragEnabled : customConfig.DRAGGABLE;\n\n\t\t/**\n\t\t * Keeps track of assets selected view toggle/cmd/ctrl clicks\n\t\t * That way we can easily deduce our current index for shift clicks\n\t\t * @memberOf Netx.Views.AssetListView\n\t\t * @alias selectedAssets\n\t\t * @type {array}\n\t\t */\n\t\tthis.selectedAssets = opts.selectedAssets || [];\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(dispatcher, 'asset:thumb:set', () => {\n\t\t\tthis.$el\n\t\t\t\t.find('[data-nx-thumbsize]')\n\t\t\t\t.attr('data-nx-thumbsize', getPreference('assetList.thumbSize'));\n\t\t});\n\t\t// Drag plugins\n\t\tif (this.dragEnabled) {\n\t\t\t// Not the current cart (anything in the ucrrent cart is already selected)\n\t\t\tif (\n\t\t\t\t!(this.collection instanceof CartAssetsCollection) ||\n\t\t\t\tthis.collection.id !== 0\n\t\t\t) {\n\t\t\t\tthis.Plugins.Register({\n\t\t\t\t\tnetxDragSelect: {\n\t\t\t\t\t\tname: 'netxDragSelect',\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tboundContainer: this.$el,\n\t\t\t\t\t\t\tclear: false,\n\t\t\t\t\t\t\tignoreSelect: ['.pending'],\n\t\t\t\t\t\t\titems: '.asset',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @override */\n\tbindCollectionEvents() {\n\t\tsuper.bindCollectionEvents();\n\n\t\tif (this.autoSort) {\n\t\t\tthis.stopListening(this.collection, 'sortChanged').listenTo(\n\t\t\t\tthis.collection,\n\t\t\t\t'sortChanged',\n\t\t\t\t() => {\n\t\t\t\t\tdispatcher.trigger('asset:sort', this.collection);\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\n\t\t// THEM-1603 - we are loading assets outside the normal fetching and paging for the public user cart\n\t\treturn this.listenTo(\n\t\t\tthis.collection,\n\t\t\t'fake:loading',\n\t\t\tthis.showLoading,\n\t\t).listenTo(this.collection, 'fake:loaded', this.showLoaded);\n\t}\n\n\tpreRender() {\n\t\tsuper.preRender();\n\t\tObject.assign(this.templateVars, {\n\t\t\tthumbSize: getPreference('assetList.thumbSize'),\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\tthis.addPagerView();\n\t\tthis.$scrollContainer = $('body');\n\n\t\t// Not the current cart (anything in the ucrrent cart is already selected)\n\t\tif (\n\t\t\t!(this.collection instanceof CartAssetsCollection) ||\n\t\t\tthis.collection.id !== 0\n\t\t) {\n\t\t\tthis.Plugins.Extend({\n\t\t\t\tnetxDragSelect: {\n\t\t\t\t\toptions: {\n\t\t\t\t\t\tscrollContainer: this.$scrollContainer,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t\tthis.Plugins.Initialize('netxDragSelect', this.$('.nx-asset-list'));\n\t\t}\n\t}\n}\n","/**\n * Asset preview view for generic events and methods\n * This view is never to be used by itself - it should only ever be extended by other views\n * @class\n */\nimport Base from './assetView';\n\nimport {resizeToFit} from '@netx/core/lib/underscore-netx';\nimport {\n\tcurrentUserMeetsUserLevel,\n\tUserLevel,\n} from '@netx/core-user-next/utils/currentUserMeetsUserLevel';\n\nexport default class AssetPreviewView_ extends Base {\n\t/**\n\t * @override\n\t * @param {object} opts View options\n\t * @listens module:app#app:resize\n\t * @listens module:netx#routed\n\t */\n\tconstructor(opts = {}) {\n\t\topts.id = opts.id || _.uniqueId('asset-preview-');\n\t\topts.imageSource = opts.imageSource || 'preview';\n\t\topts.className = opts.className || 'preview-view';\n\t\topts.events = _.extend(\n\t\t\t{\n\t\t\t\t'click [data-nx-control=\"play\"]': 'toggleMediaPlayPause',\n\t\t\t},\n\t\t\topts.events,\n\t\t);\n\t\t// We do not want any loaders based on RPC requests to server\n\t\topts.loadingMethods = opts.loadingMethods || [];\n\t\tsuper(opts);\n\n\t\t// Debounced methods\n\t\tthis.resize = _.debounce(this.resize, 25);\n\n\t\t/**\n\t\t * Size the audio/image/video to `this.$el`\n\t\t * @override\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.sizeToContainer = opts.sizeToContainer !== false;\n\n\t\t// Hey, listen!\n\t\tthis\n\t\t\t// Pause media when we hide/route away\n\t\t\t.listenTo(dispatcher, 'routed', this.routed)\n\t\t\t// Piped events\n\t\t\t.listenTo(this, 'media:error', this.mediaError)\n\t\t\t.listenTo(this, 'media:loading', this.mediaLoadProgress)\n\t\t\t.listenTo(this, 'media:pause', this.mediaPaused)\n\t\t\t.listenTo(this, 'media:play', this.mediaPlaying)\n\t\t\t.listenTo(this, 'media:ready', this.mediaReady);\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\t// Cleanup\n\t\tthis.Plugins.Destroy('resize', this.$sizeFromElement);\n\n\t\tsuper.preRender();\n\n\t\tthis.$el.removeClass('media-error media-loading');\n\n\t\tlet duration = this.model.get('duration');\n\t\tif (duration) {\n\t\t\tconst time = new Date(null);\n\t\t\ttime.setMilliseconds(duration);\n\t\t\tduration = time.toISOString().substr(11, 8);\n\t\t}\n\n\t\t// Additonal template variables\n\t\t_.extend(this.templateVars, {\n\t\t\tcanLockUnlock: currentUserMeetsUserLevel(UserLevel.ADMIN),\n\t\t\tduration: duration,\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Cache\n\t\tthis.$mediaProgress = this.$('.nx-media-progress');\n\n\t\tthis.$sizeFromElement = this.$('.nx-size-from');\n\t\tif (!this.$sizeFromElement.length) {\n\t\t\tthis.$sizeFromElement = this.$el;\n\t\t}\n\n\t\t// Initialize resize listener plugin\n\t\tthis.Plugins.Initialize('resizeListener', this.$sizeFromElement);\n\t}\n\n\t/** @override */\n\tafterShown(view) {\n\t\tsuper.afterShown(view);\n\t\t// Update size\n\t\tthis.resize();\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} msg Error message\n\t */\n\tmediaError(msg) {\n\t\tthis.$errorMessage.html(msg);\n\t\tthis.$el.addClass('has-error').removeClass('media-loading');\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} percent Progress percent\n\t * @param {object} opts Options\n\t */\n\tmediaLoadProgress(percent, opts = {}) {\n\t\tconst percentStr = (percent || 0) + '%';\n\n\t\tthis.$el.addClass('media-loading');\n\t\tthis.$mediaProgress\n\t\t\t.toggleClass('progress-striped', opts.active === true)\n\t\t\t.find('.progress-bar')\n\t\t\t.attr('aria-valuenow', percent)\n\t\t\t.css('width', percentStr)\n\t\t\t.toggleClass('active', opts.active === true)\n\t\t\t.find('.sr-only')\n\t\t\t.html(percentStr);\n\t}\n\n\t/**\n\t * @method\n\t */\n\tmediaPaused() {\n\t\tthis.$el.removeClass('playing');\n\t}\n\n\t/**\n\t * @method\n\t */\n\tmediaPlaying() {\n\t\tthis.$el.addClass('playing');\n\t}\n\n\t/**\n\t * @method\n\t */\n\tmediaReady() {\n\t\tthis.$el.removeClass('media-loading');\n\t}\n\n\t/**\n\t * Pause media on hide\n\t * @override\n\t */\n\tafterHidden(view) {\n\t\tsuper.afterHidden(view);\n\t\t// Pause media\n\t\tthis.pauseMedia();\n\t}\n\n\t/**\n\t * @method\n\t */\n\tpauseMedia() {\n\t\t// Override me\n\t}\n\n\t/**\n\t * @method\n\t */\n\tplayMedia() {\n\t\t// Override me\n\t}\n\n\t/**\n\t * @method\n\t */\n\ttoggleMediaPlayPause(e) {\n\t\t// Override me\n\t}\n\n\t/** @method */\n\tresize() {\n\t\t// Must ahve rendered once\n\t\tthis.sizeToContainer &&\n\t\t\tthis.rendered.then(() => {\n\t\t\t\tconst dimensions = this.imageDimensions[this.imageSource] || {};\n\t\t\t\t// Fit to container\n\t\t\t\tthis.$previewTarget.css(\n\t\t\t\t\tresizeToFit(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\theight: dimensions.height,\n\t\t\t\t\t\t\twidth: dimensions.width,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\theight: this.$sizeFromElement.height(),\n\t\t\t\t\t\t\twidth: this.$sizeFromElement.width(),\n\t\t\t\t\t\t},\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} route Current route\n\t */\n\trouted(route) {\n\t\tconst model = this.model;\n\t\t// Only if we abandon this asset\n\t\tif (model.id && !route.includes(`asset/${model.id}`)) {\n\t\t\tthis.pauseMedia();\n\t\t}\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetPreviewView_';\n\t}\n}\n","import Base from 'netxcore@netx/core-asset/views/assetPreviewView_';\n\nimport {\n\tfaExclamationCircle,\n\tfaExclamationTriangle,\n\tfaExpandArrows,\n\tfaPlay,\n\tfaLock,\n\tfaPause,\n\tfaUnlock,\n} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaExclamationCircle,\n\tfaExclamationTriangle,\n\tfaExpandArrows,\n\tfaPlay,\n\tfaLock,\n\tfaPause,\n\tfaUnlock,\n});\n\nexport default class AssetPreviewView_ extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.icons = {...icons, ...opts.icons};\n\t\tsuper(opts);\n\t}\n}\n","import {ViewOptions} from 'backbone';\nimport Base from '@netx/core/lib/netx-react-view';\nimport {AssetAudio} from '../components/AssetAudio';\nimport {withTheme} from '@netx/core-components/Theme';\nimport {withConfirmation} from '@netx/core-components/Confirmation';\nimport type AssetModel from '@netx/core-asset/models/asset';\nconst ThemedComponent = withTheme(withConfirmation(AssetAudio));\n\nimport '../css/asset-audio-view.less';\n\nexport interface AssetAudioViewOptions extends ViewOptions {\n\tmodel: AssetModel;\n}\n\nexport class AssetAudioView extends Base {\n\tconstructor(opts: AssetAudioViewOptions) {\n\t\tsuper({\n\t\t\tid: 'asset-audio-view-react',\n\t\t\t...opts,\n\t\t});\n\n\t\tthis.listenTo(\n\t\t\tthis.viewSpec,\n\t\t\t'change:viewOptions:model',\n\t\t\t(viewSpec, asset) => {\n\t\t\t\t// this.model = asset;\n\t\t\t\tthis.render();\n\t\t\t},\n\t\t);\n\t}\n\n\trender() {\n\t\treturn super.render(ThemedComponent, {\n\t\t\tasset: {...this.model.attributes},\n\t\t});\n\t}\n}\n","/**\n * Asset preview view for audio\n * @class\n */\nimport Base from './assetPreviewView_';\nimport Template from '../templates/assetPreviewView_audio.html';\n// import Netx from '@netx/core/bootstrap';\nimport PagerView from '@netx/core-app/views/pagerView';\nimport {AssetAudioView} from './asset-audio-view';\nimport AssetDetailPagerTemplate from '../templates/assetDetailPagerView.html';\n\nexport default class AssetPreviewView_Audio extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.className = opts.className || 'preview-view audio-preview';\n\t\topts.imageSource = opts.imageSource || 'thumb';\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\t// Debounced/throttled methods\n\t\tthis.seeking = _.throttle(this.seeking, 50);\n\t\tthis.updateCurrentTime = _.throttle(this.updateCurrentTime, 100);\n\n\t\t// Toggle\n\t\tthis.$el.toggleClass('web-audio-unsupported', !Modernizr.webaudioapi);\n\n\t\tif (this.collection) {\n\t\t\tthis.pagerView = this.addSubView(\n\t\t\t\tnew PagerView({\n\t\t\t\t\tmodule: 'asset',\n\t\t\t\t\ttemplate: AssetDetailPagerTemplate,\n\t\t\t\t\tcollection: this.collection,\n\t\t\t\t\tmodel: this.collection.pager,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\tthis.reactView = this.addSubView(new AssetAudioView({model: this.model}));\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(this, 'media:audioprocess', this.updateCurrentTime)\n\t\t\t.listenTo(this, 'media:seek', this.seeking)\n\t\t\t.listenTo(dispatcher, 'theme:toggled', this.updateTheme);\n\t}\n\n\t/**\n\t * @override\n\t */\n\tafterHidden(view) {\n\t\tsuper.afterHidden(view);\n\n\t\tthis.pauseMedia();\n\t}\n\n\t/**\n\t * @override\n\t */\n\tafterShown(view) {\n\t\tsuper.afterShown(view);\n\n\t\tthis.injectAudio();\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\t// Cleanup\n\t\tthis.Plugins.Destroy('wavesurfer');\n\n\t\tsuper.preRender();\n\n\t\t// Additional template vars\n\t\t_.extend(this.templateVars, {\n\t\t\tsupportsWebAudio: Modernizr.webaudioapi,\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Cache\n\t\tthis.$errorMessage = this.$('.nx-error-message');\n\t\tthis.$fallbackAudio = this.$('.nx-fallback-audio');\n\t\tthis.$audioSource = this.$('[type=\"audio/mp3\"]');\n\t\tthis.$pager = this.$('.nx-pager');\n\t\tthis.$previewTarget = this.$('.nx-audio-container');\n\t\tthis.$mediaCurrentTime = this.$('.nx-media-current-time');\n\t\tthis.$mediaDuration = this.$('.nx-media-duration');\n\n\t\tthis.$fallbackAudio = this.$('.nx-fallback-audio');\n\n\t\t// Wavesurfer needs us to place a unique id on the element we initializing it on\n\t\tthis.$previewTarget.attr('id', _.uniqueId('wave-'));\n\n\t\t// Init wavesurfer\n\t\tthis.isShown && this.injectAudio();\n\n\t\tthis.$audioSource.on('error', _.bind(this.loadAudioError, this));\n\n\t\tif (this.collection && this.collection.pager) {\n\t\t\t// Pager\n\t\t\tthis.pagerView.setElement(this.$pager).render();\n\t\t}\n\t}\n\t/**\n\t * @method\n\t */\n\tloadAudioError(err) {\n\t\tthis.trigger('media:error', i18n.t('i18n.previewNotAvailable'));\n\t}\n\n\t/**\n\t * @method\n\t */\n\tinjectAudio() {\n\t\tif (!Modernizr.webaudioapi || !this.model.get('audioUrl') || this.media)\n\t\t\treturn;\n\n\t\t// We only need to inject the audio plugin again if we have rendered\n\t\tthis.rendered.then(() => {\n\t\t\tthis.$previewTarget.append(this.reactView.render().$el);\n\t\t});\n\n\t\t// Update dimensions now that we have some\n\t\tthis.resize();\n\t}\n\n\t/**\n\t * @method\n\t */\n\tmediaReady() {\n\t\tthis.updateDuration();\n\n\t\tsuper.mediaReady();\n\n\t\t// Must defer\n\t\t_.defer(_.bind(this.resize, this));\n\t}\n\n\t/**\n\t * When media pauses, stop tickling the session\n\t * @override\n\t */\n\tmediaPaused() {\n\t\tsuper.mediaPaused();\n\t\tthis.stopTicklingSession();\n\t}\n\n\t/**\n\t * When media plays, start tickling the session\n\t * @override\n\t */\n\tmediaPlaying() {\n\t\tsuper.mediaPlaying();\n\t\tthis.startTicklingSession();\n\t}\n\n\t/**\n\t * @method\n\t */\n\tpauseMedia() {\n\t\tthis.media && this.media.isPlaying() && this.media.playPause();\n\t\tsuper.pauseMedia();\n\t}\n\n\t/**\n\t * @method\n\t */\n\tplayMedia() {\n\t\tthis.media && !this.media.isPlaying() && this.media.playPause();\n\t\tsuper.playMedia();\n\t}\n\n\tremove() {\n\t\tthis.stopTicklingSession();\n\t\treturn super.remove();\n\t}\n\n\t/**\n\t * Audio has to do its very own thing for resizing\n\t * @override\n\t */\n\tresize() {}\n\n\t/** @method */\n\tseeking() {}\n\n\t/**\n\t * @method\n\t */\n\tstopMedia() {}\n\n\tstartTicklingSession() {\n\t\tdispatcher.trigger('session:tickle:add', 'audio');\n\t}\n\n\tstopTicklingSession() {\n\t\tdispatcher.trigger('session:tickle:remove', 'audio');\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e Click event\n\t */\n\ttoggleMediaPlayPause(e) {}\n\n\t/**\n\t * @method\n\t * @param {number} currentTime Current time (in seconds)\n\t */\n\tupdateCurrentTime(currentTime) {}\n\n\t/** @method */\n\tupdateDuration() {\n\t\tif (!this.media) return;\n\n\t\tconst time = new Date(null);\n\t\ttime.setSeconds(this.model.get('duration') / 1000);\n\n\t\t// Invalid date\n\t\tif (!isFinite(time)) return;\n\n\t\tconst duration = time.toISOString().substr(11, 8);\n\t\tthis.$mediaDuration && this.$mediaDuration.html(duration);\n\t}\n\n\t/** @method */\n\tupdateTheme() {}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetPreviewView_Audio';\n\t}\n}\n","/**\n * Asset preview view for images\n * @class\n */\nimport Base from './assetPreviewView_';\nimport Template from '../templates/assetPreviewView_image.html';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\nimport PagerView from '@netx/core-app/views/pagerView';\nimport AssetDetailPagerTemplate from '../templates/assetDetailPagerView.html';\n\nexport default class AssetPreviewView_Image extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.className = opts.className || 'preview-view image-preview';\n\t\topts.imageSource = opts.imageSource || 'zoom';\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\tthis.previousImageSource = this.imageSource;\n\n\t\tObject.assign(this.templateVars, {\n\t\t\tpdfLaunchStandard:\n\t\t\t\tthis.model.isPDF() && getPreference('pdf.launchStandard', true),\n\t\t});\n\n\t\tif (this.collection) {\n\t\t\tthis.pagerView = this.addSubView(\n\t\t\t\tnew PagerView({\n\t\t\t\t\tmodule: 'asset',\n\t\t\t\t\ttemplate: AssetDetailPagerTemplate,\n\t\t\t\t\tcollection: this.collection,\n\t\t\t\t\tmodel: this.collection.pager,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\t// PDF `zoom` view is not dependent on the selected preview page\n\t\t// Tokens do not have access to zoom\n\t\tif (this.model.isPDF() || !_.isUndefined(this.token)) {\n\t\t\tif (this.previousImageSource !== 'preview') {\n\t\t\t\tthis.previousImageSource = this.imageSource;\n\t\t\t}\n\t\t\tthis.imageSource = 'preview';\n\t\t} else {\n\t\t\tthis.imageSource = this.previousImageSource || 'zoom';\n\t\t}\n\n\t\tsuper.preRender();\n\n\t\tObject.assign(this.templateVars, {\n\t\t\tfile: this.model.get('file') || this.model.get('fileName'),\n\t\t\tfileheight: this.model.get('fileheight') || this.model.get('fileHeight'),\n\t\t\tfilewidth: this.model.get('filewidth') || this.model.get('fileWidth'),\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tconst imageSources = this.imageSources;\n\t\tconst isZoom = this.imageSource === 'zoom';\n\t\tif (isZoom) {\n\t\t\tthis._imageHackActive = true;\n\t\t}\n\n\t\tsuper.postRender();\n\n\t\t// Cache\n\t\tthis.$pager = this.$('.nx-pager');\n\t\tthis.$previewTarget = this.$('.nx-preview-image');\n\n\t\tif (this.collection && this.collection.pager) {\n\t\t\t// Pager\n\t\t\tthis.pagerView.setElement(this.$pager).render();\n\t\t}\n\n\t\t// Ugly hack unti lwe refactor the asset bean\n\t\t// we have no real way knowing if zoom proxies exist without\n\t\t// trying to load them...\n\t\tif (isZoom) {\n\t\t\tconst loadPreviewFallback = () => {\n\t\t\t\tconst previewImg = new Image();\n\t\t\t\tpreviewImg.onload = (event) => {\n\t\t\t\t\tthis.$previewTarget.attr('src', imageSources.preview);\n\t\t\t\t\timageReady();\n\t\t\t\t};\n\t\t\t\tpreviewImg.src = imageSources.preview;\n\t\t\t};\n\n\t\t\tconst imageReady = () => {\n\t\t\t\tthis.$el.addClass('image-ready');\n\t\t\t\tdelete this._imageHackActive;\n\t\t\t\tthis.resize();\n\t\t\t};\n\n\t\t\t// Try loading zoom proxy\n\t\t\tconst zoomImg = new Image();\n\t\t\tzoomImg.onload = (event) => {\n\t\t\t\tif (!zoomImg.naturalWidth || !zoomImg.naturalHeight)\n\t\t\t\t\treturn loadPreviewFallback();\n\n\t\t\t\t// We have a zoom image\n\t\t\t\timageReady();\n\t\t\t};\n\t\t\tzoomImg.onerror = (event) => {\n\t\t\t\tloadPreviewFallback();\n\t\t\t};\n\t\t\tzoomImg.src = this.imageSources.zoom;\n\t\t}\n\t}\n\n\t/** @override */\n\tafterShown(view) {\n\t\tsuper.afterShown(view);\n\n\t\t// Update size\n\t\tthis.whenImagesLoaded.then(this.resize);\n\t}\n\n\t/** @override */\n\tresize() {\n\t\t// We only want to do this for image assets once the actual image has loaded\n\t\tthis.whenImagesLoaded.then(super.resize);\n\t}\n\n\t/** @override */\n\tupdateImageSources() {\n\t\tsuper.updateImageSources();\n\n\t\t// but only when in a cms block\n\t\tif (this.cmsBlock && this.imageSource === 'original') {\n\t\t\tconst model = this.model;\n\t\t\t// adding '&record=false' for cms asset blocks\n\t\t\t_.extend(this.imageSources, {\n\t\t\t\toriginal: `/file/asset/${model.id}/original/${\n\t\t\t\t\tmodel.get('file') || model.get('fileName')\n\t\t\t\t}${this.cacheBuster}&record=false`,\n\t\t\t});\n\t\t}\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetPreviewView_Image';\n\t}\n}\n","/**\n * @class\n */\nimport Base from 'netxcore@netx/core-asset/views/assetPreviewView_image';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\n\nexport default class AssetPreviewView_Image extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.imageSource = opts.imageSource || 'preview';\n\t\topts.sizeToContainer = opts.sizeToContainer === true;\n\t\tsuper(opts);\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\n\t\tObject.assign(this.templateVars, {\n\t\t\tassetId: this.model.id,\n\t\t\thasImage: this.model.id != null,\n\t\t\tzoomType:\n\t\t\t\tgetPreference('zoom.tiles.enabled', true) ||\n\t\t\t\tgetPreference('equilibrium.enabled', true)\n\t\t\t\t\t? ''\n\t\t\t\t\t: '/quickzoom',\n\t\t});\n\t}\n\n\t/** @override */\n\tupdateImageSources() {\n\t\tsuper.updateImageSources();\n\n\t\t// but only when in a cms block\n\t\tif (this.cmsBlock && this.imageSource === 'original') {\n\t\t\t// adding '&record=false' for cms asset blocks\n\t\t\tObject.assign(this.imageSources, {\n\t\t\t\toriginal: `/file/asset/${this.model.id}/original/${this.model.get(\n\t\t\t\t\t'file',\n\t\t\t\t)}${this.cacheBuster}&record=false`,\n\t\t\t});\n\t\t}\n\t}\n}\n","import {ViewOptions} from 'backbone';\nimport Base from '@netx/core/lib/netx-react-view';\nimport {AssetVideo} from '../components';\nimport {withTheme} from '@netx/core-components/Theme';\nimport {withConfirmation} from '@netx/core-components/Confirmation';\nimport type AssetModel from '@netx/core-asset/models/asset';\nconst ThemedComponent = withTheme(withConfirmation(AssetVideo));\n\nimport '../css/asset-video-view.less';\n\nexport interface AssetVideoViewOptions extends ViewOptions {\n\tmodel: AssetModel;\n}\n\nexport class AssetVideoView extends Base {\n\tconstructor(opts: AssetVideoViewOptions) {\n\t\tsuper({\n\t\t\tid: 'asset-video-view-react',\n\t\t\t...opts,\n\t\t});\n\n\t\tthis.listenTo(\n\t\t\tthis.viewSpec,\n\t\t\t'change:viewOptions:model',\n\t\t\t(viewSpec, asset) => {\n\t\t\t\t// this.model = asset;\n\t\t\t\tthis.render();\n\t\t\t},\n\t\t);\n\t}\n\n\trender() {\n\t\treturn super.render(ThemedComponent, {\n\t\t\tasset: {...this.model.attributes},\n\t\t});\n\t}\n}\n","/**\n * Asset preview view for videos\n * @class\n */\nimport Base from './assetPreviewView_';\nimport Template from '../templates/assetPreviewView_video.html';\nimport NxVideo from '@netx/core/lib/netx-video';\nimport {AssetVideoView} from '@netx/core-asset-video/views';\nimport PagerView from '@netx/core-app/views/pagerView';\nimport AssetDetailPagerTemplate from '../templates/assetDetailPagerView.html';\n\nexport default class AssetPreviewView_Video extends Base {\n\t/**\n\t * @override\n\t * @listens module:asset#asset:detail:video:play\n\t */\n\tconstructor(opts = {}) {\n\t\topts.className = opts.className || 'preview-view video-preview';\n\t\topts.imageSource = opts.imageSource || 'original';\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\tthis.sizeToContainer = false;\n\n\t\t/**\n\t\t * Our media\n\t\t * @memberOf Netx.Views.AssetPreviewView_video\n\t\t * @alias media\n\t\t * @type {Netx.Video}\n\t\t */\n\t\tthis.media = opts.staticMedia ? Netx.asset.video : new NxVideo();\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(dispatcher, 'asset:detail:video:play', this.playMedia);\n\n\t\tthis.reactView = this.addSubView(new AssetVideoView({model: this.model}));\n\n\t\tif (this.collection) {\n\t\t\tthis.pagerView = this.addSubView(\n\t\t\t\tnew PagerView({\n\t\t\t\t\tmodule: 'asset',\n\t\t\t\t\ttemplate: AssetDetailPagerTemplate,\n\t\t\t\t\tcollection: this.collection,\n\t\t\t\t\tmodel: this.collection.pager,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\t}\n\n\tpreRender() {\n\t\tsuper.preRender();\n\t\tconsole.log(this.model);\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\t// Inject video\n\t\tthis.isShown && this.injectVideo({force: this.thumbnailUpdated});\n\n\t\t// Cache\n\t\tthis.$pager = this.$('.nx-pager');\n\t\tthis.$previewTarget = this.$('[data-nx-control=\"video\"]');\n\n\t\tif (this.collection && this.collection.pager) {\n\t\t\t// Pager\n\t\t\tthis.pagerView.setElement(this.$pager).render();\n\t\t}\n\n\t\tsuper.postRender();\n\t}\n\n\t/**\n\t * @method\n\t */\n\tinjectVideo(opts) {\n\t\t// Assume we are loading on any given render (because we are)\n\t\tthis.$el.addClass('loading');\n\t\tthis.rendered.then(() => {\n\t\t\tthis.$previewTarget.append(this.reactView.render().$el);\n\t\t});\n\t}\n\n\t/** @override */\n\tafterShown(view) {\n\t\tsuper.afterShown(view);\n\t\t// Inject video if we have an id\n\t\tthis.injectVideo();\n\t}\n\n\t/** @override */\n\tmediaReady(...args) {\n\t\tsuper.mediaReady(...args);\n\n\t\t// Autoplay is a one time use deal\n\t\tif (!this.media.autoPlay) return;\n\n\t\tthis.playMedia();\n\t\tdelete this.media.autoPlay;\n\t}\n\n\t/** @override */\n\tpauseMedia() {\n\t\tthis.media && this.media.pause();\n\t\tsuper.pauseMedia();\n\t}\n\n\t/** @override */\n\tplayMedia() {\n\t\tthis.media && this.media.play();\n\t\tsuper.playMedia();\n\t}\n\n\t/** @override */\n\tstopMedia() {\n\t\tthis.media && this.media.pause();\n\t\tsuper.stopMedia();\n\t}\n\n\t/** @override */\n\ttoggleMediaPlayPause(e) {\n\t\tthis.media && this.media.playPause();\n\t\tsuper.toggleMediaPlayPause();\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetPreviewView_Video';\n\t}\n}\n","import Base from '@netx/core-app/views/pagerView';\nimport _ from 'underscore';\nimport AssetDetailPagerTemplate from '../templates/assetDetailPagerView.html';\n\nexport class AssetDetailPagerView extends Base {\n\tonConfirmHide;\n\tchangesModel;\n\n\tconstructor(opts) {\n\t\topts.template = AssetDetailPagerTemplate;\n\t\tsuper(opts);\n\n\t\t// TODO: this is just a holdover hack until we refactor the asset detail\n\t\tconst self = this;\n\t\tthis.dispatchPagerEvent = _.wrap(\n\t\t\tthis.dispatchPagerEvent,\n\t\t\t(dispatchPagerEvent, name, page) => {\n\t\t\t\t// If there are any unsaved changes, confirm before paging away (and losing changes)\n\t\t\t\topts.onConfirmHide().then(() => {\n\t\t\t\t\topts.changesModel.reset();\n\t\t\t\t\t// No unsaved changes, or they were abandoned changes\n\t\t\t\t\tdispatchPagerEvent.call(self, name, page);\n\t\t\t\t});\n\t\t\t},\n\t\t);\n\t}\n}\n","/**\n * Asset preview view\n * Displays the relevant asset preview depending on asset type\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/assetPreviewView.html';\n\nimport AudioView from './assetPreviewView_audio';\nimport ImageView from './assetPreviewView_image';\nimport VideoView from './assetPreviewView_video';\nimport {\n\tcurrentUserMeetsUserLevel,\n\tUserLevel,\n} from '@netx/core-user-next/utils/currentUserMeetsUserLevel';\nimport {AssetDetailPagerView} from '@netx/core-asset/views/assetDetailPager';\n\nimport _ from 'underscore';\n\nconst AssetPreviewViews = {\n\taudio: AudioView,\n\timage: ImageView,\n\tvideo: VideoView,\n};\n\nexport default class AssetPreviewView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.headerTitle = opts.headerTitle || i18n.t('i18n.preview');\n\t\topts.id = opts.id || `asset-preview-view`;\n\t\topts.template = opts.template || Template;\n\t\topts.loadingClassObjects = opts.loadingClassObjects || ['model'];\n\t\tsuper(opts);\n\n\t\tthis.staticMedia = opts.staticMedia || false;\n\t\tthis.imageSource = opts.imageSource || 'preview';\n\t\tthis.changesModel = opts.changesModel;\n\t\tthis.onConfirmHide = opts.onConfirmHide;\n\n\t\t// DAM-10377\n\t\t// Browser level users should not get default context menus\n\t\tif (!currentUserMeetsUserLevel(UserLevel.CONSUMER)) {\n\t\t\t_.extend(this.events, {\n\t\t\t\tcontextmenu: 'preventDefault',\n\t\t\t});\n\t\t}\n\n\t\t/**\n\t\t * Support paging\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.paging = false; // opts.paging !== false;\n\n\t\t/**\n\t\t * Show info (attributes)\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.showInfo = opts.showInfo !== false;\n\n\t\t/**\n\t\t * Size the audio/image/video to its container\n\t\t * If an array is specified, only the types listed within will size to the container\n\t\t * @type {array|boolean}\n\t\t * @default\n\t\t */\n\t\tthis.sizeToContainer = opts.sizeToContainer !== false;\n\n\t\tconst collection = this.collection || this.model.collection;\n\n\t\t/**\n\t\t * Options for the specific asset preview view we will inject\n\t\t * @memberOf Netx.Views.AssetPreviewView\n\t\t * @alias subViewOptions\n\t\t * @type {object}\n\t\t */\n\t\tthis.subViewOptions = _.extend(\n\t\t\t{\n\t\t\t\tmodel: this.model,\n\t\t\t\tcollection: collection,\n\t\t\t},\n\t\t\topts.subViewOptions,\n\t\t);\n\n\t\tif (this.paging && collection) {\n\t\t\t/*\n\t\t\t * Pager sub view\n\t\t\t * @memberOf Netx.Views.AssetPreviewView\n\t\t\t * @alias pagerView\n\t\t\t * @type {Netx.Views.PagerView}\n\t\t\t */\n\t\t\tthis.pagerView = this.addSubView(\n\t\t\t\tnew AssetDetailPagerView({\n\t\t\t\t\tcollection: collection,\n\t\t\t\t\tmodel: collection.pager,\n\t\t\t\t\tchangesModel: this.changesModel,\n\t\t\t\t\tonConfirmHide: this.onConfirmHide,\n\t\t\t\t}),\n\t\t\t);\n\t\t}\n\n\t\t// Store type\n\t\tthis.previewType = this.detectPreviewType();\n\t}\n\n\t/** @override */\n\tbindModelEvents() {\n\t\tsuper.bindModelEvents();\n\t\t// When asset id changes, we need to update our preview type\n\t\treturn this.listenTo(\n\t\t\tthis.model,\n\t\t\t'change:assetId change:fileFormatFamily',\n\t\t\t_.debounce((model) => {\n\t\t\t\t// Get preview type\n\t\t\t\tconst previewType = this.detectPreviewType();\n\t\t\t\t// If our type has changed, remove the preview view\n\t\t\t\tpreviewType !== this.previewType && this.removePreview();\n\t\t\t\t// Set our current type\n\t\t\t\tthis.previewType = previewType;\n\t\t\t\t// Inject (if necessary)\n\t\t\t\tthis.isShown && this.injectPreviewView();\n\t\t\t}, 20),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @return {string}\n\t */\n\tdetectPreviewType() {\n\t\tif (this.model.hasMultimedia()) {\n\t\t\t// Audio\n\t\t\tif (this.model.get('audioUrl')) {\n\t\t\t\treturn 'audio';\n\t\t\t}\n\t\t\t// Video\n\t\t\tif (this.model.get('videoUrl')) {\n\t\t\t\treturn 'video';\n\t\t\t}\n\t\t}\n\t\treturn 'image';\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\t// Cleanup but maintain events\n\t\tif (this.previewView) {\n\t\t\tthis.previewView.$el.detach();\n\t\t}\n\n\t\tsuper.preRender();\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Cache\n\t\tthis.$info = this.$('.nx-info');\n\t\tthis.$pager = this.$('.nx-pager');\n\t\tthis.$previewWrapper = this.$('.nx-preview-wrapper');\n\n\t\t// If we are visible, add the new preview view\n\t\t// If not, it will be handled in `afterShown`\n\t\tthis.isShown && this.injectPreviewView();\n\n\t\t////////////////////////////////\n\t\t// SUB VIEWS\n\t\t////////////////////////////////\n\t\t// Pager\n\t\tthis.pagerView &&\n\t\t\tthis.$pager.length &&\n\t\t\tthis.pagerView.setElement(this.$pager).render().show();\n\t\t////////////////////////////////\n\t\t// !SUB VIEWS\n\t\t////////////////////////////////\n\t}\n\n\t/** @override */\n\tafterHidden(view) {\n\t\tthis.removePreview();\n\n\t\tsuper.afterHidden(view);\n\t}\n\n\t/** @override */\n\tafterShown(view) {\n\t\tsuper.afterShown(view);\n\t\t// Only if we have a valid id\n\t\tif (this.model.id && this.previewType) {\n\t\t\tthis.injectPreviewView();\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t */\n\tinjectPreviewView() {\n\t\t// Image encompasses anything not listed in multimedia\n\t\t// Possible outcomes\n\t\t// Netx.Views.AssetPreviewView_audio\n\t\t// Netx.Views.AssetPreviewView_image\n\t\t// Netx.Views.AssetPreviewView_video\n\n\t\t// Set appropriate classes\n\t\tthis.$el\n\t\t\t.removeClass((index, css) => {\n\t\t\t\t// We want to remove all classes matching 'preview-type-*'\n\t\t\t\treturn (css.match(/preview-type-\\S+/g) || []).join(' ');\n\t\t\t})\n\t\t\t.addClass(`preview-type-${this.previewType}`);\n\n\t\t// Dispatch custom event\n\t\tthis.trigger('nx:change:previewType', this, this.previewType);\n\n\t\t// Wait until rendered to inject\n\t\tthis.rendered.then(() => {\n\t\t\tif (!this.previewView) {\n\t\t\t\tlet sizeToContainer = this.sizeToContainer;\n\t\t\t\tsizeToContainer = _.isArray(sizeToContainer)\n\t\t\t\t\t? sizeToContainer.indexOf(this.previewType) > -1\n\t\t\t\t\t: sizeToContainer;\n\n\t\t\t\tthis.previewView = this.addSubView(\n\t\t\t\t\tnew AssetPreviewViews[this.previewType]({\n\t\t\t\t\t\t...this.subViewOptions,\n\t\t\t\t\t\tsizeToContainer: sizeToContainer,\n\t\t\t\t\t\tstaticMedia: this.staticMedia || false,\n\t\t\t\t\t\timageSource: this.imageSource,\n\t\t\t\t\t}).render(),\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.$previewWrapper.append(this.previewView.$el);\n\t\t\tthis.whenShown.then(() => {\n\t\t\t\tthis.previewView.show();\n\t\t\t});\n\t\t});\n\t}\n\n\t/** @method */\n\tremovePreview() {\n\t\tif (!this.previewView) return;\n\n\t\tthis.removeSubView(this.previewView, true);\n\t\tdelete this.previewView;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetPreviewView';\n\t}\n}\n","/** @override */\nimport Base from 'netxcore@netx/core-asset/views/assetPreviewView';\nimport CoreView from '@netx/core/lib/netx-view';\n\nimport AudioPreviewView from './assetPreviewView_audio';\nimport ImagePreviewView from './assetPreviewView_image';\nimport VideoPreviewView from './assetPreviewView_video';\n\nconst AssetPreviewViews = {\n\taudio: AudioPreviewView,\n\timage: ImagePreviewView,\n\tvideo: VideoPreviewView,\n};\n\nexport default class AssetPreviewView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.events = {\n\t\t\tcontextmenu: 'onRightClick',\n\t\t\t...opts.events,\n\t\t};\n\t\topts.showInfo = opts.showInfo === true;\n\t\topts.sizeToContainer = false;\n\t\tsuper(opts);\n\t}\n\n\t/**\n\t * @override\n\t */\n\tinjectPreviewView() {\n\t\t// Image encompasses anything not listed in multimedia\n\t\t// Possible outcomes\n\t\t// Netx.Views.AssetPreviewView_audio\n\t\t// Netx.Views.AssetPreviewView_image\n\t\t// Netx.Views.AssetPreviewView_video\n\n\t\t// Set appropriate classes\n\t\tthis.$el\n\t\t\t.removeClass((index, css) => {\n\t\t\t\t// We want to remove all classes matching 'preview-type-*'\n\t\t\t\treturn (css.match(/preview-type-\\S+/g) || []).join(' ');\n\t\t\t})\n\t\t\t.addClass(`preview-type-${this.previewType}`);\n\n\t\t// Dispatch custom event\n\t\tthis.trigger('nx:change:previewType', this, this.previewType);\n\n\t\t// Wait until rendered to inject\n\t\tthis.rendered.then(() => {\n\t\t\tif (!this.previewView) {\n\t\t\t\tlet sizeToContainer = this.sizeToContainer;\n\t\t\t\tsizeToContainer = Array.isArray(sizeToContainer)\n\t\t\t\t\t? sizeToContainer.indexOf(this.previewType) > -1\n\t\t\t\t\t: sizeToContainer;\n\n\t\t\t\tthis.previewView = this.addSubView(\n\t\t\t\t\tnew AssetPreviewViews[this.previewType]({\n\t\t\t\t\t\t...this.subViewOptions,\n\t\t\t\t\t\tsizeToContainer: sizeToContainer,\n\t\t\t\t\t}).render(),\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis.$previewWrapper.append(this.previewView.$el);\n\n\t\t\tthis.previewView.show();\n\n\t\t\tthis.$el.removeClass(function (index, className) {\n\t\t\t\treturn (className.match(/(^|\\s)custom-icon-\\S+/g) || []).join(' ');\n\t\t\t});\n\n\t\t\tconst iconOverride = _.overrideDefaultIcon(\n\t\t\t\tthis.model.get('previewUrl') || this.model.get('preview'),\n\t\t\t);\n\t\t\tif (iconOverride) {\n\t\t\t\tthis.$el.addClass(iconOverride);\n\t\t\t}\n\t\t});\n\t}\n\n\t/** @method */\n\tonRightClick(e) {\n\t\te.preventDefault();\n\t\treturn false;\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tthis.isShown = true;\n\t\tsuper.postRender();\n\n\t\t//prevent the default context menu for appearing\n\t\tthis.$el.find('.nx-preview-image').oncontextmenu = (event) => {\n\t\t\tevent.preventDefault();\n\t\t\treturn false;\n\t\t};\n\n\t\tvar iconOverride = _.overrideDefaultIcon(\n\t\t\tthis.model.get('previewUrl') || this.model.get('preview'),\n\t\t);\n\t\tif (iconOverride) {\n\t\t\tthis.$el.addClass(iconOverride);\n\t\t}\n\t\tthis.$el.toggleClass('custom-icon', iconOverride.length > 0);\n\t}\n}\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/assetView.html';\n\nimport {renderableChanges} from '../properties/asset';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\nimport {pendingAssets} from '@netx/core-asset/collections/singleton/pendingAssets';\nimport {assetAttributes} from '@netx/core-attribute/singletons';\n\nexport default class AssetView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.className = opts.className || 'asset';\n\t\topts.template = opts.template || Template;\n\t\topts.loadingClassObjects = opts.loadingClassObjects || ['model'];\n\t\topts.loadingClassRemoveDelay = opts.loadingClassRemoveDelay || 200;\n\t\topts.events = {\n\t\t\t'click .asset-attributes a': 'stopPropagation',\n\t\t\t...opts.events,\n\t\t};\n\t\tsuper(opts);\n\n\t\t/**\n\t\t * @memberOf Netx.Views.AssetView\n\t\t * @alias assetAttributes\n\t\t * @type {module:asset/collections/attributes}\n\t\t */\n\t\tthis.assetAttributes = opts.assetAttributes || assetAttributes;\n\n\t\t/**\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tthis.cacheBuster = opts.cacheBuster || '';\n\n\t\t/** @type {boolean} */\n\t\tthis.displayProgress = opts.displayProgress !== false;\n\n\t\t/**\n\t\t * What source to use for the thumbnail\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tthis.imageSource = opts.imageSource || 'thumb';\n\n\t\t/**\n\t\t * Will hold our asset sources (original, preview, thumb)\n\t\t * @memberOf Netx.Views.AssetView\n\t\t * @alias imageSources\n\t\t * @type {object}\n\t\t */\n\t\tthis.imageSources = {};\n\n\t\t/**\n\t\t * @memberOf Netx.Views.AssetView\n\t\t * @alias pendingAssets\n\t\t * @type {Netx.Collections.PendingAssets}\n\t\t */\n\t\tthis.pendingAssets = opts.pendingAssets || pendingAssets;\n\n\t\t/**\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.percent = opts.percent || 0;\n\n\t\t/**\n\t\t * User preference keys this view will be using\n\t\t * @memberOf Netx.Views.AssetListItemView_card\n\t\t * @alias userPrefKeys\n\t\t * @memberOf Netx.Views.AssetListItemView_card\n\t\t * @type {object}\n\t\t */\n\t\tthis.userPrefKeys = {\n\t\t\tthumbMaxSize: 'image.thumb_max_length',\n\t\t\t...opts.userPrefKeys,\n\t\t};\n\n\t\t// See if we can't get the cache busted url in init\n\t\tthis.updateImageSources();\n\t}\n\n\t/** @override */\n\tbindModelEvents() {\n\t\tsuper.bindModelEvents();\n\n\t\tconst model = this.model;\n\n\t\treturn (\n\t\t\tthis.listenTo(model, 'request:read', () => {\n\t\t\t\t// Remove this the moment we start reading the asset on the server\n\t\t\t\tthis.$el.removeClass('image-ready');\n\t\t\t})\n\t\t\t\t.listenTo(model, 'change', () => {\n\t\t\t\t\tif (_.intersection(_.keys(model.changed), renderableChanges).length) {\n\t\t\t\t\t\tthis.render();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t// Toggled in cart\n\t\t\t\t.listenTo(model, 'change:inCurrentCart', this.toggledCart)\n\t\t\t\t// Clean up after ourselves.\n\t\t\t\t.listenTo(model, 'remove', this.checkRemove)\n\t\t\t\t.listenTo(model, 'destroy', this.remove)\n\t\t\t\t.listenTo(model, 'taskComplete checkedIn', (model) => {\n\t\t\t\t\tthis.tasksComplete();\n\t\t\t\t})\n\t\t\t\t.listenTo(model, 'taskStatus checkingIn', (model) => {\n\t\t\t\t\tthis.tasksRunning();\n\t\t\t\t})\n\t\t\t\t// Asset progress (importing/checkin/customThumbnail etc)\n\t\t\t\t.listenTo(model.progress, 'change', (progress) => {\n\t\t\t\t\tprogress.get('active')\n\t\t\t\t\t\t? this.showProgress(progress)\n\t\t\t\t\t\t: this.hideProgress();\n\t\t\t\t})\n\t\t\t\t// Hack\n\t\t\t\t.listenTo(model, 'thumbnailUpdated', (model, file, wasIconPath) => {\n\t\t\t\t\t// Updating the thumbnail does not change the moddate\n\t\t\t\t\t// Event if it did, we would need to fetch the asset to get it\n\t\t\t\t\t// Need to figure something out - for now we check this in our templateVars and if\n\t\t\t\t\t// it is true we provide a prefix to cachebuster\n\t\t\t\t\tthis.thumbnailUpdated = true;\n\t\t\t\t})\n\t\t);\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\n\t\t// Upate sources\n\t\tthis.updateImageSources();\n\t\tthis.updateImageDimensions();\n\n\t\tconst model = this.model;\n\t\tconst fileFormatFamily = model.get('fileFormatFamily');\n\t\tconst imageSources = this.imageSources;\n\t\tconst inCart = model.get('inCurrentCart') || model.inCurrentCart;\n\t\tconst metadata = model.metadata;\n\t\tconst noValueStr = i18n.t('i18n.noValue');\n\t\tlet thumbUrl = model.get('thumbUrl') || model.get('thumb');\n\t\tlet previewUrl = model.get('previewUrl') || model.get('preview');\n\n\t\t// We are uploading most likely - go with default icon\n\t\tif (!previewUrl || !thumbUrl) {\n\t\t\tconst file = model.get('file');\n\t\t\tthumbUrl = previewUrl =\n\t\t\t\tfile.substring(file.lastIndexOf('.') + 1) + '.png';\n\t\t}\n\n\t\t// Set these for the image before moving forward and doing minimums\n\t\tthis.$el\n\t\t\t.removeClass('image-ready')\n\t\t\t// Add class if expiring asset\n\t\t\t.toggleClass('expires', model.get('expirationDate') !== 0)\n\t\t\t// TODO: deprecate and use data-nx-model-id wherever this is being counted on in the code\n\t\t\t.attr('data-asset-id', model.get('assetId'));\n\n\t\t// Map our data so the template does not have to\n\t\t// What would be ideal is to use the `assetAttributesView` - but thing like (table) list mode will not play nicely\n\t\t// due to all views needing a home and that list view is a table - which would make us a `tr` at the time and the\n\t\t// items from `assetAttributesView` would need to somehow live on our top level as `td`s\n\t\tconst assetAttributes = this.assetAttributes;\n\t\tconst attributes = (\n\t\t\tthis.attributeSetsSelection\n\t\t\t\t? this.attributeSetsSelection.getAttributes()\n\t\t\t\t: assetAttributes\n\t\t).map((attrModel) => {\n\t\t\tlet value = model.getAttribute(attrModel.id, null, {\n\t\t\t\tformat: true,\n\t\t\t});\n\n\t\t\t// Ensure string for what is to come\n\t\t\tvalue = value.toString();\n\n\t\t\tconst empty = value === '';\n\t\t\treturn {\n\t\t\t\tname: attrModel.get('name'),\n\t\t\t\tvalue: (!empty && value) || noValueStr,\n\t\t\t\tempty: empty,\n\t\t\t};\n\t\t});\n\n\t\t// Additional template vars\n\t\t_.extend(this.templateVars, {\n\t\t\tassetAttributes: attributes,\n\t\t\tcanZoom: model.canZoom(),\n\t\t\texpiring: model.getAttribute(null, 'expirationDate', {format: true}),\n\t\t\timgSrc: this.getImageSource(),\n\t\t\tinCurrentCart: inCart,\n\t\t\tisDocument: model.isDocument(),\n\t\t\tisPDF: model.isPDF(),\n\t\t\tisPhoto: model.isImage(),\n\t\t\tmetadata: model.metadata,\n\t\t\torientation: this.orientation,\n\t\t\toriginalModUrl: imageSources.original,\n\t\t\tpages: model.isPDF() && (model.get('constituentIds') || []).length,\n\t\t\tpercent: model.progress.get('percent'),\n\t\t\tprogressMessage: model.progress.get('message'),\n\t\t\tpreviewModUrl: imageSources.preview,\n\t\t\tstate: this.importState,\n\t\t\tthumbModUrl: imageSources.thumb,\n\t\t});\n\t}\n\n\t/** @method */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Unset this\n\t\tthis.thumbnailUpdated = null;\n\n\t\t// Cache\n\t\tthis.$formatIcon = this.$('.format-icon');\n\t\tthis.$thumbnailContainer = this.$('.nx-thumbnail-container');\n\t\tthis.$thumbnail = this.$('.nx-thumbnail');\n\t\tthis.$thumbnailImage = this.$('img.nx-thumbnail-image');\n\t\tthis.$progress = this.$('.progress');\n\t\tthis.$progressBar = this.$progress.find('.progress-bar');\n\t\tthis.$progressBarSr = this.$progressBar.find('.sr-only');\n\t\tthis.$progressMessage = this.$progress.find('.nx-progress-message');\n\n\t\t// If the asset is working\n\t\tif (this.pendingAssets.findByAsset(this.model.id)) {\n\t\t\tthis.tasksRunning();\n\t\t} else {\n\t\t\tthis.tasksComplete();\n\t\t}\n\n\t\t// Active progress\n\t\tif (this.model.progress.get('active')) {\n\t\t\tthis.showProgress(this.model.progress);\n\t\t}\n\n\t\t// Wait for images to load\n\t\t// See hack in assetPreviewView_image\n\t\t!this._imageHackActive &&\n\t\t\tthis.whenImagesLoaded.then(() => {\n\t\t\t\tthis.$el.addClass('image-ready');\n\t\t\t});\n\n\t\tthis.setIcon();\n\t\tthis.toggledCart();\n\t}\n\n\tremove() {\n\t\tdelete this.pendingAssets;\n\t\tsuper.remove();\n\t}\n\n\t/**\n\t * Get the current source for image\n\t * If nothing is passed `this.imageSource` will be used\n\t * @method\n\t * @param {string} source Source to get (`original`, `preview`, `thumb`)\n\t * @return {string} Image source\n\t */\n\tgetImageSource(source) {\n\t\treturn this.imageSources[source || this.imageSource];\n\t}\n\n\t/**\n\t * @method\n\t */\n\thideProgress() {\n\t\tthis.$el.removeClass('has-progress');\n\n\t\tthis.$progress && this.$progress.hide();\n\t\tthis.$progressBar &&\n\t\t\tthis.$progressBar.css('width', '0%').attr('aria-valuenow', 0);\n\t\tthis.$progressBarSr &&\n\t\t\tthis.$progressBarSr.html(i18n.t('i18n.percentLoaded', {percent: 0}));\n\t}\n\n\t/**\n\t * @method\n\t */\n\tsetIcon() {\n\t\tif (!this.$formatIcon) return;\n\n\t\tlet iconClass = 'icon-warning-sign';\n\t\tswitch (this.model.get('formatIcon')) {\n\t\t\tcase 'image':\n\t\t\t\ticonClass = 'icon-picture';\n\t\t\t\tbreak;\n\t\t\tcase 'video':\n\t\t\t\ticonClass = 'icon-film';\n\t\t\t\tbreak;\n\t\t\tcase 'pdf':\n\t\t\t\ticonClass = 'icon-file';\n\t\t\t\tbreak;\n\t\t}\n\t\tthis.$formatIcon.addClass(iconClass);\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} imageSource Image source to use (thumb/preview/zoom etc)\n\t */\n\tsetImage(imageSource) {\n\t\tif (!_.isUndefined(imageSource)) {\n\t\t\t// Already set?\n\t\t\tif (this.imageSource === imageSource) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.imageSource = imageSource;\n\t\t}\n\t\tif (this.rendering) return;\n\n\t\t// Remvoe the image ready class\n\t\tthis.$el.removeClass('image-ready');\n\t\t// Listen for the image to be loaded and put our image ready class back\n\t\tthis.$thumbnailImage.on('load', () => {\n\t\t\tthis.$el.addClass('image-ready');\n\t\t});\n\t\t// Load image\n\t\tthis.$thumbnailImage.attr('src', this.imageSources[this.imageSource]);\n\t}\n\n\t/**\n\t * @method\n\t * @param {Netx.Models.Progress} progress Progress model\n\t */\n\tshowProgress(progress) {\n\t\tif (!this.displayProgress) return;\n\n\t\tthis.$progressMessage &&\n\t\t\tthis.$progressMessage.html(progress.get('message'));\n\t\tconst percent = progress.get('percent');\n\n\t\tif (_.isNumber(percent)) {\n\t\t\tthis.$el.addClass('has-progress');\n\t\t\tthis.$progress && this.$progress.show();\n\n\t\t\tthis.$progressBar &&\n\t\t\t\tthis.$progressBar\n\t\t\t\t\t.css('width', percent + '%')\n\t\t\t\t\t.attr('aria-valuenow', percent);\n\t\t\tthis.$progressBarSr &&\n\t\t\t\tthis.$progressBarSr.html(\n\t\t\t\t\ti18n.t('i18n.percentLoaded', {percent: percent}),\n\t\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t */\n\ttasksComplete() {\n\t\tif (!this.taskInProgress) return;\n\n\t\tthis.importState && this.$el.removeClass(this.importState);\n\t\tthis.$el.removeAttr('onClick');\n\t\tthis.importState = null;\n\t\tthis.taskInProgress = false;\n\t}\n\n\t/**\n\t * @method\n\t */\n\ttasksRunning() {\n\t\tif (this.taskInProgress) return;\n\n\t\tconst pendingAsset = this.pendingAssets.findByAsset(this.model.id);\n\t\t// Show status\n\t\t// Remove old import state class\n\t\tthis.importState && this.$el.removeClass(this.importState);\n\t\t// Store [new] import state\n\t\tthis.importState = (pendingAsset && pendingAsset.get('state')) || 'working';\n\n\t\tthis.$el\n\t\t\t// add new import state class\n\t\t\t.addClass(this.importState)\n\t\t\t// don't click on uploading assets\n\t\t\t.attr('onClick', 'return false;');\n\n\t\tthis.taskInProgress = true;\n\t}\n\n\t/** @method */\n\ttoggledCart() {\n\t\t// Toggle class\n\t\tthis.$el.toggleClass('in-cart', this.model.get('inCurrentCart') || false);\n\t}\n\n\t/** @override */\n\tunbindModelEvents() {\n\t\tsuper.unbindModelEvents();\n\t\treturn this.stopListening(this.model.progress);\n\t}\n\n\t/**\n\t * Recalculates the asset's image dimensions\n\t * @method\n\t */\n\tupdateImageDimensions() {\n\t\t// TODO: this should all mostly be handled by the model\n\n\t\tconst model = this.model;\n\t\tconst fileFormatFamily = model.get('fileFormatFamily');\n\t\tconst thumbUrl = model.get('thumbUrl') || model.get('thumb');\n\t\tconst previewUrl = model.get('previewUrl') || model.get('preview');\n\t\tlet previewWidth = model.get('previewWidth');\n\t\tlet previewHeight = model.get('previewHeight');\n\t\tlet zoomHeight, zoomWidth;\n\n\t\t// Make these available view wide\n\t\tthis.thumbMaxLength =\n\t\t\tparseInt(getPreference('image.thumb_max_length')) || 150;\n\n\t\t// Probably uploading - or just a run of the mill file with no dimensions\n\t\t// Go with default icon styles\n\t\tif (!previewUrl || (!previewWidth && !previewHeight)) {\n\t\t\t// This is default icon stuff if not an image\n\t\t\tpreviewHeight = previewWidth = 500;\n\t\t\tzoomWidth = zoomHeight = this.zoomHeight = 1000;\n\t\t}\n\n\t\t// Dimensions\n\t\tlet aspectRatio, orientation, thumbHeight, thumbWidth;\n\t\tif (previewWidth && previewHeight) {\n\t\t\taspectRatio = this.aspectRatio = previewWidth / previewHeight;\n\t\t\torientation = this.orientation =\n\t\t\t\taspectRatio < 1 ? 'portrait' : 'landscape';\n\t\t\t// Sizes for thumb are not set on the bean (but shouldn't they be?)\n\t\t\tif (previewWidth > previewHeight) {\n\t\t\t\tthumbWidth = this.thumbMaxLength;\n\t\t\t\tthumbHeight = Math.round(thumbWidth / aspectRatio);\n\t\t\t\tzoomWidth = 1000;\n\t\t\t\tzoomHeight = Math.round(zoomWidth / aspectRatio);\n\t\t\t} else {\n\t\t\t\tthumbHeight = this.thumbMaxLength;\n\t\t\t\tthumbWidth = Math.round(thumbHeight * aspectRatio);\n\t\t\t\tzoomHeight = 1000;\n\t\t\t\tzoomWidth = Math.round(zoomHeight * aspectRatio);\n\t\t\t}\n\t\t}\n\n\t\t// Store dimensions\n\t\tthis.imageDimensions = {\n\t\t\toriginal: {\n\t\t\t\theight: model.get('fileheight') || model.get('fileHeight'),\n\t\t\t\twidth: model.get('filewidth') || model.get('fileWidth'),\n\t\t\t},\n\t\t\tpreview: {\n\t\t\t\theight: previewHeight,\n\t\t\t\twidth: previewWidth,\n\t\t\t},\n\t\t\tthumb: {\n\t\t\t\theight: thumbHeight,\n\t\t\t\twidth: thumbWidth,\n\t\t\t},\n\t\t\tzoom: {\n\t\t\t\theight: zoomHeight,\n\t\t\t\twidth: zoomWidth,\n\t\t\t},\n\t\t};\n\n\t\t// Set on el\n\t\tthis.$el\n\t\t\t.attr('data-nx-image-preview-width', previewWidth || 'unknown')\n\t\t\t.attr('data-nx-image-preview-height', previewHeight || 'unknown')\n\t\t\t.attr('data-nx-image-thumb-width', thumbWidth || 'unknown')\n\t\t\t.attr('data-nx-image-thumb-height', thumbHeight || 'unknown')\n\t\t\t.attr('data-nx-image-zoom-height', zoomHeight || 'unknown')\n\t\t\t.attr('data-nx-image-zoom-width', zoomWidth || 'unknown')\n\t\t\t.attr('data-nx-image-aspect-ratio', aspectRatio || 'unknown')\n\t\t\t.attr('data-nx-image-orientation', orientation || 'unknown');\n\t}\n\n\t/**\n\t * Update asset's image sources\n\t * @method\n\t */\n\tupdateImageSources() {\n\t\tconst token = Netx.share && Netx.share.token;\n\n\t\t// TODO: this should all mostly be handled by the model\n\t\tconst model = this.model;\n\t\tconst tokenString = token && token.id;\n\t\tconst originalUrl = `/file/asset/${model.id}/original/${model.get('file')}`;\n\t\tconst previewUrl = model.get('previewUrl') || model.get('preview');\n\t\tconst thumbUrl = model.get('thumbUrl') || model.get('thumb');\n\t\tconst zoomUrl = model.get('zoomUrl');\n\n\t\t// Can we cache bust these urls?\n\t\tthis.cacheBuster = model.cacheBuster\n\t\t\t? // If our thumbnail was updated (via custom thumbnail), we need to add to the cachebuster as moddate will not be enough\n\t\t\t (this.cacheBuster = model.cacheBuster(\n\t\t\t\t\tthis.thumbnailUpdated ? `customthumb=${_.uniqueId()}` : '',\n\t\t\t ))\n\t\t\t: // Cachebuster will kill our dataURL - and is uneeded in this case\n\t\t\t '';\n\n\t\tlet additionalParams = this.cacheBuster;\n\t\tif (tokenString) {\n\t\t\tadditionalParams = `?token=${tokenString}&pw=${token.get(\n\t\t\t\t'password',\n\t\t\t)}&${this.cacheBuster.replace('?', '')}`;\n\t\t}\n\n\t\t// Set on `this.imageSources`\n\t\tObject.assign(this.imageSources, {\n\t\t\toriginal: originalUrl ? `${originalUrl}${additionalParams})` : '',\n\t\t\tpreview: previewUrl ? `${previewUrl}${additionalParams}` : '',\n\t\t\tthumb: thumbUrl ? `${thumbUrl}${additionalParams}` : '',\n\t\t\tzoom: zoomUrl ? `${zoomUrl}${additionalParams}` : '',\n\t\t});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetView';\n\t}\n}\n","import Base from 'netxcore@netx/core-asset/views/assetView';\nimport {isPublicUser} from '@netx/core-user-next/utils/isPublicUser';\nimport {\n\tfaArrowDown,\n\tfaCheck,\n\tfaExpand,\n\tfaLock,\n\tfaPlayCircle,\n\tfaSignOutAlt,\n\tfaTimes,\n} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaArrowDown,\n\tfaCheck,\n\tfaExpand,\n\tfaLock,\n\tfaPlayCircle,\n\tfaSignOutAlt,\n\tfaTimes,\n});\n\n/** @override */\nexport default class AssetView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.icons = {...icons, ...opts.icons};\n\t\topts.attributes = {\n\t\t\t'data-nx-template': 'menuView-context',\n\t\t\t...opts.attributes,\n\t\t};\n\t\tsuper(opts);\n\n\t\tif (isPublicUser()) {\n\t\t\tthis.stopListening(dispatcher, 'change:inCurrentCart').listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'cart:empty:success',\n\t\t\t\t() => {\n\t\t\t\t\tthis.$el.removeClass('in-cart');\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\t/** @method */\n\ttoggledCart() {\n\t\tvar inCart = isPublicUser()\n\t\t\t? Netx.cart && Netx.cart.current.isInCart(this.model.id)\n\t\t\t: this.model.get('inCurrentCart');\n\t\tthis.$el.toggleClass('in-cart', inCart);\n\t}\n}\n","/**\n * Netx.Collections.CartAssets reflects the assets in a cart on the DAM -- either a saved cart, or\n * the in-memory cart AKA the \"current cart\". It contains a host of RPC methods for manipulating cart\n * contents and for all of the cart-based asset operations on the DAM.\n *\n * Inherts the paging system from Netx.Collections.Assets to fetch cart assets by page or chunk.\n *\n * @class\n * @todo The new cart API is much nicer, and it'd be nice if this object reflected it.\n * I'd rather call 'cart.addAssets' than 'cart.cartAdd', etc. We'd want to create deprecations\n * around the old methods so they still work for now, but use the new methods in the core controlle\n */\nimport Base from '@netx/core-asset/collections/assets';\n\nimport {i18n} from '@netx/core/i18n';\nimport AssetSetModel from '@netx/core-asset/models/assetSet';\nimport {types as assetSetTypes} from '@netx/core-asset/properties/assetSets';\nimport {userInputToExpirationTime} from '@netx/core-asset-expiration/utils';\nimport customConfig from '../config';\nimport {unarchiveTypes} from '../properties/cartAssetArchive';\nimport {allSavedCarts} from '@netx/core-cart/singletons/savedCarts';\n\nexport default class CartAssets extends Base {\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tfacetedSearch: 'Loading saved cart assets',\n\t\t\tsearchAssetBeanObjects: 'Loading saved cart assets',\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tfacetedSearch: 'Loaded saved cart assets',\n\t\t\tsearchAssetBeanObjects: 'Loaded saved cart assets',\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} methods - Methods for this Collection\n\t * @property {method} methods.addAssetsToCart - Add assets to cart\n\t * @property {method} methods.addFacetedSearchToCart - Add faceted search to cart\n\t * @property {method} methods.archiveCartAssets - Archive all assets in cart\n\t * @property {method} methods.createObjectPackage - Create TMS object package\n\t * @property {method} methods.deleteCartAssets - Delete all assets in cart\n\t * @property {method} methods.empty - Empty cart\n\t * @property {method} methods.expireCartAssets - Set all assets in cart to expire\n\t * @property {method} methods.fetchAll - Fetch all assets\n\t * @property {method} methods.inspect - Inspect cart contents\n\t * @property {method} methods.removeAssetsFromCart - Remove assets from cart\n\t * @property {method} methods.setAssetsInCart - Set assets in cart\n\t * @property {method} methods.unarchiveCartAssets - Unarchive all assets in cart\n\t */\n\tget methods() {\n\t\treturn _.extend(super.methods, {\n\t\t\t/**\n\t\t\t * Add assets to cart\n\t\t\t * @method\n\t\t\t * @param {array} assets Assets/asset ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\taddAssetsToCart(assets, opts) {\n\t\t\t\treturn ['addAssetsToCart', this.id, _.tidyAssetList(assets)];\n\t\t\t},\n\t\t\t/**\n\t\t\t * Add faceted search to cart\n\t\t\t * @method\n\t\t\t * @param {module:search/collections/searchRules} selection Selection\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\taddFacetedSearchToCart(selection, opts) {\n\t\t\t\tif (!selection) {\n\t\t\t\t\tthrow new Error('No search selection!');\n\t\t\t\t}\n\n\t\t\t\tvar search = selection.createSearchObject();\n\t\t\t\treturn [\n\t\t\t\t\t'addFacetedSearchToCart',\n\t\t\t\t\tthis.id,\n\t\t\t\t\tsearch.sortField,\n\t\t\t\t\tsearch.sortOrder,\n\t\t\t\t\tsearch.matchCriteria,\n\t\t\t\t\tsearch.elementTypes,\n\t\t\t\t\tsearch.elementSubType1s,\n\t\t\t\t\tsearch.elementSubType2s,\n\t\t\t\t\tsearch.elementValue1s,\n\t\t\t\t\tsearch.elementValue2s,\n\t\t\t\t\tsearch.elementValue3s,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tselection.searchFacets.selectedValues(),\n\t\t\t\t\tselection.searchFacets.filterMode,\n\t\t\t\t];\n\t\t\t},\n\t\t\t/**\n\t\t\t * Archive cart assets\n\t\t\t * @method\n\t\t\t */\n\t\t\tarchiveCartAssets: ['archiveCartAssets', 'id', 'archiveArgs.locationId'],\n\t\t\t/**\n\t\t\t * TMS\n\t\t\t * @method\n\t\t\t */\n\t\t\tcreateObjectPackage: ['createObjectPackage', 'id'],\n\t\t\t/**\n\t\t\t * Delete all assets in cart\n\t\t\t * @method\n\t\t\t */\n\t\t\tdeleteCartAssets: ['deleteCartAssets', 'id'],\n\t\t\t/**\n\t\t\t * Empty cart\n\t\t\t * @method\n\t\t\t */\n\t\t\tempty: ['setAssetsInCart', 'id', []],\n\t\t\t/**\n\t\t\t * Delete all assets in cart\n\t\t\t * @method\n\t\t\t */\n\t\t\texpireCartAssets: ['expireCartAssets', 'id', 'expirationArgs.date'],\n\t\t\t/**\n\t\t\t * Fetch all assets\n\t\t\t * Usefull for our pull until (chekcing to see if an asset is still present)\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tfetchAll(opts) {\n\t\t\t\tvar search = this.selection.createSearchObject();\n\t\t\t\treturn [\n\t\t\t\t\t'searchAssetObjects',\n\t\t\t\t\tsearch.sortField,\n\t\t\t\t\tsearch.sortOrder,\n\t\t\t\t\tsearch.matchCriteria,\n\t\t\t\t\tsearch.elementTypes,\n\t\t\t\t\tsearch.elementSubType1s,\n\t\t\t\t\tsearch.elementSubType2s,\n\t\t\t\t\tsearch.elementValue1s,\n\t\t\t\t\tsearch.elementValue2s,\n\t\t\t\t\tsearch.elementValue3s,\n\t\t\t\t\tsearch.saveSearch,\n\t\t\t\t\tsearch.notifyType,\n\t\t\t\t\tsearch.ignoreStat,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t];\n\t\t\t},\n\t\t\t/**\n\t\t\t * Inspects cart assets for repupose\n\t\t\t * @method\n\t\t\t */\n\t\t\tinspect: ['inspectCartContents', 'id'],\n\t\t\t/**\n\t\t\t * Remove assets from cart\n\t\t\t * @method\n\t\t\t * @param {array} assets Assets/asset ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tremoveAssetsFromCart(assets, opts) {\n\t\t\t\treturn ['removeAssetsFromCart', this.id, _.tidyAssetList(assets)];\n\t\t\t},\n\t\t\t/**\n\t\t\t * Set assets in cart\n\t\t\t * @method\n\t\t\t * @param {array} assets Assets/asset ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tsetAssetsInCart(assets, opts) {\n\t\t\t\treturn ['setAssetsInCart', this.id, _.tidyAssetList(assets)];\n\t\t\t},\n\t\t\t/**\n\t\t\t * Unarchive cart assets\n\t\t\t * @method\n\t\t\t */\n\t\t\tunarchiveCartAssets: [\n\t\t\t\t'unarchiveCartAssets',\n\t\t\t\t'id',\n\t\t\t\t'unarchiveArgs.type',\n\t\t\t\t'unarchiveArgs.email',\n\t\t\t],\n\t\t});\n\t}\n\n\t/**\n\t * @property {object} parsers - Parsers for this collection\n\t * @property {function} parsers.addAssetsToCart - Added assets to cart\n\t * @property {function} parsers.addFacetedSearch - Added assets to cart based on faceted search\n\t * @property {function} parsers.addSearch - Added assets to cart based on search\n\t * @property {function} parsers.empty - Emptied cart\n\t * @property {function} parsers.inspect - Inspected cart assets\n\t * @property {function} parsers.repurpose - Repurposed assets with preset\n\t * @property {function} parsers.removeAssetsFromCart - Removed assets from cart\n\t */\n\tget parsers() {\n\t\treturn _.extend(super.parsers, {\n\t\t\t/**\n\t\t\t * Added assets to cart\n\t\t\t * @function\n\t\t\t * @param {number} count Cart asset count\n\t\t\t * @param {array} assets Assets/asset ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\taddAssetsToCart(count, assets, opts) {\n\t\t\t\tassets = _.tidyAssetList(assets);\n\t\t\t\t// TODO: it'd be nice to get the calling arguments included in the complete: event & not have to do this:\n\t\t\t\tthis.listenToOnce(this, 'complete:addAssetsToCart', () => {\n\t\t\t\t\tdispatcher.trigger('cart:added', assets);\n\t\t\t\t\tthis.trigger('added', assets);\n\t\t\t\t});\n\n\t\t\t\tthis.cartResultParser(count);\n\t\t\t},\n\t\t\t/**\n\t\t\t * Added assets to cart based on facetedsearch\n\t\t\t * @function\n\t\t\t * @param {number} count Cart asset count\n\t\t\t * @param {module:search/collections/searchRules} selection Selection\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\taddFacetedSearchToCart(count, selection, opts) {\n\t\t\t\tthis.cartResultParser(count);\n\t\t\t},\n\t\t\t/**\n\t\t\t * Emptied cart\n\t\t\t * @function\n\t\t\t * @param {number} count Cart asset count\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tempty(count, opts) {\n\t\t\t\tthis.reset(); // clear out the collection\n\t\t\t\tthis.pager.clearPages();\n\t\t\t\tthis.trigger('emptied');\n\t\t\t\tdispatcher.trigger('cart:cleared', this);\n\t\t\t},\n\t\t\t/**\n\t\t\t * Inspected cart assets\n\t\t\t * @function\n\t\t\t * @param {object} data Inspection data\n\t\t\t * @param {object} opts Request options\n\t\t\t * @example\n\t\t\t * {\n\t\t\t * \"imageCount\":2,\n\t\t\t * \"videoCount\":0,\n\t\t\t * \"audioCount\":0,\n\t\t\t * \"documentCount\":0,\n\t\t\t * \"otherAssetCount\":0,\n\t\t\t * \"downloadApprovalRequired\":false,\n\t\t\t * \"videoAssetIds\":[],\n\t\t\t * \"imageAssetIds\":[3,6],\n\t\t\t * \"audioAssetIds\":[],\n\t\t\t * \"documentAssetIds\":null,\n\t\t\t * \"otherAssetIds\":[],\n\t\t\t * \"cartItemBreachesImageDownloadThreshold\":false,\n\t\t\t * \"cartItemBreachesVideoDownloadThreshold\":false\n\t\t\t * }\n\t\t\t */\n\t\t\tinspect(data, opts) {\n\t\t\t\tthis.inspection = data;\n\t\t\t},\n\t\t\t/**\n\t\t\t * Removed assets from cart\n\t\t\t * @function\n\t\t\t * @param {number} count Cart asset count\n\t\t\t * @param {array} assets Assets/asset ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tremoveAssetsFromCart(count, assets, opts) {\n\t\t\t\t!this.id && this.cartResultParser(count);\n\t\t\t},\n\t\t});\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * The cart ID; set to 0 to fetch from the current cart.\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.id = 0;\n\n\t\tif (opts.cartId) {\n\t\t\tconsole.warn(\n\t\t\t\t'`cartId` is deprecated on the `CartAssets` collections. Use the `id` by version 9.1',\n\t\t\t);\n\t\t\topts.id = opts.cartId;\n\t\t}\n\n\t\tif (opts.id) {\n\t\t\tthis.setCartId(opts.id || opts.cartId);\n\t\t}\n\n\t\t/**\n\t\t * @memberof Netx.Collections.CartAssets\n\t\t * @property {object} archiveArgs - Arguments to the archive cart assets method\n\t\t * @property {number} archiveArgs.locationId - Archive location id\n\t\t * @default\n\t\t */\n\t\tthis.archiveArgs = _.extend(\n\t\t\t{\n\t\t\t\tlocationId: 0,\n\t\t\t},\n\t\t\topts.archiveArgs,\n\t\t);\n\n\t\t/**\n\t\t * Target of various batch task methods -- a list of asset IDs, or an empty array to specify the current cart contents.\n\t\t * @memberof Netx.Collections.CartAssets\n\t\t * @type {array}\n\t\t */\n\t\tthis.batch = [];\n\n\t\t/**\n\t\t * @memberof Netx.Collections.CartAssets\n\t\t * @property {object} expirationArgs - Arguments to the expire cart assets method\n\t\t * @property {number} expirationArgs.date - Expiration date to set (in milliseconds)\n\t\t */\n\t\tthis.expirationArgs = _.extend(\n\t\t\t{\n\t\t\t\tdate: 0,\n\t\t\t},\n\t\t\topts.expirationArgs,\n\t\t);\n\n\t\t/**\n\t\t * attributes returned by inspectCartContents()\n\t\t * @memberof Netx.Collections.CartAssets\n\t\t * @type {object}\n\t\t */\n\t\tthis.inspection = _.extend({}, opts.inspection);\n\n\t\t/**\n\t\t * Route of last cart dislplayed\n\t\t * @type {string}\n\t\t */\n\t\tthis.lastCartRoute = opts.lastCartRoute;\n\n\t\t/**\n\t\t * number of items in the cart, as reported by DAM\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.total = opts.total || 0;\n\n\t\t/**\n\t\t * @memberof Netx.Collections.CartAssets\n\t\t * @property {object} unarchiveArgs - Arguments to the unarchive cart assets method\n\t\t * @property {number} unarchiveArgs.unarchiveType - Type of unarchive ( 1 = temporary, 2 = permanently )\n\t\t * @property {string} unarchiveArgs.email - Email address to notify on unarchive complete\n\t\t * @default\n\t\t */\n\t\tthis.unarchiveArgs = _.extend(\n\t\t\t{\n\t\t\t\ttype: 1,\n\t\t\t\temail: '',\n\t\t\t},\n\t\t\topts.unarchiveArgs,\n\t\t);\n\n\t\t// Set selection to cart/cartId\n\t\tthis.selection.at(0).set({\n\t\t\telementType: 10, // cart search\n\t\t\telementValue1: this.id, // cart id (0 for current)\n\t\t});\n\t\t// Set max items (this already happens in Netx.Collections.Assets - necessary to do here again?)\n\t\tthis.selection.maxItems = customConfig.CHUNK_SIZE + 1;\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(this, 'add', this.addAsset)\n\t\t\t// Don't consider a cart sync to be a user selection - I do not see cacheSelection in any code - remove soon? 2015-09-25\n\t\t\t// nk - also this was stopping the super collection sync listener which calls calculatePaging\n\t\t\t// this.stopListening( this, 'sync', this.cacheSelection );\n\t\t\t// always count the cart after a sync\n\t\t\t.listenTo(this, 'sync', this.assetCount)\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'cart:saved:collect:success cart:saved:add:assets:success',\n\t\t\t\t(savedCarts) => {\n\t\t\t\t\tsavedCarts.get(this.id) && this.fetch();\n\t\t\t\t},\n\t\t\t)\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t[\n\t\t\t\t\t'cart:saved:assets:unexpire:succeeded',\n\t\t\t\t\t'cart:saved:assets:expire:succeeded',\n\t\t\t\t].join(' '),\n\t\t\t\t(savedCart) => {\n\t\t\t\t\tthis.id === this.model.id && this.fetch();\n\t\t\t\t},\n\t\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} locationId Archive location id\n\t * @param {object} opts Request options\n\t */\n\tarchive(locationId, opts) {\n\t\tlocationId = parseInt(locationId);\n\n\t\tif (isNaN(locationId) || !Netx.app.storageLocations.get(locationId)) {\n\t\t\treturn new $.Deferred().reject(\n\t\t\t\tnew Error(i18n.t('i18n.invalidArchiveLocation')),\n\t\t\t);\n\t\t}\n\n\t\tthis.archiveArgs.locationId = locationId;\n\t\treturn this.archiveCartAssets(opts);\n\t}\n\n\t/**\n\t * Generic handler for cart methods' success\n\t * @method\n\t * @param {number} count Cart asset count\n\t * @todo Check parameter documentation\n\t */\n\tcartResultParser(count) {\n\t\t// update our asset count\n\t\tthis.setAssetCount(count);\n\t\t// re-get our list of cart assets from the DAM, now that the search results have been added there.\n\t\treturn this.fetch();\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} dateStr Date (yyyy-mm-dd)\n\t */\n\tasync expireAssets(dateStr) {\n\t\ttry {\n\t\t\tconst expirationTime = userInputToExpirationTime(dateStr);\n\t\t\tthis.expirationArgs.date = expirationTime;\n\t\t\tconst uuid = await this.expireCartAssets();\n\t\t\treturn [uuid, expirationTime];\n\t\t} catch (ex) {\n\t\t\treturn new $.Deferred().reject(ex);\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} page\n\t * set page and context for selection, then fetch\n\t */\n\tfetchCurrentCart(page, opts) {\n\t\tthis.curPage = page ? page : 1;\n\t\tthis.routeContext = 'cart';\n\t\treturn this.fetch(opts);\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} id\n\t * @param {number} page\n\t * set page and context for savedCart, then fetch\n\t */\n\tfetchSavedCart(id, page, opts) {\n\t\treturn allSavedCarts.getCart(id).then((savedCart) => {\n\t\t\tthis.savedCart = savedCart;\n\t\t\tthis.setCartId(id, page);\n\t\t\treturn this.fetch(opts);\n\t\t});\n\t}\n\n\t/**\n\t * Try to find the saved cart model for our ID\n\t * @method\n\t * @todo this will need to be addressed when we get into paging\n\t */\n\tfindCartModel() {\n\t\treturn allSavedCarts.get(this.id);\n\t}\n\n\t/**\n\t * @method\n\t * @return {boolen}\n\t */\n\tisSortable() {\n\t\t// Cannot sort on cart or custom search types currently\n\t\tconst customSearchType = this.selection.findWhere({elementType: 9});\n\t\treturn _.isUndefined(customSearchType);\n\t}\n\n\t/**\n\t * We are only allow one poll at a time per instance\n\t * @method\n\t * @param {array} assetsList An array of asset ids\n\t */\n\tpollRemoveAssets(assetsList) {\n\t\tconst d = new $.Deferred();\n\n\t\tconst checkPolling = () => {\n\t\t\t// Already polling\n\t\t\tif (this._polling) {\n\t\t\t\t// Wait for poll to complete and try again\n\t\t\t\tthis._polling.promise().then(() => {\n\t\t\t\t\t// Otherwise a loop will ensue\n\t\t\t\t\t// this._polling will still be defined and so the method will just return the polling promise\n\t\t\t\t\t// which immediately is resolved - which would trigger this again - repeat... forever.\n\t\t\t\t\t_.defer(() => {\n\t\t\t\t\t\tcheckPolling();\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Ready to poll\n\t\t\telse {\n\t\t\t\tlet assetIds = [];\n\t\t\t\tthis.pollUntil(\n\t\t\t\t\t(assets) => {\n\t\t\t\t\t\tif (!_.isUndefined(assets)) {\n\t\t\t\t\t\t\tassetIds = _.pluck(assets, 'assetId');\n\t\t\t\t\t\t\treturn !_.intersection(assetIds, assetsList).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t},\n\t\t\t\t\t'cart:saved:removing:assets',\n\t\t\t\t\tthis.fetchAll,\n\t\t\t\t\t500,\n\t\t\t\t\t{silent: true},\n\t\t\t\t).then(() => {\n\t\t\t\t\treturn d.resolve(assetIds);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\tcheckPolling();\n\n\t\treturn d.promise();\n\t}\n\n\t/**\n\t * @method\n\t * @param {array} assets Array of asset models\n\t * @fires modules:cart#cart:saved:removing:assets\n\t * @fires modules:cart#cart:removed\n\t */\n\t// TODO: document or fix: why do we poll after removeAssetsFromCart, but not after addAssetsToCart ?\n\t// TODO: refactor/unwrap removeAssets, matching how we did it for addAssets.\n\tremoveAssets(assets, opts = {}) {\n\t\tconst assetsList = _.tidyAssetList(assets);\n\t\tconst count = this.assetCount();\n\n\t\treturn this.removeAssetsFromCart(assetsList, opts).then(() => {\n\t\t\t// Let the world know\n\t\t\tdispatcher.trigger('cart:saved:removing:assets', assetsList, this.id);\n\t\t\treturn this.pollRemoveAssets(assetsList).then((assetIds) => {\n\t\t\t\t// Remove from collection\n\t\t\t\tthis.remove(assetsList);\n\t\t\t\tdispatcher.trigger('cart:removed', assetsList, this.id);\n\n\t\t\t\tthis.trigger('sync', this, [], opts).setAssetCount(assetIds.length);\n\n\t\t\t\treturn assetsList;\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} count Count\n\t */\n\tsetAssetCount(count) {\n\t\t// triggers 'counted'\n\t\tthis.pager.set({itemTotal: parseInt(count)});\n\t\t// We kind of painted ourselves into a corner here\n\t\t// our actions react to sync events to test enablers\n\t\t// we want the cart to reflect the selection immediately\n\t\t// upon add/remove from cart - so, a fake sync here.\n\t\tthis.trigger('sync', this, [], {});\n\n\t\treturn this.pager;\n\t}\n\n\t/**\n\t * @method\n\t * @param {array} assets Array of assets\n\t * @fires module:cart#cart:wasSet\n\t */\n\tsetAssets(assets) {\n\t\tconst assetsList = _.tidyAssetList(assets);\n\t\treturn this.setAssetsInCart(assetsList).then(() => {\n\t\t\tdispatcher.trigger('cart:wasSet', assetsList);\n\t\t\tthis.trigger('wasSet', assetsList);\n\t\t});\n\t}\n\n\t/**\n\t * Set the cart id and page\n\t * @param {number} id SavedCart id\n\t * @param {number} page\n\t */\n\tsetCartId(id, page) {\n\t\tconst selection = this.selection;\n\t\tthis.curPage = page;\n\t\tthis.routeContext = 'cart-assets/' + id;\n\t\tid = parseInt(id);\n\t\t// triggers 'countUnknown'\n\t\tselection.at(0).set({elementValue1: id});\n\n\t\t// reset facets\n\t\tif (selection.searchFacets && id != this.id) {\n\t\t\tselection.searchFacets.reset();\n\t\t}\n\n\t\tthis.id = id;\n\t\tthis.batch = id === 0 ? [] : [id];\n\t}\n\n\t/**\n\t * return an assetSet model defining the set of this cart's assets\n\t * @method\n\t * @return {module:asset/models/assetSet} AssetSet model\n\t */\n\ttoAssetSet() {\n\t\t// TODO: this will need to be addressed when we get into paging\n\t\tconst model = this.findCartModel();\n\t\treturn new AssetSetModel({\n\t\t\ttype: assetSetTypes.savedCart,\n\t\t\tids: [this.id],\n\t\t\tmodels: model ? [model] : undefined,\n\t\t\tlabel: model ? model.get('title') : i18n.t('i18n.cartAssets'),\n\t\t});\n\t}\n\n\t/**\n\t * Unarchive all assets\n\t * @method\n\t * @param {number} type Unarchive type\n\t * @param {string} email Email to notify on completion\n\t */\n\tunarchive(type, email) {\n\t\ttype = parseInt(type);\n\n\t\tif (isNaN(type) || unarchiveTypes[type] == null) {\n\t\t\treturn new $.Deferred().reject(\n\t\t\t\tnew Error(i18n.t('i18n.invalidUnarchiveType')),\n\t\t\t);\n\t\t}\n\n\t\t_.extend(this.unarchiveArgs, {\n\t\t\temail: email,\n\t\t\ttype: type,\n\t\t});\n\t\treturn this.unarchiveCartAssets();\n\t}\n\n\t/**\n\t * Unset all asset expiration\n\t * @method\n\t */\n\tasync unexpireAssets() {\n\t\tthis.expirationArgs.date = 0;\n\t\tconst uuid = await this.expireCartAssets();\n\t\treturn [uuid, 0];\n\t}\n\n\t/**\n\t * Instantiate a cartAssets collection with a page of cart assets from a specified cart:\n\t * @method\n\t * @param {number} id Cart id\n\t */\n\tstatic Load(id) {\n\t\tconst instance = new this([], {id: id});\n\t\treturn instance.fetch().then(() => {\n\t\t\treturn this;\n\t\t});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'CartAssets';\n\t}\n}\n","/**\n * @class\n */\nimport Base from 'netxcore@netx/core-cart/collections/cartAssets';\n\nexport default class CartAssets extends Base {\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\tsuper(models, opts);\n\n\t\tthis.pager.set({routesToPage: true});\n\t}\n}\n","export default {\n\t/**\n\t * CSS id for cart container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tSAVED_CARTS_ID: 'cart-saved',\n\t/**\n\t * CSS id for cart list element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tCART_GALLERY_ID: 'cart-assets',\n\t/**\n\t * CSS id for cart actions bar element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tCART_ACTIONS_BAR: 'cart-actions-bar',\n\t/**\n\t * CSS id for cart list header element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tCART_HEADER_ID: 'cart-header',\n\t/**\n\t * CSS id for saved cart header container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tSAVED_CART_HEADER_ID: 'saved-cart-header',\n\t/**\n\t * CSS id for saved cart assets container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tSAVED_CART_GALLERY_ID: 'saved-cart-assets',\n\n\t/**\n\t * CSS id for cart container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tCHUNK_SIZE: 12,\n\t/**\n\t * CSS id for cart container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tPAGE_SIZE: 12,\n\t/**\n\t * When sharing cart permissions, allow ownership changes?\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tSHARE_SHOW_OWNER: true,\n\t/**\n\t * When sharing cart permissions, sync immediately on every change?\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tSHARE_SYNC_IMMEDIATE: false,\n\t/**\n\t * Route component for showing the contents a saved cart\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tROUTE_SAVED_CART: 'cart-assets',\n};\n","import config from 'netxcore@netx/core-cart/config';\n\nObject.assign(config, {\n\tSHARE_SYNC_IMMEDIATE: true,\n});\n\nexport default config;\n","/**\n * @class\n */\nimport Base from '@netx/core-share/views/sharedResourceView';\nimport Template from '../templates/savedCartView.html';\n\nexport default class SavedCartView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\t// no href on div\n\t\tdelete opts.attributes.href;\n\n\t\topts.className = `cart ${opts.className || ''}`;\n\t\topts.id = opts.id || `cart-${opts.model.id}`;\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\t// Hey, listen\n\t\tthis.listenTo(dispatcher, 'routed', (route) => {\n\t\t\tconst myRoute = `cart-assets/${this.model.id}`;\n\t\t\tthis.$el.toggleClass(\n\t\t\t\t'active',\n\t\t\t\troute.includes(`${myRoute}/`) || route === myRoute,\n\t\t\t);\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\t\t// See if we have assets\n\t\tthis.$el.toggleClass('has-assets', this.model.get('contentCount') > 0);\n\n\t\tconst myRoute = `cart-assets/${this.model.id}`;\n\t\tconst route = window.location.hash.replace('#', '');\n\n\t\tthis.$el.toggleClass(\n\t\t\t'active',\n\t\t\troute.includes(`cart-assets/${this.model.id}/`) || route === myRoute,\n\t\t);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'SavedCartView';\n\t}\n}\n","/**\n * @class\n */\nimport Base from 'netxcore@netx/core-cart/views/savedCartView';\nimport {FindLegacyAction} from '@netx/core/legacyActionManager';\nimport {\n\tfaArrowCircleDown,\n\tfaExternalLinkAlt,\n\tfaInbox,\n\tfaShare,\n\tfaTrashAlt,\n} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaArrowCircleDown,\n\tfaExternalLinkAlt,\n\tfaInbox,\n\tfaShare,\n\tfaTrashAlt,\n});\n\nexport default class SavedCartView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.icons = {...icons, ...opts.icons};\n\t\topts.events = {\n\t\t\t'keydown .action': 'onKeyDown',\n\t\t\t...opts.events,\n\t\t};\n\t\tsuper(opts);\n\t}\n\t/** @override */\n\tbindEvents() {\n\t\tsuper.bindEvents();\n\n\t\tif (!this.hammer) {\n\t\t\tthis.hammer = new Hammer(this.el);\n\t\t}\n\n\t\tthis.hammer.on('pan', this.hammerPan.bind(this));\n\n\t\treturn this;\n\t}\n\n\t/** @override */\n\tbindModelEvents() {\n\t\tsuper.bindModelEvents();\n\t\treturn this.listenTo(this.model, 'change:title', this.render);\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\n\t\t// Additonal tempalte vars\n\t\tObject.assign(this.templateVars, {\n\t\t\tid: this.model.id,\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `keydown` event\n\t * It's not pretty, but\n\t * finds the next/prev action in this view\n\t * and focuses on it\n\t *\n\t * todo: refactor with react\n\t */\n\tonKeyDown(e) {\n\t\tconst code = e.keyCode;\n\t\tconst right = code === 39;\n\t\tconst left = code === 37;\n\t\tconst enter = code === 32 || e.code === 13; // space or enter\n\t\t// onkeydown left and right\n\t\t// try and find something\n\t\t// to focus on next\n\n\t\tif (e.keyCode === 39 || e.keyCode === 37) {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tlet $currentTarget = $(e.currentTarget);\n\t\tconst actionStr = $currentTarget.attr('data-action');\n\t\tconst action = FindLegacyAction(actionStr) || false;\n\t\tlet $nextTarget;\n\t\tconst viewAction = e.currentTarget.classList.contains('collection');\n\t\tif (right) {\n\t\t\t// arrow to next\n\t\t\tif (viewAction) {\n\t\t\t\t$nextTarget = $currentTarget\n\t\t\t\t\t.nextAll('.actions')\n\t\t\t\t\t.find('.action-items .action:visible:first-child');\n\t\t\t} else {\n\t\t\t\t$nextTarget = $currentTarget.nextAll('.action:visible').first();\n\t\t\t}\n\t\t} else if (left) {\n\t\t\t// arrow to previous\n\t\t\tif (viewAction) {\n\t\t\t\t$nextTarget = $currentTarget\n\t\t\t\t\t.nextAll('.actions')\n\t\t\t\t\t.find('.action-items .action:visible:last-child');\n\t\t\t} else {\n\t\t\t\tif ($currentTarget)\n\t\t\t\t\t$nextTarget = $currentTarget.prevAll('.action:visible').first();\n\t\t\t}\n\t\t} else if (enter) {\n\t\t\tif (action) {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\n\t\t\t\tthis.performAction(action, [this, e]);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (right || left) {\n\t\t\tif (!$nextTarget || !$nextTarget.length) {\n\t\t\t\t// fallback on main action\n\t\t\t\t$nextTarget = $currentTarget.parents('.cart').find('.action').first();\n\t\t\t}\n\n\t\t\t// if we found a target focus on it\n\t\t\tif ($nextTarget && $nextTarget.length) {\n\t\t\t\tthis.$('.action:not(.collection)').attr('tabindex', -1);\n\t\t\t\t$nextTarget.attr('tabindex', 0);\n\t\t\t\t$nextTarget.focus();\n\t\t\t}\n\t\t\t// otherwise do nothing\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `pan` event\n\t */\n\thammerPan(e) {\n\t\tconst additionalEvent = e.additionalEvent;\n\n\t\tif (additionalEvent) {\n\t\t\tif (\n\t\t\t\tMath.abs(e.deltaX) <= 50 ||\n\t\t\t\t(additionalEvent !== 'panright' && additionalEvent !== 'panleft')\n\t\t\t)\n\t\t\t\treturn;\n\n\t\t\tif (additionalEvent == 'panright') {\n\t\t\t\tthis.undelegateEvents();\n\t\t\t\tthis.$el.removeClass('with-actions');\n\t\t\t\t_.delay(() => {\n\t\t\t\t\tthis.delegateEvents();\n\t\t\t\t}, 500);\n\t\t\t} else if (additionalEvent == 'panleft') {\n\t\t\t\tif (!this.$el.hasClass('with-options')) {\n\t\t\t\t\tthis.undelegateEvents();\n\t\t\t\t\t$(e.target.parentNode)\n\t\t\t\t\t\t.find('.with-actions')\n\t\t\t\t\t\t.removeClass('with-actions');\n\t\t\t\t\tthis.$el.addClass('with-actions');\n\t\t\t\t\t_.delay(() => {\n\t\t\t\t\t\tthis.delegateEvents();\n\t\t\t\t\t}, 500);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * This is a collection of category objects representing the child categories of the current category.\n *\n * It must be instantiated with options.currentCat pointing to a Netx.Models.Category representing the current category.\n *\n * If options.cache is provided, it is assumed to be a Netx.Collections.CategoryTreeNodes collection,\n * and we fetch our categories through that object, using it as a read-thru cache.\n *\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/category';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\n\nexport default class Categories extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetCategories: 'Loading categories',\n\t\t\tgetCategoryObjects: 'Loading categories',\n\t\t\tgetDashboardRecentCategories: 'Loading dashboard categories',\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetCategories: 'Loading categories',\n\t\t\tgetCategoryObjects: 'Loaded categories',\n\t\t\tgetDashboardRecentCategories: 'Loaded dashboard categories',\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} methods - Collection RPC methods\n\t * @property {method} methods.read - Fetch categories\n\t * @property {method} methods.getCategoryObjects - Fetch categories for shallow models\n\t * @property {method} methods._getCategoriesById - Fetch categories by id\n\t * @property {method} methods._getDashboardRecentCategories - Fetch recent categories for dashboard\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\tif (this.currentCat) {\n\t\t\t\t\tthis.parentid = parseInt(this.currentCat.get('categoryid'));\n\t\t\t\t}\n\n\t\t\t\tif (!this.parentid) {\n\t\t\t\t\tthis.parentid = 1;\n\t\t\t\t}\n\n\t\t\t\t// get the categories from the DAM\n\t\t\t\tif (!this.cache) {\n\t\t\t\t\treturn ['getCategories', this.searchString, this.parentid];\n\t\t\t\t}\n\n\t\t\t\t// Get the categories from our cache\n\t\t\t\t// Really this cache mechanism should be deprecated; I thought I did that, but no:\n\t\t\t\t// Netx.category.list still caches off of Netx.category.tree . So this is a stopgap 'till we fix all that.\n\t\t\t\treturn this.cache.fetchChildren(this.parentid).then((response) => {\n\t\t\t\t\treturn this.cache.where({\n\t\t\t\t\t\tparentid: this.parentid,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\t/**\n\t\t\t * Just like users/groups\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetCategoryObjects(opts) {\n\t\t\t\treturn ['getCategoryObjects', this.pluck('categoryid')];\n\t\t\t},\n\t\t\t/** @method */\n\t\t\t_getCategoriesById: ['getCategoryObjects', 'ids'],\n\t\t\t/** @method */\n\t\t\t_getDashboardRecentCategories: ['getDashboardRecentCategories'],\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - Collection RPC methods\n\t * @property {function} parsers.getCategoryObjects - Parse fetch of categories for shallow models\n\t * @property {function} parsers._getCategoriesById - Parse fetch of categories by id\n\t * @property {function} parsers._getDashboardRecentCategories - Parse fetch of recent categories for dashboard\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} categories Categories\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetCategoryObjects(categories, opts) {\n\t\t\t\tthis.set(categories, opts);\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} categories Categories\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\t_getCategoriesById(categories, opts) {\n\t\t\t\tif (opts.asset) {\n\t\t\t\t\tcategories = _.map(categories, (category) =>\n\t\t\t\t\t\t_.extend(category, {asset: opts.asset}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthis.set(categories, opts);\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} recentCategories Recent categories\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\t_getDashboardRecentCategories(recentCategories, opts) {\n\t\t\t\tthis.set(recentCategories, opts);\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * A cache of categories we can fetch through, such as the category tree\n\t\t * @type {Netx.Collections.Categories}\n\t\t * @default\n\t\t */\n\t\tthis.cache = opts.cache;\n\n\t\t/**\n\t\t * The parent category we should consider when fetching children\n\t\t * @type {Netx.Models.Category}\n\t\t * @default\n\t\t */\n\t\tthis.currentCat = opts.currentCat;\n\n\t\t/**\n\t\t * Used by `getCategoriesById`\n\t\t * @type {array}\n\t\t * @default\n\t\t * @todo This is is overriding our Netx.Collection.prototype.ids() - need to find all the places settign this and change to something else\n\t\t */\n\t\tthis.ids = opts.ids || [];\n\n\t\t/**\n\t\t * @type {object}\n\t\t * @default\n\t\t * @todo are these used?\n\t\t */\n\t\tthis.nodes = _.extend(\n\t\t\t{\n\t\t\t\tactive: undefined,\n\t\t\t\tactiveParent: undefined,\n\t\t\t\tprevious: undefined,\n\t\t\t},\n\t\t\topts.nodes,\n\t\t);\n\n\t\t/**\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.parentid = opts.parentId;\n\n\t\t/**\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tthis.searchString = opts.searchString || '';\n\n\t\t// We are the current category's children\n\t\tif (this.currentCat) {\n\t\t\t// React to category changes.\n\t\t\tthis.listenTo(\n\t\t\t\tthis.currentCat,\n\t\t\t\t'change:categoryid',\n\t\t\t\t(currentCat, newCatId, opts) => {\n\t\t\t\t\tthis.fetch(opts);\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Fetch the children of any given category\n\t * @method\n\t * @param {number} parentId Parent category id\n\t * @param {object} opts Request options\n\t */\n\tfetchChildren(parentId, opts) {\n\t\tthis.parentid = parentId;\n\t\treturn this.fetch(opts);\n\t}\n\n\t/**\n\t * @method\n\t * @param {array} ids An array of ids\n\t * @param {object} opts Request options\n\t */\n\tgetCategoriesById(ids, opts = {}) {\n\t\tthis.ids = _.isArray(ids) ? ids : [parseInt(ids)];\n\n\t\t!opts.silent &&\n\t\t\tthis.listenToOnce(\n\t\t\t\tthis,\n\t\t\t\t'request:_getCategoriesById',\n\t\t\t\t(collection, xhr, opts) => {\n\t\t\t\t\tthis.trigger('request:read', this, xhr, opts);\n\t\t\t\t},\n\t\t\t);\n\n\t\treturn this._getCategoriesById(opts).then((response) => {\n\t\t\tthis.ids = [];\n\t\t\t!opts.silent && this.trigger('sync', this, response, opts);\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tgetDashboardRecentCategories(opts = {}) {\n\t\tif (!opts.silent) {\n\t\t\tthis.listenToOnce(\n\t\t\t\tthis,\n\t\t\t\t'request:_getDashboardRecentCategories',\n\t\t\t\t(collection, xhr, opts) => {\n\t\t\t\t\tthis.trigger('request:read', this, xhr, opts);\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\treturn this._getDashboardRecentCategories(opts).then((response) => {\n\t\t\t!opts.silent && this.trigger('sync', this, response, opts);\n\t\t});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Categories';\n\t}\n}\n","import Base from 'netxcore@netx/core-category/collections/categories';\n\n/** @override */\nexport default class Categories extends Base {\n\t/**\n\t * @property {object} methods - Collection RPC methods\n\t * @property {method} methods.read - Fetch categories\n\t * @property {method} methods._getCategoriesByName - Fetch categories by name\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t...super.methods,\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\tif (this.currentCat) {\n\t\t\t\t\tthis.parentid = parseInt(this.currentCat.get('categoryid'));\n\t\t\t\t}\n\n\t\t\t\tif (!this.parentid) {\n\t\t\t\t\tthis.parentid = 1;\n\t\t\t\t}\n\n\t\t\t\t// get the categories from the DAM\n\t\t\t\tif (!this.cache) {\n\t\t\t\t\treturn ['getCategories', this.searchString, this.parentid];\n\t\t\t\t}\n\n\t\t\t\t// Get the categories from our cache\n\t\t\t\t// Really this cache mechanism should be deprecated; I thought I did that, but no:\n\t\t\t\t// Netx.category.list still caches off of Netx.category.tree . So this is a stopgap 'till we fix all that.\n\t\t\t\treturn this.cache.fetchChildren(this.parentid).then((response) => {\n\t\t\t\t\treturn this.cache.where({\n\t\t\t\t\t\tparentid: this.parentid,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t\t/** @method */\n\t\t\t/** @TODO Move to core */\n\t\t\t_getCategoriesByName: ['getCategoryAutoList', 'searchString', 1],\n\t\t};\n\t}\n}\n","export default {\n\t/**\n\t * CSS class used for active category\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tACTIVE_CLASS: 'active',\n\t/**\n\t * Is the CategoryAssets class extended from the MiniAssets class (instead of the Assets class)?\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\tASSETS_MINI: false,\n\t/**\n\t * CSS class used for open tree nodes\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tTREE_NODE_OPEN_CLASS: 'open',\n\t/**\n\t * CSS class used for closed tree nodes\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tTREE_NODE_CLOSED_CLASS: 'closed',\n\t/**\n\t * CSS id used for the container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tTREE_ID: 'category-tree',\n\t/**\n\t * CSS id used for the category layer header\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tCATEGORY_HEADER_ID: 'category-header',\n\t/**\n\t * CSS id used for the category list container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tCATEGORY_LIST_ID: 'category-list',\n\t/**\n\t * CSS id used for the category asset list container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tASSET_LIST_ID: 'category-assets',\n\t/**\n\t * Should the asset list employ faceted search?\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tASSET_LIST_FACETED: false,\n\t/**\n\t * CSS id used for the breadcrumb container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tBREADCRUMB_ID: 'breadcrumb',\n\t/**\n\t * CSS id used for the category detail container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tCATEGORY_DETAIL_ID: 'category',\n\t/**\n\t * CSS id of the category container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tCONTAINER_ID: 'categories',\n\t/**\n\t * CSS id for the category edit container element\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tCATEGORY_EDIT_ID: 'category-edit',\n\t/**\n\t * Should we allow drag actions on categories?\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\tDRAGGABLE: true,\n\t/**\n\t * Category edit view display type\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\tMODAL: true,\n\t/**\n\t * Default category id\n\t * @const\n\t * @type {number}\n\t * @default\n\t */\n\tcategoryid: 1,\n\t/**\n\t * Allows categories to be only displayed in the tree or both the tree and gallery\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\tdisplayCategoriesAsAssets: true,\n\t/**\n\t * Default repository directory path\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\trepositorydirectory: '/',\n\t/**\n\t * Turns the category tree on or off\n\t * @const\n\t * @type {boolean}\n\t * @default\n\t */\n\ttree: true,\n\t/**\n\t * Sets the maximum depth to display in the category tree\n\t * @const\n\t * @type {string}\n\t * @default\n\t */\n\tTREE_MAX_DEPTH: null, // How many layers deep should we display?\n};\n","import config from 'netxcore@netx/core-category/config';\n\nObject.assign(config, {\n\tMODAL: false,\n\ttree: true,\n\tdisplayCategoriesAsAssets: true,\n\n\tcategoryid: 1,\n\n\tTREE_MAX_DEPTH: 90,\n});\n\nexport default config;\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/categoryListItemView.html';\n\nexport default class CategoryListItemView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.className = opts.className || 'category closed drop';\n\t\topts.events = {\n\t\t\tdragstart: 'dragStart',\n\t\t\t...opts.events,\n\t\t};\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\t}\n\n\t/** @override */\n\tbindModelEvents() {\n\t\tsuper.bindModelEvents();\n\t\treturn this.listenTo(\n\t\t\tthis.model,\n\t\t\t'change',\n\t\t\t_.debounce(this.render, 50),\n\t\t).listenTo(this.model, 'destroy remove', this.remove);\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\n\t\tconst model = this.model;\n\t\tthis.$el\n\t\t\t// not used?\n\t\t\t.attr('id', `category-${model.id}`)\n\t\t\t// used by drag & drop\n\t\t\t.attr('data-category-id', model.id)\n\t\t\t.addClass(model.get('children').length > 0 ? 'parent' : '');\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e dragstart event\n\t */\n\tdragStart(e) {\n\t\te.stopPropagation();\n\t\te.stopImmediatePropagation();\n\n\t\tconst ui = e.originalEvent && e.originalEvent.ui;\n\t\tif (!ui || !ui.$element) return;\n\n\t\t// Store the category model on the dragging element\n\t\tui.$element\n\t\t\t.filter(this.el)\n\t\t\t.data(\n\t\t\t\t'Category',\n\t\t\t\tJSON.stringify(\n\t\t\t\t\t_.omit(this.model.attributes, 'childCategories', 'tree'),\n\t\t\t\t),\n\t\t\t);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'CategoryListItemView';\n\t}\n}\n","import Base from 'netxcore@netx/core-category/views/categoryListItemView';\n\nimport cmsConfig from '@netx/core-cms/config';\n\nimport {faFolder} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaFolder,\n});\n\n/** @override */\nexport default class CategoryListItemView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.icons = {...icons, ...opts.icons};\n\t\tsuper(opts);\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\n\t\tconst assetId = this.model.get('assetId');\n\t\tlet catDesc = this.model.get('description');\n\n\t\tif (catDesc) {\n\t\t\tif (!cmsConfig.displayCatDescriptions) {\n\t\t\t\tcatDesc = '';\n\t\t\t} else {\n\t\t\t\t// the dam stores this description with /n for newlines\n\t\t\t\t// which text areas just spit out /n\n\t\t\t\tcatDesc = catDesc.replace(/\\\\n/g, ' ');\n\t\t\t}\n\t\t}\n\n\t\t// Additional template vars\n\t\tObject.assign(this.templateVars, {\n\t\t\timageUrl: assetId > 0 ? '/file/asset/' + assetId + '/preview' : undefined,\n\t\t\t// THEM-602: suppress category descriptions\n\t\t\tdescription: catDesc,\n\t\t});\n\t}\n}\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/categoryListView.html';\n\nimport ChildView from './categoryListItemView';\nimport ChildViews from '@netx/core/functionality/childViews';\nimport {\n\tcurrentUserMeetsUserLevel,\n\tUserLevel,\n} from '@netx/core-user-next/utils/currentUserMeetsUserLevel';\n\nexport default class CategoryListView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.childView = _.extend(\n\t\t\t{\n\t\t\t\tviewClass: ChildView,\n\t\t\t\ttarget: '.nx-childviews',\n\t\t\t\thref(m) {\n\t\t\t\t\treturn `#category/${m.get('categoryid')}`;\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttagName: 'a',\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\t'data-contextmenu-target': 'categoryContextMenu',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\topts.childView,\n\t\t);\n\t\topts.className = opts.className || 'sub-category category-list UITableView';\n\t\topts.loadingClassObjects = opts.loadingClassObjects || ['collection'];\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\tif (currentUserMeetsUserLevel(UserLevel.MANAGER)) {\n\t\t\tthis.childView.drggable = true;\n\t\t}\n\t}\n\n\t/** @override */\n\tbindCollectionEvents() {\n\t\tsuper.bindCollectionEvents();\n\n\t\tconst collection = this.listenToCollection || this.collection;\n\t\treturn this.listenTo(collection, 'sort', this.render);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'CategoryListView';\n\t}\n}\n\n// Functionality\nChildViews(CategoryListView);\n","/**\n * @class\n */\nimport Base from 'netxcore@netx/core-category/views/categoryListView';\n\nimport ChildView from './categoryListItemView';\nimport cmsConfig from '@netx/core-cms/config';\n\nexport default class CategoryListView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.childView = {\n\t\t\tviewClass: ChildView,\n\t\t\ttarget: '.categories',\n\t\t\thref(m) {\n\t\t\t\treturn `#category/${m.id}`;\n\t\t\t},\n\t\t\toptions: {\n\t\t\t\ttagName: 'a',\n\t\t\t\tattributes: {\n\t\t\t\t\t'data-contextmenu-target': 'categoryContextMenu',\n\t\t\t\t\t'data-nx-template': 'menuView-context',\n\t\t\t\t},\n\t\t\t},\n\t\t\t...opts.childView,\n\t\t};\n\t\topts.className = opts.className || 'sub-category category-list';\n\t\tsuper(opts);\n\n\t\tthis.dragOptions = {};\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\t\tif (cmsConfig.displayCatDescriptions) {\n\t\t\tthis.$el.addClass('with-description');\n\t\t}\n\t}\n}\n","/**\n * @classdesc\n * Collection contains a saved search's [mini/full] asset models\n *\n * @property {reference} searchTypes - Available search types\n * @property {number} searchTypes.SEARCH_TYPE_KEYWORDS - 1\n * @property {number} searchTypes.SEARCH_TYPE_CONTENTS - 2\n * @property {number} searchTypes.SEARCH_TYPE_METADATA - 3\n * @property {number} searchTypes.SEARCH_TYPE_DATE - 4\n * @property {number} searchTypes.SEARCH_TYPE_CATEGORY - 5 (Path string)\n * @property {number} searchTypes.SEARCH_TYPE_FILE_FORMAT - 6\n * @property {number} searchTypes.SEARCH_TYPE_FILE_SIZE - 7\n * @property {number} searchTypes.SEARCH_TYPE_RAW - 8\n * @property {number} searchTypes.SEARCH_TYPE_CUSTOM - 9\n * @property {number} searchTypes.SEARCH_TYPE_CART - 10\n * @property {number} searchTypes.SEARCH_TYPE_RELATED_ASSETS - 11\n * @property {number} searchTypes.SEARCH_TYPE_LAST_SEARCH - 12\n * @property {number} searchTypes.SEARCH_TYPE_CHECKOUT - 13 ( Value1 = userId; zero = all )\n * @property {number} searchTypes.SEARCH_TYPE_THESAURUS - 14\n * @property {number} searchTypes.SEARCH_TYPE_BRANCH_CHILDREN - 15\n * @property {number} searchTypes.SEARCH_TYPE_REVIEWS - 16 (Contextual to user)\n * @property {number} searchTypes.SEARCH_TYPE_EXPIRE - 17 (All)\n * @property {number} searchTypes.SEARCH_TYPE_METADATA_HISTORY - 18\n * @property {number} searchTypes.SEARCH_TYPE_RATING - 19\n * @property {number} searchTypes.SEARCH_TYPE_LOCATION - 20 (Storage location)\n * @property {number} searchTypes.SEARCH_TYPE_PROOF - 21 (For showing proofs)\n * @property {number} searchTypes.SEARCH_TYPE_FILE_ASPECT - 22\n * @property {number} searchTypes.SEARCH_TYPE_CATEGORY_ID - 23 (value1 must be an integer of the Category ID)\n * @property {number} searchTypes.SEARCH_TYPE_SAVED_SEARCH - 24 (value1 must be an integer of the Saved Search ID)\n * @property {number} searchTypes.SEARCH_TYPE_FILE_STATUS - 25 (value1 must be an integer of the status type)\n * @property {number} searchTypes.SEARCH_TYPE_FILE_FORMAT_FAMILY - 26 (value1 must be one of the known families (from New York or Jersey); see FormatFamilyManager)\n * @property {number} searchTypes.SEARCH_TYPE_VISUAL - 27\n * @property {number} searchTypes.SEARCH_TYPE_ACTIVE_TEMPLATES - 28\n *\n * @class\n */\nimport Base from '@netx/core-asset/collections/assets';\n// import Netx from '@netx/core/bootstrap';\nimport {dispatcher} from '@netx/core-next/instance/dispatcher';\n\nimport AssetSetModel from '@netx/core-asset/models/assetSet';\nimport SavedSearchModel from '../models/savedSearch';\n\nimport {types as assetSetTypes} from '@netx/core-asset/properties/assetSets';\nimport {allSavedSearches} from '@netx/core-search/collections/singleton/savedSearch';\nimport {escapeURI} from '@netx/core/utils/escapeURI';\nimport {\n\tsimpleAssetIdSearchEnabled,\n\tkeywordIncludeContentsEnabled,\n} from '@netx/core-search-next/enablers';\n\nexport default class SearchAssets extends Base {\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @type {object}\n\t */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tfacetedSearch: 'Searching assets',\n\t\t\tsearchAssetBeanObjects: 'Searching assets',\n\t\t};\n\t}\n\n\t/**\n\t * @type {object}\n\t */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tfacetedSearch: 'Search completed',\n\t\t\tsearchAssetBeanObjects: 'Search completed',\n\t\t};\n\t}\n\n\t/**\n\t * @type {object}\n\t */\n\tget isVisual() {\n\t\treturn this.selection.findWhere({elementType: 27}) !== undefined;\n\t}\n\n\t/**\n\t * @override\n\t * @fires module:search#search:complete\n\t */\n\tconstructor(models, opts = {}) {\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * Saved search id\n\t\t * @type {number}\n\t\t */\n\t\tthis.id = opts.id || 0;\n\n\t\t/**\n\t\t * Route of last search performed\n\t\t * @type {string}\n\t\t */\n\t\tthis.lastSearchRoute = opts.lastSearchRoute;\n\n\t\t/**\n\t\t * For use in our visual asset searches\n\t\t * @memberOf Netx.Collections.SearchAssets\n\t\t * @property {object} visual - Visual search\n\t\t * @property {module:asset/models/asset} visual.asset - Asset model for visual search\n\t\t * @property {string} visual.color - Hex color string for visual search\n\t\t */\n\t\tthis.visual = _.extend(\n\t\t\t{\n\t\t\t\tasset: new this.model(),\n\t\t\t\tcolor: '',\n\t\t\t},\n\t\t\topts.visual,\n\t\t);\n\n\t\t// Hey, listen!\n\t\t// Issue this event whenever we complete a search.\n\t\tthis.listenTo(this, 'sync', () => {\n\t\t\tdispatcher.trigger('search:complete', this);\n\t\t});\n\t}\n\n\t/**\n\t * Parse base64-encoded search object & search on it\n\t * @method\n\t * @param {string} str base64 encoded search string\n\t * @param {number} page Page\n\t */\n\tadvanced(str, page) {\n\t\tif (!this.selection.loadFromStr(str)) {\n\t\t\tthrow new Error('could not decode advanced search string \"' + str + '\"');\n\t\t}\n\n\t\t// Either first search in this mode or string has changed\n\t\t// routes (str) escaped in the url bar can come in unescaped\n\t\tif (\n\t\t\t!this.advancedSearchStr ||\n\t\t\t(this.advancedSearchStr !== str && this.advancedSearchStr !== escape(str))\n\t\t) {\n\t\t\t// Reset params\n\t\t\tthis.resetSearchParams();\n\t\t}\n\n\t\t// Store current page\n\t\tthis.curPage = page ? page : 1;\n\t\t// Store the current search string\n\t\tthis.advancedSearchStr = str;\n\t\t// Update route context\n\t\tthis.routeContext = 'search/advanced/' + escape(str);\n\n\t\treturn this.fetchSearch('advanced');\n\t}\n\n\t/**\n\t * Parse base64-encoded search object & search on it\n\t * @method\n\t * @param {string} str base64 encoded search string\n\t * @param {number} page Page\n\t */\n\tattributeHistory(str, page) {\n\t\tif (!this.selection.loadFromStr(str)) {\n\t\t\tthrow new Error('could not decode advanced search string \"' + str + '\"');\n\t\t}\n\n\t\t// Either first search in this mode or string has changed\n\t\tif (\n\t\t\t!this.attributeHistorySearchStr ||\n\t\t\tthis.attributeHistorySearchStr !== str\n\t\t) {\n\t\t\t// Reset params\n\t\t\tthis.resetSearchParams();\n\t\t}\n\n\t\t// Store current page\n\t\tthis.curPage = page ? page : 1;\n\t\t// Store the current search string\n\t\tthis.advancedSearchStr = str;\n\t\t// Update route context\n\t\tthis.routeContext = 'search/attribute/history/' + str;\n\n\t\treturn this.fetchSearch('attributeHistory');\n\t}\n\n\t/**\n\t * Set the params for a basic search.\n\t * @method\n\t * @param {string} str Search string\n\t * @param {number} page Page\n\t */\n\tbasic(str, page) {\n\t\t// console.debug('METHOD: search.basic --> ', str);\n\n\t\t// Either first search in this mode or string has changed\n\t\tif (!this.basicSearchStr || this.basicSearchStr !== str) {\n\t\t\t// Reset params\n\t\t\tthis.resetSearchParams();\n\t\t}\n\n\t\t// Store current page\n\t\tthis.curPage = page ? page : 1;\n\t\t// Store current search string\n\t\tthis.basicSearchStr = str;\n\t\t// Reset/set selection\n\t\tthis.selection.initProperties();\n\t\tthis.selection.set([\n\t\t\t{\n\t\t\t\telementType: 1, // KEYWORD search\n\t\t\t\telementSubType1: 4, // match ALL keywords\n\t\t\t\telementSubType2: 0,\n\t\t\t\telementValue1: str,\n\t\t\t},\n\t\t]);\n\n\t\tif (keywordIncludeContentsEnabled()) {\n\t\t\tthis.selection.at(0).set({elementValue2: 'true'});\n\t\t}\n\n\t\t// DAM-10194 - if simpleAssetIdSearchEnabled is true, AND search is an integer, also search by asset id\n\t\tif (simpleAssetIdSearchEnabled() && Number.isInteger(Number(str))) {\n\t\t\tthis.selection.add({\n\t\t\t\telementType: 3, // ATTRIBUTE search\n\t\t\t\telementSubType1: 4, // match ALL keywords\n\t\t\t\telementSubType2: 0,\n\t\t\t\telementValue1: str,\n\t\t\t\telementValue2: 'objectId',\n\t\t\t});\n\t\t\tthis.selection.matchCriteria = 1; // OR between rules\n\t\t}\n\n\t\t// Update route context\n\t\tthis.routeContext = 'search/basic/' + escapeURI(this.basicSearchStr);\n\n\t\treturn this.fetchSearch('basic');\n\t}\n\n\t/**\n\t * Set the params for an exact search.\n\t * @method\n\t * @param {string} str Search string\n\t * @param {number} page Page\n\t */\n\texact(str, page) {\n\t\t// Either first search in this mode or string has changed\n\t\tif (!this.exactSearchStr || this.exactSearchStr !== str) {\n\t\t\t// Reset params\n\t\t\tthis.resetSearchParams();\n\t\t}\n\n\t\t// Store current page\n\t\tthis.curPage = page ? page : 1;\n\t\t// Store current search string\n\t\tthis.exactSearchStr = str;\n\t\t// Reset/set selection\n\t\tthis.selection.initProperties();\n\t\tthis.selection.set({\n\t\t\telementType: 1, // KEYWORD search\n\t\t\telementSubType1: 10, // DIACRITICAL (extra-exact) search\n\t\t\telementSubType2: 0,\n\t\t\telementValue1: str,\n\t\t});\n\n\t\tif (keywordIncludeContentsEnabled()) {\n\t\t\tthis.selection.at(0).set({elementValue2: 'true'});\n\t\t}\n\n\t\t// Update route context\n\t\tthis.routeContext = 'search/exact/' + escapeURI(str);\n\n\t\treturn this.fetchSearch('exact');\n\t}\n\n\t/**\n\t * Fetch with our configured search, then emit success or error events defined by typeStr\n\t * @method\n\t * @param {string} typeStr Search type string\n\t * @fires module:search#search:advanced:complete\n\t * @fires module:search#search:basic:complete\n\t * @fires module:search#search:exact:complete\n\t * @fires module:search#search:advanced:error\n\t * @fires module:search#search:basic:error\n\t * @fires module:search#search:exact:error\n\t */\n\tfetchSearch(typeStr) {\n\t\treturn this.fetch({\n\t\t\tcacheSelection: true,\n\t\t\tduplicateQueryPolicy: 'abort',\n\t\t}).then(\n\t\t\t() => {\n\t\t\t\tdispatcher.trigger('search:' + typeStr + 'complete', this);\n\t\t\t},\n\t\t\t(err) => {\n\t\t\t\tdispatcher.trigger('search:' + typeStr + 'error', err);\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * Return the saved search model for this collection, if it's handy.\n\t * @method\n\t * @return {Netx.Models.SavedSearch} Saved search\n\t * @todo make it more handy.\n\t */\n\tfindSearchModel() {\n\t\treturn allSavedSearches.get(this.id);\n\t}\n\n\t/**\n\t * @method\n\t */\n\tresetSearchParams() {\n\t\t// Clear any set saved search id\n\t\tthis.id = 0;\n\t\t// Remove any search strings\n\t\tdelete this.advancedSearchStr;\n\t\tdelete this.basicSearchStr;\n\t\tdelete this.exactSearchStr;\n\t\t// Start fresh\n\t\tthis.selection.searchFacets.reset();\n\t\tthis.curPage = 1;\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} title The saved search title\n\t * @param {string} description The saved search description\n\t * @param {number} notifyType Notifcation type\n\t * @param {boolean} global Whether or not the saved search is global\n\t * @todo convert to a single param object - avoid this pattern of just adding endless arguments\n\t */\n\tsaveSearch(title, description, notifyType, global) {\n\t\tconst searchObj = this.selection.createSearchObject();\n\t\tconst m = new SavedSearchModel(\n\t\t\t_.extend(\n\t\t\t\t{},\n\t\t\t\t_.pick(searchObj, 'sortField', 'matchCriteria', 'sortOrder'),\n\t\t\t\t{\n\t\t\t\t\ttitle: title,\n\t\t\t\t\tdescription: description,\n\t\t\t\t\tglobal: global === true,\n\t\t\t\t\tnotifyType: parseInt(notifyType) || 0,\n\t\t\t\t\t// Whelp - pick the values we need from the search object, get just the values (no more keys) and then zip them up into their respective groupings AND LASTLY map to objects with new keys\n\t\t\t\t\t// From:\n\t\t\t\t\t// {\n\t\t\t\t\t// \t\telementTypes: [ 1, 14, ... ]\n\t\t\t\t\t// \t\telementSubType1s: [ 4, 2, ... ]\n\t\t\t\t\t// \t\telementSubType2s: [ 0, 0, ... ]\n\t\t\t\t\t// \t\telementValue1s: [ \"jpg\", \"jpg\", ... ]\n\t\t\t\t\t// \t\telementValue2s: [ \"\", \"\", ... ]\n\t\t\t\t\t// \t\telementValue3s: [ \"\", \"\", ... ]\n\t\t\t\t\t// }\n\t\t\t\t\t// To a CriterionBean:\n\t\t\t\t\t// [\n\t\t\t\t\t//\t\t{\n\t\t\t\t\t//\t\t\ttype: 1,\n\t\t\t\t\t//\t\t\tsubtype1: 4,\n\t\t\t\t\t//\t\t\tsubtype2: 0,\n\t\t\t\t\t//\t\t\tvalue1: \"jpg\",\n\t\t\t\t\t//\t\t\tvalue2: \"\",\n\t\t\t\t\t//\t\t\tvalue3: \"\"\n\t\t\t\t\t//\t\t},\n\t\t\t\t\t//\t\t{\n\t\t\t\t\t//\t\t\ttype: 14,\n\t\t\t\t\t//\t\t\tsubtype1: 2,\n\t\t\t\t\t//\t\t\tsubtype2: 0,\n\t\t\t\t\t//\t\t\tvalue1: \"jpg\"\n\t\t\t\t\t//\t\t\tvalue2: \"\",\n\t\t\t\t\t//\t\t\tvalue3: \"\"\n\t\t\t\t\t//\t\t},\n\t\t\t\t\t//\t\t...\n\t\t\t\t\t// ]\n\t\t\t\t\tcriteria: _.map(\n\t\t\t\t\t\t_.zip.apply(\n\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t_.values(\n\t\t\t\t\t\t\t\t_.pick(\n\t\t\t\t\t\t\t\t\tsearchObj,\n\t\t\t\t\t\t\t\t\t'elementTypes',\n\t\t\t\t\t\t\t\t\t'elementSubType1s',\n\t\t\t\t\t\t\t\t\t'elementSubType2s',\n\t\t\t\t\t\t\t\t\t'elementValue1s',\n\t\t\t\t\t\t\t\t\t'elementValue2s',\n\t\t\t\t\t\t\t\t\t'elementValue3s',\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t\t(n) =>\n\t\t\t\t\t\t\t_.object(\n\t\t\t\t\t\t\t\t['type', 'subtype1', 'subtype2', 'value1', 'value2', 'value3'],\n\t\t\t\t\t\t\t\tn,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\t\t// Save it\n\t\treturn m.save().then((response) => {\n\t\t\t// Success\n\t\t\treturn m;\n\t\t});\n\t}\n\n\t/**\n\t * Set the params for a saved search & fetch it.\n\t * @method\n\t * @param {number} id SavedSearch id\n\t */\n\tsaved(id, page) {\n\t\t// Either the first load or a different saved search\n\t\tif (!this.id || this.id !== parseInt(id)) {\n\t\t\t// Reset params\n\t\t\tthis.resetSearchParams();\n\t\t}\n\n\t\t// Store current page\n\t\tthis.curPage = page ? page : 1;\n\t\t// Store saved search id\n\t\tthis.id = parseInt(id);\n\t\t// Reset/set selection\n\t\tthis.selection.initProperties();\n\t\tthis.selection.set([\n\t\t\t{\n\t\t\t\telementType: 24, // Saved search\n\t\t\t\telementValue1: this.id,\n\t\t\t},\n\t\t]);\n\n\t\t// Update route context\n\t\tthis.routeContext = 'search/saved/' + id;\n\n\t\treturn this.fetchSearch('saved');\n\t}\n\n\t/**\n\t * Return an assetSet model defining the set of this search's assets.\n\t * However, this is only possible for saved searches. If this search is not saved, we throw an exception.\n\t * @method\n\t * @return {module:asset/models/assetSet} Asset set\n\t */\n\ttoAssetSet() {\n\t\tconst model = this.findSearchModel();\n\t\tif (this.id) {\n\t\t\t// defined & greater than zero\n\t\t\treturn new AssetSetModel({\n\t\t\t\ttype: assetSetTypes.savedSearch,\n\t\t\t\tids: [this.id],\n\t\t\t\tlabel: model ? model.get('title') : undefined,\n\t\t\t\tmodels: model ? [model] : undefined,\n\t\t\t});\n\t\t} else {\n\t\t\tconsole.warn(\"can't define an assetSet for an unsaved search.\");\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Set the params for a visual asset search\n\t * @method\n\t * @param {number} assetId Asset id\n\t * @param {number} page Page number\n\t */\n\tvisualAsset(assetId, page) {\n\t\t// There is no facet support for visual search (currently)\n\t\t// Reset params\n\t\tthis.resetSearchParams();\n\n\t\t// Store current page\n\t\tthis.curPage = page ? page : 1;\n\t\t// Reset/set selection\n\t\tthis.selection.initProperties({\n\t\t\tsortField: 'relevance',\n\t\t\tsortOrder: 1,\n\t\t});\n\t\tthis.selection.set([\n\t\t\t{\n\t\t\t\telementType: 27, // Visual\n\t\t\t\telementSubType1: 1, // By asset id\n\t\t\t\telementSubType2: 0,\n\t\t\t\telementValue1: assetId,\n\t\t\t},\n\t\t]);\n\n\t\t// Update route context\n\t\tthis.routeContext = 'search/visual/asset/' + assetId;\n\n\t\treturn this.fetchSearch('visual:asset');\n\t}\n\n\t/**\n\t * Set the params for a visual color search\n\t * @method\n\t * @param {string} color Hex color string\n\t * @param {number} page Page number\n\t */\n\tvisualColor(color, page) {\n\t\t// Store current page\n\t\tthis.curPage = page ? page : 1;\n\t\t// Reset/set selection\n\t\tthis.selection.initProperties({\n\t\t\tsortField: 'relevance',\n\t\t\tsortOrder: 1,\n\t\t});\n\t\tthis.selection.set([\n\t\t\t{\n\t\t\t\telementType: 27, // Visual\n\t\t\t\telementSubType1: 2, // By color\n\t\t\t\telementSubType2: 0,\n\t\t\t\telementValue1: color,\n\t\t\t},\n\t\t]);\n\n\t\t// Update route context\n\t\tthis.routeContext = 'search/visual/color/' + escapeURI(color);\n\n\t\treturn this.fetchSearch('visual:color');\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'SearchAssets';\n\t}\n}\n","/**\n * @class\n */\nimport Base from 'netxcore@netx/core-search/collections/searchAssets';\nimport {appRouter} from '@netx/core-next/instance/router';\nimport searchConfig from '@netx/core-search/config';\nimport categoryConfig from '@netx/core-category/config';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\nimport {escapeURI} from '@netx/core/utils/escapeURI';\n\nexport default class SearchAssets extends Base {\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\tsuper(models, opts);\n\n\t\tthis.listenTo(this, 'sortChanged', (sortField, sortOrder) => {\n\t\t\t// DAM-19243 - !this.advancedSearchStr\n\t\t\t// When in advanced search we need to update the url to reflect the\n\t\t\t// user's sort field/order choice. Otherwise when we page it will\n\t\t\t// revert back to the sort/field order when the advanced search was\n\t\t\t// initially hit (typically file/asc)\n\n\t\t\t// DAM-20825 - !window.location.hash.includes('search')\n\t\t\t// this deprecated code was moved from core and is no longer used in /app\n\t\t\t// the portal still needs it, but needs not to get triggered from\n\t\t\t// a folder or collection sort, as we are using a dispatcher event on sort\n\t\t\t// that all assets.js collections listen to, one sort to rule them all I guess\n\t\t\tif (!this.advancedSearchStr || !window.location.hash.includes('search'))\n\t\t\t\treturn;\n\n\t\t\tconst ruleStr = (this.advancedSearchStr = this.selection.toStr());\n\t\t\tthis.routeContext = `search/advanced/${ruleStr}`;\n\n\t\t\t// DAM-19243 - I do not like updating routes from models but there really isn't\n\t\t\t// a better place to do this at this time (will address in the search\n\t\t\t// refactor)\n\t\t\tappRouter.navigate(`${this.routeContext}/page/${this.curPage}`, false);\n\t\t});\n\t}\n\n\t// DAM-19047 - This needs to pass to show loading on the initial load\n\t// while the showLoading listeners are added in netx-view, gross\n\t// this._rpc.callsByName.read never exists in this collection\n\tget isSyncing() {\n\t\treturn (\n\t\t\tthis._rpc && this.syncing && this._rpc.callsByName.facetedSearch != null\n\t\t);\n\t}\n\n\t/**\n\t * Set the params for a basic search.\n\t * @override\n\t * THEM-1762 - portal search category\n\t * @param {string} str Search string\n\t * @param {number} page Page\n\t */\n\tbasic(str, page) {\n\t\t// console.debug('METHOD: search.basic --> ', str);\n\n\t\t// Either first search in this mode or string has changed\n\t\tif (!this.basicSearchStr || this.basicSearchStr !== str) {\n\t\t\t// Reset params\n\t\t\tthis.resetSearchParams();\n\t\t}\n\n\t\t// Store current page\n\t\tthis.curPage = page ? page : 1;\n\t\t// Store current search string\n\t\tthis.basicSearchStr = str;\n\t\t// Reset/set selection\n\t\tthis.selection.initProperties();\n\t\tthis.selection.set([\n\t\t\t{\n\t\t\t\telementType: 1, // KEYWORD search\n\t\t\t\telementSubType1: 4, // match ALL keywords\n\t\t\t\telementSubType2: 0,\n\t\t\t\telementValue1: str,\n\t\t\t},\n\t\t]);\n\n\t\tif (getPreference('search.keywordIncludeContents', true)) {\n\t\t\tthis.selection.at(0).set({elementValue2: 'true'});\n\t\t}\n\n\t\t// is custom search category id set?\n\t\t// THEM-1232 - now pushing this to the end, keyword needs to be first so stat can get recorded.\n\t\tvar searchId = !_.isUndefined(searchConfig.categoryid)\n\t\t\t? searchConfig.categoryid\n\t\t\t: categoryConfig.categoryid;\n\t\tif (searchId !== 1) {\n\t\t\tthis.selection.push({\n\t\t\t\telementType: 23, // CATEGORY ID search\n\t\t\t\telementSubType1: 0,\n\t\t\t\telementSubType2: 0,\n\t\t\t\telementValue1: searchId,\n\t\t\t});\n\t\t}\n\n\t\t// Update route context\n\t\tthis.routeContext = 'search/basic/' + escapeURI(this.basicSearchStr);\n\n\t\treturn this.fetchSearch('basic');\n\t}\n\n\t/** @override */\n\texact(str, page) {\n\t\t// TODO: this is being overriden solely for THEM-1297\n\n\t\t// Either first search in this mode or string has changed\n\t\tif (!this.exactSearchStr || this.exactSearchStr !== str) {\n\t\t\t// Reset params\n\t\t\tthis.resetSearchParams();\n\t\t}\n\n\t\tthis.curPage = page ? page : 1;\n\t\tthis.exactSearchStr = str;\n\t\tthis.routeContext = 'search/exact/' + escapeURI(str);\n\n\t\tthis.selection.initProperties();\n\t\tthis.selection.set({\n\t\t\telementType: 1, // KEYWORD search\n\t\t\telementSubType1: 10, // DIACRITICAL (extra-exact) search\n\t\t\telementSubType2: 0,\n\t\t\telementValue1: str,\n\t\t});\n\n\t\t// is custom search category id set?\n\t\t// THEM-1297 - exact search too, duplicated from basic search\n\t\tvar searchId =\n\t\t\tsearchConfig.categoryid != null\n\t\t\t\t? searchConfig.categoryid\n\t\t\t\t: categoryConfig.categoryid;\n\t\tif (searchId !== 1) {\n\t\t\tthis.selection.push({\n\t\t\t\telementType: 23, // CATEGORY ID search\n\t\t\t\telementSubType1: 0,\n\t\t\t\telementSubType2: 0,\n\t\t\t\telementValue1: searchId,\n\t\t\t});\n\t\t}\n\n\t\t// Search document contents via keyword search\n\t\tif (getPreference('search.keywordIncludeContents', true)) {\n\t\t\tthis.selection.findWhere({elementType: 1}).set({elementValue2: 'true'});\n\t\t}\n\n\t\treturn this.fetchSearch('exact');\n\t}\n}\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/assetAttributeSetSelectionView.html';\n\nimport AssetAttributeSetsSelectionCollection from '../collections/assetAttributeSetsSelection';\n\nexport default class AssetAttributeSetSelectionView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.className = opts.className || 'attribute-set-select';\n\t\topts.eventStr = opts.eventStr || 'foo:bar';\n\t\topts.template = opts.template || Template;\n\t\topts.events = _.extend(\n\t\t\t{\n\t\t\t\t'change select.nx-attribute-set-select': 'attributeSetSelectChange',\n\t\t\t},\n\t\t\topts.events,\n\t\t);\n\t\topts.showLabel = opts.showLabel === true;\n\t\tsuper(opts);\n\n\t\t/**\n\t\t * Whether or not to show label on the select element\n\t\t * @memberof Netx.Views.AssetAttributeSetSelectionView\n\t\t * @type {boolean}\n\t\t */\n\t\tthis.showLabel = opts.showLabel;\n\n\t\t/**\n\t\t * If a function is provided, it will be called when the selection changes\n\t\t * It will be provided with a promise that must be resolved or rejected\n\t\t * @memberOf Netx.Views.AssetAttributeSetSelectionView\n\t\t * @alias confirmChange\n\t\t * @type {function}\n\t\t */\n\t\tthis.confirmChange = opts.confirmChange;\n\n\t\t/**\n\t\t * Give a custom attribute set option\n\t\t * @type {boolean}\n\t\t * @default\n\t\t */\n\t\tthis.customSet = opts.customSet === true;\n\n\t\t/**\n\t\t * Ignore form related events/data in any view this may be injected in\n\t\t * @type {boolean}\n\t\t * @default\n\t\t */\n\t\tthis.formIgnore = opts.formIgnore === true;\n\n\t\t/**\n\t\t * The sets being selected used for editing attributes (omit system attributes)\n\t\t * @type {boolean}\n\t\t * @default\n\t\t */\n\t\tthis.forEditing = opts.forEditing === true;\n\n\t\t/**\n\t\t * Multiple selections\n\t\t * @type {boolean}\n\t\t * @default\n\t\t */\n\t\tthis.multiple = opts.multiple === true;\n\n\t\t/**\n\t\t * Can unselect (will have a default \"please select\" option if not multiple)\n\t\t * @type {boolean}\n\t\t * @default\n\t\t */\n\t\tthis.canUnselect = opts.canUnselect === true;\n\n\t\t/**\n\t\t * @memberOf Netx.Views.AssetAttributeSetSelectionView\n\t\t * @alias selection\n\t\t * @type {Netx.Collections.AssetAttributeSetsSelection}\n\t\t */\n\t\tthis.selection =\n\t\t\topts.selection ||\n\t\t\tnew AssetAttributeSetsSelectionCollection([], {\n\t\t\t\tselectedSetIds: this.canUnselect ? this.selectedSetIds || [] : null,\n\t\t\t});\n\n\t\t// Hey, listen!\n\t\t// We will assume that if an event string was omitted that that tis view should not be responding to selection changes\n\t\tif (this.eventStr) {\n\t\t\tthis.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t`${this.eventStr}:cancelled`,\n\t\t\t\tthis.cancelledAttributeSetChange,\n\t\t\t);\n\t\t}\n\t\t// Selected sets are ready\n\t\tthis.listenTo(this.selection, 'sync', (collection) => {\n\t\t\tif (collection !== this.selection) return;\n\t\t\tthis.trigger('selection:ready', this, this.selection);\n\t\t});\n\n\t\t// jQuery and its append issues\n\t\tthis.$el.attr('id', _.uniqueId('attribute-set-selection-view-'));\n\n\t\t// Only one instance in this view\n\t\tthis.Plugins.Extend({\n\t\t\tselectpicker: {\n\t\t\t\tmultiple: false,\n\t\t\t},\n\t\t});\n\t}\n\n\t/** @override */\n\tbindCollectionEvents() {\n\t\tsuper.bindCollectionEvents();\n\n\t\tconst collection = this.collection;\n\t\t// We will assume that if an event string was omitted that that tis view should not be responding to selection changes\n\t\tif (this.eventStr) {\n\t\t\tthis.listenTo(\n\t\t\t\tcollection,\n\t\t\t\t'nx:change:selection',\n\t\t\t\tthis.attributeSetSelected,\n\t\t\t);\n\t\t}\n\t\treturn this.listenTo(\n\t\t\tcollection,\n\t\t\t'change:name add remove',\n\t\t\tthis.debouncedRender,\n\t\t).listenTo(collection, 'sync', (syncedItem) => {\n\t\t\t// Syncing models are not our concern\n\t\t\tif (syncedItem !== collection) return;\n\t\t\tthis.render();\n\t\t});\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tsuper.preRender();\n\n\t\t// Additonal template vars\n\t\t_.extend(this.templateVars, {\n\t\t\tattributeSets: this.collection.selectableSets(this.forEditing),\n\t\t\tcanUnselect: this.canUnselect,\n\t\t\tselectedSetIds: this.selection.selectedSetIds,\n\t\t\tcustomSet: this.customSet,\n\t\t\tformIgnore: this.formIgnore,\n\t\t\tmultiple: this.multiple,\n\t\t\tshowLabel: this.showLabel,\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Cache\n\t\tthis.$attributeSetsSelect = this.$('select.nx-attribute-set-select');\n\t}\n\n\t/**\n\t * When the select input changes\n\t * @method\n\t * @param {event} e Change event\n\t */\n\tattributeSetSelectChange(e) {\n\t\tlet d = true;\n\t\tif (_.isFunction(this.confirmChange)) {\n\t\t\td = new $.Deferred();\n\t\t\tthis.confirmChange(d);\n\t\t}\n\n\t\t$.when(d).then(\n\t\t\t() => {\n\t\t\t\tlet newValue = this.$attributeSetsSelect.val();\n\t\t\t\tif (this.multiple) {\n\t\t\t\t\tnewValue = newValue || [];\n\t\t\t\t}\n\n\t\t\t\tthis.eventStr\n\t\t\t\t\t? dispatcher.trigger(this.eventStr, this.selection, newValue)\n\t\t\t\t\t: this.selection.setSelected(newValue);\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tthis.setValue(this.selection.getSelectedSetIds());\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * Whether we did it or not, an instance with the same `eventStr` has updated the selected set\n\t * If it wasn't our instance, update to the selected value\n\t * @method\n\t */\n\tattributeSetSelected() {\n\t\tif (!this.$attributeSetsSelect) return;\n\n\t\tlet currentValue = this.$attributeSetsSelect.val();\n\t\tconst newValue = this.selection.getSelectedSetIds();\n\n\t\tif (this.multiple) {\n\t\t\tcurrentValue = (currentValue || []).join();\n\t\t\tif (currentValue != newValue.join()) {\n\t\t\t\tthis.$attributeSetsSelect.val(newValue);\n\t\t\t}\n\t\t} else if (currentValue != newValue) {\n\t\t\tthis.$attributeSetsSelect.val(newValue);\n\t\t}\n\t}\n\n\t/**\n\t * User opted not to move forward with change\n\t * Put the previosuly selected value(s) back\n\t * @method\n\t */\n\tcancelledAttributeSetChange() {\n\t\tthis.setValue(this.selection.selectedSetIds());\n\t}\n\n\t/**\n\t * @method\n\t * @return {mixed} Selected id(s)\n\t */\n\tgetSelection() {\n\t\tconst selectedIds = this.selection.selectedSetIds;\n\t\treturn this.multiple ? selectedIds : selectedIds[0];\n\t}\n\n\t/**\n\t * @method\n\t * @return {string} actual value\n\t */\n\tgetSelectedValue() {\n\t\treturn this.$attributeSetsSelect && this.$attributeSetsSelect.val();\n\t}\n\n\t/**\n\t * @method\n\t * @param {array|string} value Value to set\n\t */\n\tsetValue(value) {\n\t\tif (this.multiple) {\n\t\t\tvalue = value || [];\n\t\t}\n\t\tthis.$attributeSetsSelect && this.$attributeSetsSelect.val(value);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetAttributeSetSelectionView';\n\t}\n}\n","import Base from 'netxcore@netx/core-asset/views/assetAttributeSetSelectionView';\nimport Selectpicker from '@netx/core/functionality/selectpicker';\n\nSelectpicker(Base);\n\nexport default Base;\n","/**\n * View displays list of attributes and grid list icons to affect display of asset lists\n * @class\n * @todo Refactor sorting:\n * Trigger sorts with a route (via query args ?sort=&order= or similar) instead of data-sort click events\n * The route parses the args & adjusts .selection before a fetch.\n * Categories listen for user:sort events & refetch themselves (as now).\n * Views listen for user:sort events & adjust themselves (set sort selection, etc)\n * User module listens for user:sort events and sets the default sort (every time.)\n * Currently there are too many sort events (asset:sort, user:sort, etc) and sorts bubbling up from the\n * collection to the view is awkward.\n */\nimport Base from '@netx/core/lib/netx-view';\nimport Template from '../templates/userSortView.html';\n\nimport AssetAttributeSetSelectionView from '@netx/core-asset/views/assetAttributeSetSelectionView';\n\nimport assetCustomConfig from '@netx/core-asset/config';\nimport {assets as searchAssets} from '@netx/core-search/properties/search';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\nimport {userPrefs} from '@netx/core-user/collections/singletons/userPreferences';\nimport {getUserLevel} from '@netx/core-user-next/utils/getUserLevel';\nimport {setPreference} from '@netx/core-user-next/utils/setPreference';\n\nexport default class UserSortView extends Base {\n\t/**\n\t * @override\n\t * @listens module:asset#asset:attributes:fetched\n\t * @listens module:user#user:sortField:update\n\t * @listens module:user#user:sortOrder:update\n\t */\n\tconstructor(opts = {}) {\n\t\topts.events = _.extend(\n\t\t\t{\n\t\t\t\t'change select.nx-sort-field': 'sortFieldSelected',\n\t\t\t\t'click .nx-sort-order': 'sortOrderSelected',\n\t\t\t\t'click .nx-list-layout-type': 'switchListType',\n\t\t\t\t'change .nx-curator-slider .nx-slider': 'curatorSliderChanged',\n\t\t\t\t'input .nx-curator-slider .nx-slider': 'curatorSliderChanged',\n\t\t\t},\n\t\t\topts.events,\n\t\t);\n\t\topts.loadingClassObjects = opts.loadingClassObjects || ['collection'];\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\n\t\t// Debounced methods\n\t\tthis.curatorSliderChanged = _.debounce(this.curatorSliderChanged, 50);\n\t\tthis.userSortUpdated = _.debounce(this.userSortUpdated, 100);\n\n\t\t/**\n\t\t * @memberOf Netx.Views.UserSortView\n\t\t * @alias attributeSets\n\t\t * @type {Netx.Collections.AssetAttributeSets}\n\t\t */\n\t\tthis.attributeSets = opts.attributeSets || Netx.asset.attributeSets;\n\n\t\t/**\n\t\t * @memberOf Netx.Views.UserSortView\n\t\t * @alias attributeSetSelections\n\t\t * @type {object}\n\t\t */\n\t\tthis.attributeSetSelections =\n\t\t\topts.attributeSetSelections || Netx.asset.listTypeAttributeSetsSelections;\n\n\t\t/**\n\t\t * @memberOf Netx.Views.UserSortView\n\t\t * @alias sortFieldProperties\n\t\t * @type {object}\n\t\t */\n\t\tthis.sortFieldProperties =\n\t\t\topts.sortFieldProperties || searchAssets.sortFields;\n\n\t\t/**\n\t\t * List layout types\n\t\t * @memberOf Netx.Views.UserSortView\n\t\t * @alias listLayoutTypes\n\t\t * @type {array}\n\t\t */\n\t\tthis.listLayoutTypes = opts.listLayoutTypes || assetCustomConfig.LIST_TYPE;\n\n\t\t/**\n\t\t * Currently selected list layout type\n\t\t * @memberOf Netx.Views.UserSortView\n\t\t * @alias listLayoutTypeSelected\n\t\t * @type {string}\n\t\t */\n\t\tthis.listLayoutTypeSelected = userPrefs.getListPreference() || 'list';\n\n\t\t/**\n\t\t * @memberOf Netx.Views.UserSortView\n\t\t * @alias userPrefKeys\n\t\t * @type {object}\n\t\t */\n\t\tthis.userPrefKeys = _.extend(\n\t\t\t{\n\t\t\t\tcardSize: 'asset.list.cardSize',\n\t\t\t\tcuratorMode: 'asset.list.curatorMode',\n\t\t\t\tlayoutType: 'asset.list.type',\n\t\t\t\tsortField: 'asset.list.sort.field',\n\t\t\t\tsortOrder: 'asset.list.sort.order',\n\t\t\t\tthumbMaxSize: 'image.thumb_max_length',\n\t\t\t},\n\t\t\topts.userPrefKeys,\n\t\t);\n\n\t\t// Hey, listen!\n\t\tthis\n\t\t\t// Re-render when DAM attributes are fetched, to get the latest sort order menu.\n\t\t\t.listenTo(dispatcher, 'asset:attributes:fetched', this.debouncedRender)\n\t\t\t.listenTo(dispatcher, 'user:sortField:update', this.updateSortField)\n\t\t\t.listenTo(dispatcher, 'user:sortOrder:update', this.updateSortOrder);\n\t}\n\n\t/** @override */\n\tbindCollectionEvents() {\n\t\tsuper.bindCollectionEvents();\n\t\treturn this.listenTo(this.collection, 'sync', this.debouncedRender);\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\t// Cleanup\n\t\tthis.removeAttributeSetSelection();\n\n\t\tsuper.preRender();\n\n\t\t// Set up sort preferences now\n\t\tthis.getSortPrefs();\n\n\t\tconst isVisual = this.collection.isVisual;\n\n\t\t// assuming filters exist\n\t\tconst filters = Netx.asset.attributeSets.filters;\n\t\tconst sortAttrs = filters.get('sortAttributes');\n\t\t// this is for yarn watch:portal\n\t\tif (!sortAttrs) return;\n\t\tconst sortAttrNames = sortAttrs.get('attributeNames');\n\t\tconst sortAttrLabels = sortAttrs.attributeTemplates.map((attr) =>\n\t\t\tattr.getLabel(),\n\t\t);\n\n\t\t// Additional template vars\n\t\t_.extend(this.templateVars, {\n\t\t\tcuratorMode: getPreference(this.userPrefKeys.curatorMode) || 3,\n\t\t\tcurrentLayoutType: this.listLayoutType,\n\t\t\tlayoutTypes: assetCustomConfig.LIST_TYPE,\n\t\t\tsortField: this.sortField,\n\t\t\tsortOrder: this.sortOrder,\n\t\t\tsortFields: {\n\t\t\t\t...sortAttrNames.reduce(\n\t\t\t\t\t(accum, attrName, index) => ({\n\t\t\t\t\t\t...accum,\n\t\t\t\t\t\t[attrName]: sortAttrLabels[index],\n\t\t\t\t\t}),\n\t\t\t\t\t{},\n\t\t\t\t),\n\t\t\t\t// TODO: get this from the properties file or something\n\t\t\t\trelevance: i18n.t('i18n.relevance'),\n\t\t\t},\n\t\t\tisDisabled: isVisual,\n\t\t});\n\t}\n\n\t/** @override */\n\tpostRender() {\n\t\tsuper.postRender();\n\n\t\t// Cache\n\t\tthis.$attributeSets = this.$('.nx-attribute-sets-selection');\n\t\tthis.$curatorSliderContainer = this.$('.nx-curator-slider');\n\t\tthis.$curatorSlider = this.$curatorSliderContainer.find('.nx-slider');\n\t\tthis.$layoutTypes = this.$('.nx-list-layout-type');\n\t\tthis.$sort = this.$('.nx-sort');\n\t\tthis.$sortField = this.$sort.find('select.nx-sort-field');\n\t\tthis.$sortOrder = this.$sort.find('.nx-sort-order');\n\n\t\t// TODO - `user:sort:type` is not accurate for what this is\n\t\t// this is nothing to do with sort - it is about layout\n\t\tthis.listLayoutTypeSelected = userPrefs.getListPreference() || 'list';\n\t\tthis.setListType(this.listLayoutTypeSelected);\n\n\t\t// Inject our attribute set selection view\n\t\tthis.injectAttributeSetSelection();\n\n\t\t// Check if the collection we are in is sortable\n\t\tthis.checkSortable();\n\t}\n\n\t/**\n\t * @method\n\t */\n\tcheckSortable() {\n\t\tthis.$sort.toggle(this.collection.isSortable());\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e Change event\n\t * @fires module:user#user:curatorMode:selected\n\t * @fires module:user#user:prefs:set\n\t */\n\tcuratorSliderChanged(e) {\n\t\tconst mode = parseInt(this.$curatorSlider.val());\n\t\tdispatcher.trigger('user:prefs:set', this.userPrefKeys.curatorMode, mode);\n\t\tdispatcher.trigger('user:curatorMode:selected', mode);\n\t}\n\n\t/** @method */\n\tgetSortPrefs() {\n\t\tif (getUserLevel() <= 0) return;\n\n\t\t// Get the user's preferred sort field\n\t\t// Store\n\t\tconst selection = this.collection.selection;\n\t\tthis.sortField = selection.sortField;\n\t\tthis.sortOrder = selection.sortOrder;\n\n\t\t// Get layout list type\n\t\tthis.listLayoutType = userPrefs.getListPreference();\n\t}\n\n\t/**\n\t * @method\n\t */\n\tinjectAttributeSetSelection(type) {\n\t\ttype = type || this.listLayoutTypeSelected;\n\t\t// Cleanup\n\t\tthis.removeAttributeSetSelection();\n\t\t// Right now, grid has no use for this\n\t\tif (type === 'grid') return;\n\n\t\t/**\n\t\t * Asset attribute set selection\n\t\t * @memberOf Netx.Views.UserSortView\n\t\t * @alias attributeSetSelectionView\n\t\t * @type {Netx.Views.AssetAttributeSetSelectionView}\n\t\t */\n\t\tthis.attributeSetSelectionView = this.addSubView(\n\t\t\tnew AssetAttributeSetSelectionView({\n\t\t\t\teventStr: 'asset:attributeSet:select:gallery',\n\t\t\t\tcollection: this.attributeSets,\n\t\t\t\tselection: this.attributeSetSelections[type],\n\t\t\t\tformIgnore: true,\n\t\t\t}),\n\t\t);\n\t\t// Render and append attribute set selection\n\t\tthis.$attributeSets.append(this.attributeSetSelectionView.render().$el);\n\t}\n\n\t/**\n\t * @method\n\t */\n\tremoveAttributeSetSelection() {\n\t\tthis.attributeSetSelectionView &&\n\t\t\tthis.removeSubView(this.attributeSetSelectionView, true);\n\t}\n\n\t/**\n\t * Show the selected type of list\n\t * @method\n\t * @param {string} type List type\n\t * @fires module:user#user:sort\n\t */\n\tsetListType(type) {\n\t\t// IF we switched types, inject the proper attribute set selection view\n\t\tif (type !== this.listLayoutTypeSelected) {\n\t\t\tthis.injectAttributeSetSelection(type);\n\t\t}\n\n\t\t// Store\n\t\tthis.listLayoutTypeSelected = type;\n\n\t\t// Update active class\n\t\tthis.$layoutTypes\n\t\t\t.removeClass('active')\n\t\t\t.filter('[data-nx-layout=\"' + type + '\"]')\n\t\t\t.addClass('active');\n\n\t\t// Toggle the slider visibility\n\t\tthis.$curatorSliderContainer.toggle(type === 'curator');\n\n\t\t// Let the app know\n\t\tdispatcher.trigger('user:sort:type', type);\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e Change event\n\t */\n\tsortFieldSelected(e) {\n\t\tif (e instanceof $.Event) {\n\t\t\tthis.updateSortField(this.$(e.currentTarget).val());\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} str Order string (ascending/descending)\n\t */\n\tsortOrderInt(str) {\n\t\t// Already good to go\n\t\tif (_.isNumeric(str)) {\n\t\t\treturn parseInt(str);\n\t\t}\n\t\t// 0 = false = ascending, 1 = true = descending\n\t\treturn str === 'descending' ? 1 : 0;\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e Click event\n\t */\n\tsortOrderSelected(e) {\n\t\tif (!(e instanceof $.Event)) return;\n\t\tthis.updateSortOrder(this.$(e.currentTarget).attr('data-nx-sort-order'));\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e Click event\n\t */\n\tswitchListType(e) {\n\t\tif (!(e instanceof $.Event)) return;\n\n\t\tconst listLayoutType = this.$(e.currentTarget).attr('data-nx-layout');\n\t\tif (!listLayoutType) return;\n\n\t\t// Store the choice\n\t\tthis.listLayoutType = listLayoutType;\n\t\t// Show the list layout type\n\t\tthis.setListType(listLayoutType);\n\t\t// Save to user preference\n\t\tsetPreference(this.userPrefKeys.layoutType, listLayoutType);\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} sortField Sort field\n\t * @fires module:user#user:sort\n\t */\n\tupdateSortField(sortField) {\n\t\tconst changed = this.sortField !== sortField;\n\t\tif (!changed) return;\n\n\t\tthis.sortField = sortField;\n\t\tsetPreference(this.userPrefKeys.sortField, this.sortField);\n\t\tthis.userSortUpdated();\n\t}\n\n\t/**\n\t * @method\n\t * @param {number|string} sortOrder Sort order\n\t */\n\tupdateSortOrder(sortOrder) {\n\t\tsortOrder = this.sortOrderInt(sortOrder);\n\t\tconst changed = this.sortOrder !== sortOrder;\n\t\tif (!changed) return;\n\n\t\tthis.sortOrder = sortOrder;\n\t\tsetPreference(this.userPrefKeys.sortOrder, this.sortOrder);\n\t\tthis.userSortUpdated();\n\t\t// Update active classes\n\t\tthis.$sortOrder\n\t\t\t.removeClass('active')\n\t\t\t.filter(\n\t\t\t\t'[data-nx-sort-order=\"' +\n\t\t\t\t\t(this.sortOrder ? 'descending' : 'ascending') +\n\t\t\t\t\t'\"]',\n\t\t\t)\n\t\t\t.addClass('active');\n\t}\n\n\t/**\n\t * @method\n\t * @fires module:user#user:sort\n\t */\n\tuserSortUpdated(sortOrder) {\n\t\tif (sortOrder != null) {\n\t\t\tthis.sortOrder = sortOrder;\n\t\t}\n\t\tdispatcher.trigger('user:sort', this.sortField, this.sortOrder);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'UserSortView';\n\t}\n}\n","/**\n * @class\n */\nimport Base from 'netxcore@netx/core-user/views/userSortView';\n\nimport Selectpicker from '@netx/core/functionality/selectpicker';\n\nimport {faCaretDown, faCaretUp} from '@fortawesome/pro-solid-svg-icons';\nconst icons = Base.initializeIcons({\n\tfaCaretDown,\n\tfaCaretUp,\n});\n\nexport default class UserSortView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.className = opts.className || 'user-sort';\n\t\topts.events = _.extend(\n\t\t\t{\n\t\t\t\t'click .nx-sort-order-toggle': 'toggleSortOrder',\n\t\t\t},\n\t\t\topts.events,\n\t\t);\n\t\topts.icons = {...icons, ...opts.icons};\n\t\tsuper(opts);\n\t}\n\n\t// Made this available to core\n\t// /** @override */\n\t// preRender() {\n\t// \tsuper.preRender();\n\t// \t// assuming filters exist\n\t// \tconst filters = Netx.asset.attributeSets.filters;\n\t// \tconst sortAttrs = filters.get('sortAttributes');\n\t// \t// this is for yarn watch:portal\n\t// \tif (!sortAttrs) return;\n\t// \tconst sortAttrNames = sortAttrs.get('attributeNames');\n\t// \tconst sortAttrLabels = sortAttrs.attributeTemplates.map((attr) =>\n\t// \t\tattr.getLabel(),\n\t// \t);\n\n\t// \t_.extend(this.templateVars, {\n\t// \t\tsortFields: {\n\t// \t\t\t...sortAttrNames.reduce(\n\t// \t\t\t\t(accum, attrName, index) => ({\n\t// \t\t\t\t\t...accum,\n\t// \t\t\t\t\t[attrName]: sortAttrLabels[index],\n\t// \t\t\t\t}),\n\t// \t\t\t\t{},\n\t// \t\t\t),\n\t// \t\t\t// TODO: get this from the properties file or something\n\t// \t\t\trelevance: i18n.t('i18n.relevance'),\n\t// \t\t},\n\t// \t});\n\t// }\n\n\t/**\n\t * @method\n\t * @param {event} e `click` event\n\t */\n\ttoggleSortOrder(e) {\n\t\tthis.updateSortOrder(this.sortOrder ? 0 : 1);\n\t}\n\n\t/** @override */\n\tupdateSortOrder(sortOrder) {\n\t\tsuper.updateSortOrder(sortOrder);\n\n\t\t// Update active classes\n\t\tthis.$sort\n\t\t\t.removeClass('ascending descending')\n\t\t\t.addClass(this.sortOrder ? 'descending' : 'ascending');\n\t}\n}\n\nSelectpicker(UserSortView);\n","// Theme 3rd party libs\n// TODO: start defining the selectpicker plugin in each view that will use it - we need to not have the top level Netx.View do this automatically anymore\nimport 'theme-libs/bootstrap-select';\n\n// focus-visible psudo-polyfill\n// for tab stop states\nimport 'focus-visible';\nimport 'classlist-polyfill';\n\nimport _ from 'underscore';\nimport {\n\tcurrentUserMeetsUserLevel,\n\tUserLevel,\n} from '@netx/core-user-next/utils/currentUserMeetsUserLevel';\nimport {adBuilderEnabled} from '@netx/core-ad-builder-next/enablers';\n\n//===========================\n// Underscore\n//===========================\n_.mixin({\n\toverrideDefaultIcon(path, override) {\n\t\tif (!path || (!path.includes('icons/') && !override)) return '';\n\t\treturn (\n\t\t\t'custom-icon-' +\n\t\t\t_.toCamelCase(path.replace(/^\\S+icons\\//, '').replace(/\\.\\S+$/, ''))\n\t\t);\n\t},\n\t/**\n\t * return the brightness of the hex color\n\t * @param {hex} color Hex color '#000000'\n\t * @returns {integer} luma value\n\t */\n\tluma(color) {\n\t\t// strip #\n\t\tvar c = color.substring(1),\n\t\t\t// convert rrggbb to decimal\n\t\t\trgb = parseInt(c, 16),\n\t\t\t// extract red\n\t\t\tr = (rgb >> 16) & 0xff,\n\t\t\t// extract green\n\t\t\tg = (rgb >> 8) & 0xff,\n\t\t\t// extract blue\n\t\t\tb = (rgb >> 0) & 0xff;\n\t\t// per ITU-R BT.709\n\t\treturn 0.2126 * r + 0.7152 * g + 0.0722 * b;\n\t},\n\t/**\n\t * Convert a color to a new shade\n\t * @param {hex} color Hex color '#000000'\n\t * @param {integer} percent Percentage of shading as an integer\n\t * @returns {hex} New shade of color '#000000'\n\t */\n\tbrightenColor(color, percent) {\n\t\tvar f = parseInt(color.slice(1), 16),\n\t\t\tt = percent < 0 ? 0 : 255,\n\t\t\tp = percent < 0 ? percent * -1 : percent,\n\t\t\tR = f >> 16,\n\t\t\tG = (f >> 8) & 0x00ff,\n\t\t\tB = f & 0x0000ff;\n\t\treturn (\n\t\t\t'#' +\n\t\t\t(\n\t\t\t\t0x1000000 +\n\t\t\t\t(Math.round((t - R) * p) + R) * 0x10000 +\n\t\t\t\t(Math.round((t - G) * p) + G) * 0x100 +\n\t\t\t\t(Math.round((t - B) * p) + B)\n\t\t\t)\n\t\t\t\t.toString(16)\n\t\t\t\t.slice(1)\n\t\t);\n\t},\n});\n\n//===========================\n// !Underscore\n//===========================\n\n/**\n * @event netx:app:modules\n * @fires module:netx#netx:load:module\n * @fires module:app#app:ready\n */\ndispatcher.once('netx:app:modules', function () {\n\tconst toLoad = [\n\t\timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-permissions'),\n\t\timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-cart'),\n\t\timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-asset'),\n\t\timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-user'),\n\t\timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-category'),\n\t\timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-search'),\n\t\timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-share'),\n\t];\n\tif (adBuilderEnabled()) {\n\t\tconsole.log('loading ad builder in portal');\n\t\ttoLoad.push(\n\t\t\timport(/* webpackChunkName: \"post-login-app\" */ '@netx/core-ad-builder'),\n\t\t);\n\t}\n\t// Consumers or above (bulk selection uploader)\n\tif (currentUserMeetsUserLevel(UserLevel.CONSUMER)) {\n\t\ttoLoad.push(import(/* webpackChunkName: \"upload\" */ '@netx/core-upload'));\n\t}\n\n\tPromise.all(toLoad).then((modules) => {\n\t\tdispatcher.trigger(\n\t\t\t'netx:load:module',\n\t\t\tmodules.map((m) => m.default),\n\t\t\t{\n\t\t\t\tinitialized() {\n\t\t\t\t\tdispatcher.trigger('app:ready', true);\n\t\t\t\t},\n\t\t\t},\n\t\t);\n\t});\n});\n","const NAME = 'materialMenus';\n\nimport {MDCMenu, Corner} from '@material/menu';\nimport {MDCMenuSurfaceFoundation} from '@material/menu-surface/foundation';\n\nimport {MDCRipple} from '@material/ripple';\n\nimport {purgeEls} from '@netx/core/utils/purgeEls';\nimport {simulateClickBody} from '@netx/core-next/utils/browser';\n\nimport {arrowNavigationPatch} from './patches/mdc-list';\n\nclass Menu {\n\t/**\n\t * @method\n\t */\n\tconstructor(anchorEl, view, opts = {}) {\n\t\tthis.anchorEl = anchorEl;\n\t\tthis.view = view;\n\n\t\tconst el = (this.el = anchorEl.querySelector('.mdc-menu-surface'));\n\t\tconst dropdownToggle = (this.dropdownToggle =\n\t\t\tel.parentElement.querySelector('.menu-button, .dropdown-toggle'));\n\n\t\tthis.hoist =\n\t\t\topts.hoist === true || el.classList.contains('mdc-menu--hoist');\n\t\tthis.horizontal =\n\t\t\topts.horizontal === true || el.classList.contains('mdc-menu--horizontal');\n\t\tthis.destroyOnClose = opts.destroyOnClose === true;\n\n\t\tel.addEventListener(\n\t\t\t'MDCMenuSurface:closed',\n\t\t\t(this.onClosed = this.closed.bind(this)),\n\t\t);\n\t\tel.addEventListener(\n\t\t\t'MDCMenuSurface:opened',\n\t\t\t(this.onOpen = this.opened.bind(this)),\n\t\t);\n\t\tel.addEventListener(\n\t\t\t'MDCList:action',\n\t\t\t(this.onAction = this.itemSelected.bind(this)),\n\t\t);\n\n\t\t// For our \"special\" menus that have dropdown in them\n\t\t// we need to not do this but until the facets refactor to the sidebar\n\t\t// we need this\n\t\t$(el)\n\t\t\t.on('shown.bs.dropdown', () => {\n\t\t\t\tthis.recalculatePosition();\n\t\t\t})\n\t\t\t.on('hidden.bs.dropdown', () => {\n\t\t\t\tthis.recalculatePosition();\n\t\t\t});\n\n\t\tel.addEventListener('click', (this.onClick = this.clicked.bind(this)));\n\t\tel.addEventListener('touchstart', (this.onTap = this.clicked.bind(this)));\n\t\tif (dropdownToggle) {\n\t\t\t// If in an mdc-list-item the ripple gets double applied\n\t\t\tif (!dropdownToggle.closest('.mdc-list-item__meta')) {\n\t\t\t\tthis.ripple = new MDCRipple(dropdownToggle);\n\t\t\t\tthis.ripple.unbounded = true;\n\t\t\t}\n\n\t\t\tdropdownToggle.addEventListener(\n\t\t\t\t'click',\n\t\t\t\t(this.onToggleClick = this.toggleClicked.bind(this)),\n\t\t\t);\n\t\t\tdropdownToggle.addEventListener(\n\t\t\t\t'touchstart',\n\t\t\t\t(this.onToggleTap = this.toggleClicked.bind(this)),\n\t\t\t);\n\t\t\tdropdownToggle.addEventListener(\n\t\t\t\t'keydown',\n\t\t\t\t(this.onToggleKeydown = this.toggleKeyedDown.bind(this)),\n\t\t\t);\n\t\t}\n\n\t\tif (!this.hoist) {\n\t\t\tthis.menu = this.createMenu(el); //new MDCMenu(el);\n\t\t}\n\n\t\tthis._open = false;\n\n\t\tif (\n\t\t\topts.autoOpen === true ||\n\t\t\tel.classList.contains('mdc-menu-surface--auto-open')\n\t\t) {\n\t\t\tthis.open();\n\t\t}\n\t}\n\n\t/** @method */\n\tcleanUp() {\n\t\tif (this.backdrop) {\n\t\t\tdocument.body.removeChild(this.backdrop);\n\t\t\tdelete this.backdrop;\n\t\t}\n\n\t\tconst menu = this.menu;\n\t\tif (!menu) return;\n\n\t\t// Put the element back - would be nice if the mdc-menu-surface did this\n\t\t// maybe they do and i missed it (like a config or whatever)\n\t\tif (this.hoist && menu.menuSurface_.foundation_.isHoistedElement_) {\n\t\t\tthis.anchorEl.appendChild(menu.root_.parentNode.removeChild(menu.root_));\n\t\t}\n\n\t\tmenu.destroy();\n\t\tdelete this.menu;\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `click` event\n\t */\n\tclicked(e) {\n\t\t// When we click on an action our event listeners in core fire\n\t\t// but mdc list items (which live in mdc menus) can be triggered\n\t\t// by `space`, `enter` and `click`\n\t\t// So, when a click occurs we do not want to fire the action off in\n\t\t// here as to not have it fire twice\n\t\t// When we rework our actions we should keep this in mind\n\t\tif (e.target.classList.contains('nx-action')) {\n\t\t\tthis._ignoreItemSelection = true;\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis._ignoreItemSelection = false;\n\t\t\t}, 20);\n\t\t}\n\t}\n\n\t/** @method */\n\tclose() {\n\t\tconst menu = this.menu;\n\t\tif (!menu || !menu.open) return;\n\n\t\tmenu.open = false;\n\t}\n\n\t/** @method */\n\tclosed() {\n\t\tif (!this._open) return;\n\t\tthis._open = false;\n\t\tthis.anchorEl.classList.remove('open');\n\n\t\tif (this.view.onMenuClose) {\n\t\t\tthis.view.onMenuClose(this.menu);\n\t\t}\n\n\t\tif (this.destroyOnClose) {\n\t\t\tthis.destroy();\n\t\t} else if (this.hoist) {\n\t\t\tthis.cleanUp();\n\t\t}\n\t}\n\n\t/** @method */\n\tcreateMenu() {\n\t\tconst menu = (this.menu = new MDCMenu(this.el));\n\t\tarrowNavigationPatch(menu.list_);\n\n\t\t// DAM-15440 - if the menu is open when the view re-renders,\n\t\t// the menu will not reopen, because this.menu.open remains falsely true\n\t\tmenu.open = false;\n\n\t\tif (this.horizontal) {\n\t\t\tmenu.list_.foundation_.setVerticalOrientation(false);\n\t\t}\n\n\t\t// Need to look into mdc's pull request\n\t\t// HACK\n\t\t// Support mobile \"tap\"\n\t\tmenu.menuSurface_.handleBodyTap_ = (evt) => {\n\t\t\treturn menu.menuSurface_.foundation_.handleBodyClick(evt);\n\t\t};\n\t\tmenu.menuSurface_.registerBodyTapListener_ = () => {\n\t\t\treturn document.body.addEventListener(\n\t\t\t\t'touchstart',\n\t\t\t\tmenu.menuSurface_.handleBodyTap_,\n\t\t\t);\n\t\t};\n\t\tmenu.menuSurface_.deregisterBodyTapListener_ = function () {\n\t\t\treturn document.body.removeEventListener(\n\t\t\t\t'touchstart',\n\t\t\t\tmenu.menuSurface_.handleBodyTap_,\n\t\t\t);\n\t\t};\n\t\tmenu.menuSurface_.listen(\n\t\t\tMDCMenuSurfaceFoundation.strings.OPENED_EVENT,\n\t\t\tmenu.menuSurface_.registerBodyTapListener_,\n\t\t);\n\t\tmenu.menuSurface_.listen(\n\t\t\tMDCMenuSurfaceFoundation.strings.CLOSED_EVENT,\n\t\t\tmenu.menuSurface_.deregisterBodyTapListener_,\n\t\t);\n\n\t\t// menu-surface/foundation is not checking if the menu is even open. So, it will\n\t\t// will add the `mdc-menu-surface--open` modifier class and immediately remove it\n\t\t// (as the menu animation does not need to occur), which makes the menu toggle light up\n\t\t// We use thae `mdc-menu-surface--open` to display that a menu toggle is active\n\t\tmenu.menuSurface_.foundation_.close = _.wrap(\n\t\t\tmenu.menuSurface_.foundation_.close,\n\t\t\t(close) => {\n\t\t\t\tif (!menu.open) return;\n\n\t\t\t\t// On mobile we wind up clicking on any element that is behind the menu\n\t\t\t\t// in that click position - do not allow any interactive clicks for 300ms\n\t\t\t\tthis.reEnableTouchEventsTimeout &&\n\t\t\t\t\tclearTimeout(this.reEnableTouchEventsTimeout);\n\t\t\t\tdocument.body.style['pointer-events'] = 'none';\n\n\t\t\t\tthis.reEnableTouchEventsTimeout = setTimeout(() => {\n\t\t\t\t\tdocument.body.style['pointer-events'] = '';\n\t\t\t\t}, 300);\n\n\t\t\t\tclose.call(menu.menuSurface_.foundation_);\n\t\t\t},\n\t\t);\n\n\t\treturn menu;\n\t}\n\n\t/** @method */\n\tdestroy() {\n\t\tif (this.dropdownToggle) {\n\t\t\tthis.dropdownToggle.removeEventListener('click', this.onToggleClick);\n\t\t\tthis.dropdownToggle.removeEventListener('touchstart', this.onToggleTap);\n\t\t\tdelete this.dropdownToggle;\n\t\t}\n\n\t\tthis.cleanUp();\n\t\tdelete this.menu;\n\n\t\tthis.ripple && this.ripple.destroy();\n\n\t\tconst el = this.el;\n\t\tel.removeEventListener('click', this.onClick);\n\t\tel.removeEventListener('touchstart', this.onTap);\n\t\tel.removeEventListener('MDCList:action', this.onAction);\n\t\tel.removeEventListener('MDCMenuSurface:closed', this.onClosed);\n\t\tel.removeEventListener('MDCMenuSurface:opened', this.onOpen);\n\t\t$(el).off('.bs.dropdown');\n\n\t\tdelete this.anchorEl;\n\t\tdelete this.el;\n\t\tdelete this.view;\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `MDCList:action` event\n\t */\n\titemSelected(e) {\n\t\t// Defer because our `click` event comes immediately after `MDCList:action`\n\t\t// we want to know if it was via a `click` or other (`space`, `enter`)\n\t\t_.defer(() => {\n\t\t\tif (!this._ignoreItemSelection) {\n\t\t\t\tconst item = this.menu.list_.listElements[e.detail.index];\n\t\t\t\tif (!item || !item.classList.contains('nx-action')) {\n\t\t\t\t\tif (this.view.onMenuItemSelect) {\n\t\t\t\t\t\tthis.view.onMenuItemSelect(item, this.menu);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Pass along to our action event handler\n\t\t\t\tconst evt = new MouseEvent('click', {\n\t\t\t\t\tbubbles: false,\n\t\t\t\t\tcancelable: true,\n\t\t\t\t\tview: window,\n\t\t\t\t});\n\t\t\t\titem.dispatchEvent(evt);\n\t\t\t}\n\t\t});\n\t}\n\n\t/** @method */\n\topen() {\n\t\tconst el = this.el;\n\t\tlet menu = this.menu;\n\n\t\tsimulateClickBody();\n\n\t\tif (menu && menu.open) return;\n\n\t\tif (this.hoist) {\n\t\t\tmenu = this.createMenu();\n\t\t\tmenu.setFixedPosition(true);\n\t\t\tmenu.setAnchorCorner(Corner.BOTTOM_START);\n\t\t\tmenu.hoistMenuToBody();\n\n\t\t\tconst backdrop = (this.backdrop = document.createElement('div'));\n\t\t\tbackdrop.classList.add('mdc-menu-backdrop');\n\t\t\tdocument.body.appendChild(backdrop);\n\n\t\t\tconst cancelItem = el.querySelector('.mdc-list-item.cancel');\n\t\t\tcancelItem &&\n\t\t\t\tcancelItem.classList.toggle(\n\t\t\t\t\t'mdc-list-item--disabled',\n\t\t\t\t\twindow.innerWidth >= 767,\n\t\t\t\t);\n\t\t}\n\n\t\tif (!menu || menu.open) return;\n\n\t\tthis.reEnableTouchEventsTimeout &&\n\t\t\tclearTimeout(this.reEnableTouchEventsTimeout);\n\t\tmenu.root_.style['pointer-events'] = 'none';\n\n\t\tmenu.open = true;\n\t}\n\n\t/** @method */\n\topened() {\n\t\tif (this._open) return;\n\n\t\tconst menu = this.menu;\n\n\t\tthis._open = true;\n\t\tthis.anchorEl.classList.add('open');\n\n\t\tif (this.view.onMenuOpen) {\n\t\t\tthis.view.onMenuOpen(menu);\n\t\t}\n\n\t\t// keyboard accessibility\n\t\tmenu.items.length && menu.items[0].focus();\n\n\t\tthis.reEnableTouchEventsTimeout &&\n\t\t\tclearTimeout(this.reEnableTouchEventsTimeout);\n\t\tthis.reEnableTouchEventsTimeout = setTimeout(() => {\n\t\t\tmenu.root_.style['pointer-events'] = '';\n\t\t}, 300);\n\t}\n\n\t/** @method */\n\trecalculatePosition() {\n\t\tif (!this.menu || !this._open) return;\n\t\tconst menuSurface = this.menu.menuSurface_.foundation_;\n\t\tmenuSurface.dimensions_ = menuSurface.adapter_.getInnerDimensions();\n\t\tmenuSurface.autoPosition_();\n\t}\n\n\t/** @method */\n\ttoggle() {\n\t\tconst menu = this.menu;\n\t\t!menu || !menu.open ? this.open() : this.close();\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `click` event\n\t */\n\ttoggleClicked(e) {\n\t\te.preventDefault();\n\t\te.stopPropagation();\n\n\t\tthis.open();\n\t}\n\t/**\n\t * @method\n\t * @param {event} e `keydown` event\n\t * open menus with enter/space\n\t *\n\t * todo: remove with react\n\t */\n\ttoggleKeyedDown(e) {\n\t\tconst code = e.which;\n\t\t// space or enter\n\t\tif (code === 13 || code === 32) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\tif (e.currentTarget.classList.contains('menu-button')) {\n\t\t\t\t$(e.currentTarget).trigger('click.data-action-context');\n\t\t\t} else {\n\t\t\t\tthis.toggle();\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport default function (target) {\n\tif (!target || target.hasFunctionality(NAME)) return target;\n\n\ttarget.addInitializer((instance, opts = {}) => {\n\t\tlet materialMenus = [];\n\n\t\tconst cleanUp = () => {\n\t\t\t_.invoke(materialMenus, 'destroy');\n\t\t\tmaterialMenus = [];\n\t\t};\n\n\t\tinstance.addMaterialMenu = (el, show) => {\n\t\t\tconst menu = new Menu(el, instance);\n\t\t\tmaterialMenus.push(menu);\n\t\t\tshow && menu.open();\n\t\t};\n\n\t\t// Hey, listen!\n\t\tinstance\n\t\t\t.on('preRenderHook', cleanUp)\n\t\t\t.on('removeHook', cleanUp)\n\t\t\t.on('renderedHook', () => {\n\t\t\t\tconst el = instance.el;\n\t\t\t\tconst els = el.classList.contains('mdc-menu-surface--anchor')\n\t\t\t\t\t? [el]\n\t\t\t\t\t: purgeEls(\n\t\t\t\t\t\t\t[...instance.el.querySelectorAll('.mdc-menu-surface--anchor')],\n\t\t\t\t\t\t\tinstance.getExcludedViews(),\n\t\t\t\t\t );\n\t\t\t\tmaterialMenus = els.map((anchorEl) => {\n\t\t\t\t\treturn new Menu(anchorEl, instance, opts.materialMenus);\n\t\t\t\t});\n\t\t\t});\n\t}, NAME);\n\n\treturn target;\n}\n","import {cssClasses, strings} from '@material/list/constants';\n\n/**\n * As of v2 they stopped checking disabled items\n * I can understand this from an accessibility standpoint, in a world where disabled items are visible\n * but in our theme we hide disabled list tiems from the user\n * @function\n * @param {MDCList} list Instance of mdc-list\n */\nexport const arrowNavigationPatch = (list) => {\n\t// Do not patch twice\n\tif (!list || list.arrowNavaigationPatched_) return;\n\n\tlist.arrowNavaigationPatched_ = true;\n\n\tconst foundation = list.foundation_;\n\n\tfoundation.focusPrevElement = _.wrap(\n\t\tfoundation.focusPrevElement,\n\t\t(focusPrevElement, index) => {\n\t\t\tlet prevIndex = index - 1;\n\t\t\tif (prevIndex < 0) {\n\t\t\t\t// Return early because first item is already focused.\n\t\t\t\tif (!foundation.wrapFocus_) return index;\n\t\t\t\tprevIndex = foundation.adapter_.getListItemCount() - 1;\n\t\t\t}\n\n\t\t\t// Skip disabled items\n\t\t\tconst listItemEl = list.listElements[prevIndex];\n\t\t\tif (\n\t\t\t\tlistItemEl &&\n\t\t\t\tlistItemEl.classList.contains(cssClasses.LIST_ITEM_DISABLED_CLASS)\n\t\t\t) {\n\t\t\t\treturn foundation.focusPrevElement(prevIndex);\n\t\t\t}\n\n\t\t\t// Carry on\n\t\t\treturn focusPrevElement.call(foundation, index);\n\t\t},\n\t);\n\n\tfoundation.focusNextElement = _.wrap(\n\t\tfoundation.focusNextElement,\n\t\t(focusNextElement, index) => {\n\t\t\tconst count = foundation.adapter_.getListItemCount();\n\t\t\tlet nextIndex = index + 1;\n\t\t\tif (nextIndex >= count) {\n\t\t\t\t// Return early because last item is already focused.\n\t\t\t\tif (!foundation.wrapFocus_) return index;\n\t\t\t\tnextIndex = 0;\n\t\t\t}\n\n\t\t\t// Skip disabled items\n\t\t\tconst listItemEl = list.listElements[nextIndex];\n\t\t\tif (\n\t\t\t\tlistItemEl &&\n\t\t\t\tlistItemEl.classList.contains(cssClasses.LIST_ITEM_DISABLED_CLASS)\n\t\t\t) {\n\t\t\t\treturn foundation.focusNextElement(nextIndex);\n\t\t\t}\n\n\t\t\t// Carry on\n\t\t\treturn focusNextElement.call(foundation, index);\n\t\t},\n\t);\n};\n\n/**\n * https://github.com/material-components/material-components-web/issues/4696\n * @function\n * @param {MDCList} list MDCList\n */\nexport const disabledListItemCheckboxPatch = (list) => {\n\t// Do not patch twice\n\tif (!list || list.disabledListItemCheckboxPatched_) return;\n\n\tlist.prototype.initializeListType = _.wrap(\n\t\tlist.prototype.initializeListType,\n\t\tfunction (initializeListType) {\n\t\t\tconst foundation = this.foundation_;\n\t\t\tconst adapter = foundation.adapter_;\n\n\t\t\tadapter.setCheckedCheckboxOrRadioAtIndex = (index, isChecked) => {\n\t\t\t\tconst listItem = this.listElements[index];\n\t\t\t\tconst toggleEl = listItem.querySelector(\n\t\t\t\t\tstrings.CHECKBOX_RADIO_SELECTOR,\n\t\t\t\t);\n\t\t\t\t// This is all this was overriden for\n\t\t\t\tif (!toggleEl) return;\n\n\t\t\t\ttoggleEl.checked = isChecked;\n\t\t\t\tconst event = document.createEvent('Event');\n\t\t\t\tevent.initEvent('change', true, true);\n\t\t\t\ttoggleEl.dispatchEvent(event);\n\t\t\t};\n\n\t\t\treturn initializeListType.call(this);\n\t\t},\n\t);\n};\n","const NAME = 'selectpicker';\n\nimport 'theme-libs/bootstrap-select';\nimport 'theme-libs/bootstrap-select-netx';\n\nimport {icon} from '@fortawesome/fontawesome-svg-core';\nimport {faCaretDown} from '@fortawesome/pro-solid-svg-icons';\nimport {purgeEls} from '@netx/core/utils/purgeEls';\nimport {isMobile} from '@netx/core-next/utils/browser';\n\nconst icons = {\n\tfaCaretDown: icon(faCaretDown).html,\n};\n\nconst Props = {\n\t/** @method */\n\trefreshSelectpicker($el) {\n\t\tthis.Plugins.Update('selectpicker', $el);\n\t},\n};\n\nexport default function (target) {\n\tif (!target || target.hasFunctionality(NAME)) return target;\n\n\ttarget.extendFunctionality(Props);\n\n\ttarget.addInitializer((instance, opts = {}) => {\n\t\t// Selectpicker\n\t\tinstance.Plugins.Register({\n\t\t\tselectpicker: {\n\t\t\t\tname: 'selectpicker',\n\t\t\t\tmultiple: true,\n\t\t\t\tupdateMethod: 'refresh',\n\t\t\t\toptions: {\n\t\t\t\t\tstyleBase: 'mdc-button',\n\t\t\t\t\tdoneButtonText: instance.doneButtonText || 'done',\n\t\t\t\t\tstyle: '',\n\t\t\t\t\tcontainer: 'body',\n\t\t\t\t\tliveSearch: !isMobile(),\n\t\t\t\t\tnoneSelectedText: i18n.t('i18n.nothingSelected'),\n\t\t\t\t\t// This will be followed by \"search term\"\n\t\t\t\t\tnoneResultsText: i18n.t('i18n.noResultsMatchThing'),\n\t\t\t\t\ttemplate: {\n\t\t\t\t\t\tcaret: icons.faCaretDown,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\t// Hey, listen!\n\t\tinstance\n\t\t\t.on('preRenderHook', () => {\n\t\t\t\tinstance.Plugins.Destroy('selectpicker');\n\t\t\t})\n\t\t\t.on('postRenderHook', () => {\n\t\t\t\t// See if view wants to pass additional options at plugin init\n\t\t\t\tconst opts =\n\t\t\t\t\ttypeof instance.selectPickerOptions === 'function'\n\t\t\t\t\t\t? instance.selectPickerOptions()\n\t\t\t\t\t\t: instance.selectPickerOptions || {};\n\n\t\t\t\tinstance.Plugins.Initialize(\n\t\t\t\t\t'selectpicker',\n\t\t\t\t\tpurgeEls(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t...instance.el.querySelectorAll(\n\t\t\t\t\t\t\t\t'.selectpicker:not([data-autocomplete])',\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tinstance.getExcludedViews(),\n\t\t\t\t\t),\n\t\t\t\t\topts,\n\t\t\t\t);\n\t\t\t});\n\t}, NAME);\n\n\treturn target;\n}\n","import {getUserLevel} from '@netx/core-user-next/utils/getUserLevel';\n\n/**\n * Manage plugins on a single view's instance\n * @class\n * @param {Netx.View} view View to store plugins on\n * @example\n * {\n * pluginUniqueNameForView: {\n * name : 'tooltip', // The name of the plugin. Used for intializing\n * dataAlias : 'bs.tooltip', // The name of the data the plugin stores on the element, if it differs from the name\n * enablerTest : function() {}, // Just like actions\n * userLevel : 8, // Just like actions\n * multiple : true, // Should we allow multiple instances of this plugin on the view (default is false),\n * destroyMethod : 'destroy', // If the plugin's destroy method name differs from `destroy` - can also be a function (the instance will be the only parameter)\n * initializeMethod : 'initialize', // If the plugin's initialize method name differs from `initialize` - can also be a function (passes the plugin object, the $el, the init options, and a callback - the instance you create must be returned to this callback)\n * updateMethod : 'update', // If the plugin's update method name differs from `update`\n * elementKey : 'container', // If the plugin's element key differs from '$el'\n * options : {\n * // Plugin options\n * placement: 'top'\n * }\n * }\n * }\n */\nconst extendPlugin = (plugin, opts) => {\n\tconst pluginOptions = {...plugin.options, ...opts.options};\n\tObject.assign(plugin, opts);\n\tplugin.options = pluginOptions;\n};\n\nexport default function (view) {\n\t/** @lends Netx.Plugins */\n\tvar plugins = {},\n\t\tpublicMethods = {};\n\t/**\n\t * Extend modifications onto exisiting plugin\n\t * @method\n\t * @public\n\t * @param {object} plugin An object of plugin(s)\n\t * @param {object} opts Options (not used currently)\n\t */\n\tfunction Extend(plugin, opts) {\n\t\topts = opts || {};\n\t\tplugin = plugin || {};\n\t\t// Loop over passed plugins and extend to existing\n\t\t_.each(plugin, function (p, k) {\n\t\t\tif (!_.isUndefined(plugins[k])) {\n\t\t\t\textendPlugin(plugins[k], p);\n\t\t\t} else {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'The plugin ' +\n\t\t\t\t\t\tk +\n\t\t\t\t\t\t' has not been defined. Please use `register` in place of `extend`.',\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t// Chain to public methods\n\t\treturn publicMethods;\n\t}\n\t/**\n\t * Find plugin(s) by name\n\t * @method\n\t * @public\n\t * @param {array|string} name Plugin name (key, name, dataAlias)\n\t * @return {array|boolean|object}\n\t */\n\tfunction Find(name) {\n\t\t// Just to make things easier - assume array\n\t\tif (!_.isArray(name)) name = [name];\n\n\t\tvar returnData = [];\n\t\t// Loop over plugin names\n\t\t_.each(name, function (n) {\n\t\t\t// It weas the key\n\t\t\tif (plugins[n]) {\n\t\t\t\treturnData.push(plugins[n]);\n\t\t\t}\n\t\t\t// It was not the key, try the name and alias\n\t\t\telse {\n\t\t\t\t_.each(plugins, function (plugin) {\n\t\t\t\t\tif (plugin.name === n || plugin.dataAlias === n) {\n\t\t\t\t\t\treturnData.push(plugin);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Just return false and not an empty array\n\t\tif (!returnData.length) {\n\t\t\treturn false;\n\t\t}\n\t\t// If a single result, unwrap it from array\n\t\treturn returnData.length > 1 ? returnData : returnData[0];\n\t}\n\t/**\n\t * Get plugin(s) instance by name\n\t * @method\n\t * @public\n\t * @param {array|string} name Plugin name (key, name, dataAlias)\n\t * @param {element} $el Element to get plugin instance on\n\t * @return {array|boolean|object}\n\t */\n\tfunction GetInstance(name, $el) {\n\t\tvar plugin = Find(name);\n\t\tif (plugin && plugin.instance) {\n\t\t\tif (_.isArray(plugin.instance)) {\n\t\t\t\tif ($el) {\n\t\t\t\t\treturn _.filter(plugin.instance, function (instance) {\n\t\t\t\t\t\tvar el = instance[plugin.elementKey || '$el'];\n\t\t\t\t\t\tif (el) {\n\t\t\t\t\t\t\treturn el instanceof jQuery ? el.is($el) : el == $el;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn plugin.instance;\n\t\t}\n\t\treturn false;\n\t}\n\t/**\n\t * Register plugin(s)\n\t * @method\n\t * @public\n\t * @param {object} plugin An object of plugin(s)\n\t * @param {object} opts Options (not used currently)\n\t */\n\tfunction Register(plugin, opts) {\n\t\topts = opts || {};\n\t\tplugin = plugin || {};\n\n\t\t// Loop over passed plugins and add if not already defined\n\t\t_.each(plugin, function (p, k) {\n\t\t\tif (_.isUndefined(plugins[k])) {\n\t\t\t\tplugins[k] = p;\n\t\t\t} else {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'The plugin ' +\n\t\t\t\t\t\tk +\n\t\t\t\t\t\t' has already been defined. Please use `extend` in place of `register`.',\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\t// Chain to public methods\n\t\treturn publicMethods;\n\t}\n\t/**\n\t * Remove plugin(s)\n\t * @method\n\t * @public\n\t * @param {string} name Actual key name for plugin (the key, not the name/dataAlias)\n\t */\n\tfunction Remove(name) {\n\t\tif (_.isArray(name)) {\n\t\t\t_.each(name, Remove);\n\t\t} else if (plugins[name]) {\n\t\t\tdelete plugins[name];\n\t\t}\n\n\t\t// Chain to public methods\n\t\treturn publicMethods;\n\t}\n\n\t/**\n\t * Destroy plugin instance(s)\n\t * @method\n\t * @public\n\t * @param {string} name Plugin name (key, name, dataAlias)\n\t * @param {element} $el Element to destroy plugin on\n\t */\n\tfunction Destroy(name, $el) {\n\t\t// Destroy them all if nothing was passed\n\t\tif (!arguments.length) {\n\t\t\t_.each(plugins, function (p) {\n\t\t\t\tdestroyPlugin(p);\n\t\t\t});\n\t\t} else {\n\t\t\t// Multiple plugins to destroy\n\t\t\tif (_.isArray(name)) {\n\t\t\t\t_.each(name, function (n) {\n\t\t\t\t\tDestroy(n, $el);\n\t\t\t\t});\n\t\t\t}\n\t\t\t// Single plugin to destroy\n\t\t\telse {\n\t\t\t\tvar plugin = Find(name);\n\t\t\t\tif (!plugin) {\n\t\t\t\t\t// console.warn( \"The plugin \" + name + \" has not been defined. Cannot destroy what does not exist.\" );\n\t\t\t\t} else if (plugin.length) {\n\t\t\t\t\t_.each(plugin, function (p) {\n\t\t\t\t\t\tdestroyPlugin(p, $el);\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tdestroyPlugin(plugin, $el);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Chain to public methods\n\t\treturn publicMethods;\n\t}\n\t/**\n\t * Initialize plugin instance(s)\n\t * @method\n\t * @public\n\t * @param {array|string} name Plugin name (key, name, dataAlias)\n\t * @param {element} $el Element to initialize plugin on\n\t * @param {object} opts Additional plugin options (support for passing custom options at init that may or may not be the same in the registered options)\n\t * @return {promise}\n\t */\n\tfunction Initialize(name, $el, opts) {\n\t\tvar d = new $.Deferred(),\n\t\t\tpromises = [];\n\t\t// Multiple plugins to init\n\t\tif (_.isArray(name)) {\n\t\t\t_.each(name, function (n) {\n\t\t\t\tvar plugin = Find(n);\n\t\t\t\tif (!plugin) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t'The plugin ' +\n\t\t\t\t\t\t\tn +\n\t\t\t\t\t\t\t' has not been defined. Please use `register` prior to intializing.',\n\t\t\t\t\t);\n\t\t\t\t} else if (plugin.length) {\n\t\t\t\t\t_.each(\n\t\t\t\t\t\tplugin,\n\t\t\t\t\t\tfunction (p) {\n\t\t\t\t\t\t\tpromises.push(initializePlugin(p, $el, opts));\n\t\t\t\t\t\t},\n\t\t\t\t\t\tthis,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tpromises.push(initializePlugin(plugin, $el, opts));\n\t\t\t\t}\n\t\t\t});\n\t\t\t$.when.apply($, promises).then(function (instances) {\n\t\t\t\td.resolveWith(view, instances);\n\t\t\t});\n\t\t\treturn d.promise();\n\t\t}\n\n\t\t// Single plugin to init\n\t\tvar plugin = Find(name);\n\t\tif (!plugin) {\n\t\t\tconsole.warn(\n\t\t\t\t'The plugin ' +\n\t\t\t\t\tname +\n\t\t\t\t\t' has not been defined. Please use `register` prior to intializing.',\n\t\t\t);\n\t\t} else if (plugin.length) {\n\t\t\t_.each(\n\t\t\t\tplugin,\n\t\t\t\tfunction (p) {\n\t\t\t\t\tpromises.push(initializePlugin(p, $el, opts));\n\t\t\t\t},\n\t\t\t\tthis,\n\t\t\t);\n\t\t\t$.when.apply($, promises).then(function (instances) {\n\t\t\t\td.resolveWith(view, instances);\n\t\t\t});\n\t\t\treturn d.promise();\n\t\t} else {\n\t\t\treturn initializePlugin(plugin, $el, opts);\n\t\t}\n\t}\n\t/**\n\t * Update plugin(s) instance(s)\n\t * @method\n\t * @public\n\t * @param {string} name Plugin name (key, name, dataAlias)\n\t * @param {element} $el Element to update plugin on\n\t * @param {object} opts Additional plugin update arguments\n\t */\n\tfunction Update(name, $el, args) {\n\t\tvar plugin = Find(name);\n\t\tif (!plugin) {\n\t\t\tconsole.warn(\n\t\t\t\t'The plugin ' +\n\t\t\t\t\tname +\n\t\t\t\t\t' has not been defined. Cannot update that which does not exist.',\n\t\t\t);\n\t\t} else if (plugin.length) {\n\t\t\t_.each(\n\t\t\t\tplugin,\n\t\t\t\tfunction (p) {\n\t\t\t\t\tupdatePlugin(p, $el, args);\n\t\t\t\t},\n\t\t\t\tthis,\n\t\t\t);\n\t\t} else {\n\t\t\tupdatePlugin(plugin, $el, args);\n\t\t}\n\n\t\t// Chain to public methods\n\t\treturn publicMethods;\n\t}\n\n\t/**\n\t * Invoke a method on plugin(s) instance(s)\n\t * @method\n\t * @public\n\t * @param {string} name Plugin name (key, name, dataAlias)\n\t * @param {element} $el Element to update plugin on\n\t * @param {string} methodName The method to invoke\n\t * @param {object} opts Additional plugin update arguments\n\t */\n\tfunction Invoke(name, $el, methodName, args) {\n\t\t// Redirect access to these methods\n\t\tswitch (methodName) {\n\t\t\tcase 'destroy':\n\t\t\t\treturn Destroy(name, $el);\n\t\t\tcase 'init':\n\t\t\tcase 'initialize':\n\t\t\t\treturn Initialize(name, $el, args);\n\t\t\tcase 'update':\n\t\t\t\treturn Update(name, $el, args);\n\t\t}\n\n\t\tvar plugin = Find(name);\n\t\tif (!plugin) {\n\t\t\tconsole.warn(\n\t\t\t\t'The plugin ' +\n\t\t\t\t\tname +\n\t\t\t\t\t' has not been defined. Cannot invoke `' +\n\t\t\t\t\tmethodName +\n\t\t\t\t\t'` that which does not exist.',\n\t\t\t);\n\t\t} else if (plugin.length) {\n\t\t\t_.each(\n\t\t\t\tplugin,\n\t\t\t\tfunction (p) {\n\t\t\t\t\tinvokePluginMethod(p, $el, methodName, args);\n\t\t\t\t},\n\t\t\t\tthis,\n\t\t\t);\n\t\t} else {\n\t\t\tinvokePluginMethod(plugin, $el, methodName, args);\n\t\t}\n\n\t\t// Chain to public methods\n\t\treturn publicMethods;\n\t}\n\n\t/**\n\t * Destroy a plugin instance (if created)\n\t * @method\n\t * @private\n\t * @param {object} plugin Plugin object (with options and instance etc)\n\t * @param {element} $el Element to destroy plugin on\n\t */\n\tfunction destroyPlugin(plugin, $el) {\n\t\t// Destroy helper\n\t\tfunction _destroy(instance) {\n\t\t\tif (instance) {\n\t\t\t\t// Allow for a user defined destroy method callback\n\t\t\t\t// The instance gets passed as the only argument to the callback\n\t\t\t\tif (plugin.destroyMethod && _.isFunction(plugin.destroyMethod)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tplugin.destroyMethod.call(view, instance);\n\t\t\t\t\t} catch (ex) {}\n\t\t\t\t}\n\t\t\t\t// Allow for a user defined destroy method string (the name of the method on the plugin differs from 'destroy')\n\t\t\t\telse if (\n\t\t\t\t\tplugin.destroyMethod &&\n\t\t\t\t\t_.isFunction(instance[plugin.destroyMethod])\n\t\t\t\t) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tinstance[plugin.destroyMethod]();\n\t\t\t\t\t} catch (ex) {}\n\t\t\t\t}\n\t\t\t\t// Classic destruction\n\t\t\t\telse if (_.isFunction(instance.destroy)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t// Some plugins do not play by the rules *cough* jQuery.sortable *cough*\n\t\t\t\t\t\tif (instance instanceof jQuery) {\n\t\t\t\t\t\t\tinstance[plugin.name]('destroy');\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tinstance.destroy();\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (ex) {}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Have a plugin and it has an instance(s)\n\t\tif (plugin && plugin.instance) {\n\t\t\t// We want to destroy a specific instance\n\t\t\tif ($el && _.isArray(plugin.instance)) {\n\t\t\t\t// Get the index of our instance\n\t\t\t\tvar idx = _.indexOf(\n\t\t\t\t\tplugin.instance,\n\t\t\t\t\t$el.data(plugin.dataAlias || plugin.name),\n\t\t\t\t);\n\t\t\t\tif (idx > -1) {\n\t\t\t\t\t_destroy(plugin.instance[idx]);\n\t\t\t\t\tplugin.instance.splice(idx, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// We want to destroy all instances\n\t\t\telse {\n\t\t\t\t// This has multiple instances\n\t\t\t\tif (_.isArray(plugin.instance)) {\n\t\t\t\t\t_.each(plugin.instance, _destroy);\n\t\t\t\t}\n\t\t\t\t// Just a single instance\n\t\t\t\telse {\n\t\t\t\t\t_destroy(plugin.instance);\n\t\t\t\t}\n\t\t\t\tdelete plugin.instance;\n\t\t\t}\n\t\t} else {\n\t\t\t// Let them know there was no instance to destroy?\n\t\t}\n\t}\n\t/**\n\t * Initialize a plugin instance\n\t * This returns a promise in case there is anything async we need to do before the plugin can be initialized\n\t * Upon successful initialization we (helpfully) pass back the new plugin instance\n\t * @method\n\t * @private\n\t * @param {object} plugin Plugin object (with options and instance etc)\n\t * @param {element} $el Element to initialize plugin on\n\t * @param {object} options Instance specific options (additional options that will get applied on top of any previosuly defined global options for the plugin init)\n\t *\n\t * @return {array|object} Plugin instance(s)\n\t */\n\tfunction initializePlugin(plugin, $el, options) {\n\t\tvar d = new $.Deferred();\n\t\t// If an $el was not specified assume this view's $el\n\t\t$el = $($el) || view.$el;\n\t\t// Make sure we:\n\t\t// Have a plugin\n\t\t// And that plugin has a name\n\t\t// And that we have an element to initialize the plugin on\n\t\tif (plugin && plugin.name && $el.length) {\n\t\t\t// If an instance already exists, destroy it\n\t\t\tif (plugin.instance) {\n\t\t\t\tdestroyPlugin(plugin, $el);\n\t\t\t}\n\t\t\t// If the plugin can have mutliple instances, `plugin.instance` needs to be an array\n\t\t\tif (plugin.multiple && !_.isArray(plugin.instance)) {\n\t\t\t\tplugin.instance = [];\n\t\t\t}\n\n\t\t\t// TODO: when we refactor actions to have more broken out methods we will not need to recreate the tests here\n\t\t\t// If user level is defined and the user level is not met - invalid\n\t\t\tvar valid = !(\n\t\t\t\t!_.isUndefined(plugin.userLevel) && getUserLevel() < plugin.userLevel\n\t\t\t);\n\t\t\t// Check against any enablerTests\n\t\t\tif (valid && plugin.enablerTest) {\n\t\t\t\tvar tests = _.isArray(plugin.enablerTest)\n\t\t\t\t\t? plugin.enablerTest\n\t\t\t\t\t: [plugin.enablerTest];\n\t\t\t\t_.each(\n\t\t\t\t\ttests,\n\t\t\t\t\tfunction (t) {\n\t\t\t\t\t\tif (valid && _.isFunction(t)) valid = t(view);\n\t\t\t\t\t},\n\t\t\t\t\tview,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// If we are still good - initialize plugin\n\t\t\tif (valid) {\n\t\t\t\tvar instances;\n\t\t\t\t// Allow for a user defined intialize method callback\n\t\t\t\t// We pass the plugin object, the element, options and our deferred\n\t\t\t\t// It is the responsibility of the custom initializeMethod:\n\t\t\t\t// To store the instance (via push if mutliple)\n\t\t\t\t// To resolve the deferred and pass back the new instance\n\t\t\t\tif (_.isFunction(plugin.initializeMethod)) {\n\t\t\t\t\tif (plugin.multiple) {\n\t\t\t\t\t\tvar promises = [];\n\n\t\t\t\t\t\tinstances = [];\n\t\t\t\t\t\t_.each($el, function (_el) {\n\t\t\t\t\t\t\tvar p = new $.Deferred();\n\t\t\t\t\t\t\tpromises.push(p);\n\t\t\t\t\t\t\t// We pass the plugin object\n\t\t\t\t\t\t\tplugin.initializeMethod.call(\n\t\t\t\t\t\t\t\tview,\n\t\t\t\t\t\t\t\tplugin,\n\t\t\t\t\t\t\t\t$(_el),\n\t\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\t\tfunction (instance) {\n\t\t\t\t\t\t\t\t\tinstances.push(instance);\n\t\t\t\t\t\t\t\t\tp.resolve();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t\t$.when.apply($, promises).then(function () {\n\t\t\t\t\t\t\t// Concat multiple instances\n\t\t\t\t\t\t\tplugin.instance = plugin.instance.concat(instances);\n\t\t\t\t\t\t\t// Resolve and pass instances back\n\t\t\t\t\t\t\td.resolveWith(view, [instances]);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tplugin.initializeMethod.call(\n\t\t\t\t\t\t\tview,\n\t\t\t\t\t\t\tplugin,\n\t\t\t\t\t\t\t$el,\n\t\t\t\t\t\t\toptions,\n\t\t\t\t\t\t\tfunction (instance) {\n\t\t\t\t\t\t\t\tplugin.instance = instance;\n\t\t\t\t\t\t\t\td.resolveWith(view, [instance]);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Classic init\n\t\t\t\telse {\n\t\t\t\t\t// DAM-6666: S2 demands we update our templates all over creation, but at least now we get a warning.\n\t\t\t\t\tif (plugin.name == 'select2' && !$el.is('select')) {\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t'applying select2 to non-SELECT element -- this will not work.',\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tvar pluginReturn;\n\t\t\t\t\t// Assume it some oddball plugin, like typeahead, that wants multiple parameters and not just a single object\n\t\t\t\t\tif (_.isArray(options)) {\n\t\t\t\t\t\tpluginReturn = $el[plugin.name].apply($el, options);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Extend the passed options on top of the default options (defined vie `Register` or `Extend`)\n\t\t\t\t\t\tpluginReturn = $el[plugin.name](\n\t\t\t\t\t\t\t_.extend({}, plugin.options || {}, options || {}),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (plugin.multiple) {\n\t\t\t\t\t\tinstances = _.map($el, function (_el) {\n\t\t\t\t\t\t\tvar _$el = $(_el);\n\t\t\t\t\t\t\t// Fallback on the _el if data is not found\n\t\t\t\t\t\t\treturn _$el.data(plugin.dataAlias || plugin.name) || _$el;\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// Concat multiple instances\n\t\t\t\t\t\tplugin.instance = plugin.instance.concat(instances);\n\t\t\t\t\t\t// Resolve and pass instances back\n\t\t\t\t\t\td.resolveWith(view, [instances]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Set single instance\n\t\t\t\t\t\t// Fallback on the return of the plugin initialize if data is not found\n\t\t\t\t\t\tplugin.instance =\n\t\t\t\t\t\t\t$el.data(plugin.dataAlias || plugin.name) || pluginReturn;\n\t\t\t\t\t\td.resolveWith(view, [plugin.instance]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Invalid\n\t\t\t\td.reject();\n\t\t\t}\n\t\t} else {\n\t\t\t// Let them know things are missing?\n\t\t\td.reject();\n\t\t}\n\t\treturn d.promise();\n\t}\n\t/**\n\t * Invoke a plugin instance method (if created)\n\t * @method\n\t * @private\n\t * @param {object} plugin Plugin object (with options and instance etc)\n\t * @param {element} $el Element to invoke the plugin method on\n\t * @param {mixed} args Anything to pass to the update method\n\t */\n\tfunction invokePluginMethod(plugin, $el, methodName, args) {\n\t\t// Invoke helper\n\t\tfunction _invoke(instance) {\n\t\t\tinstance &&\n\t\t\t\t_.isFunction(instance[methodName]) &&\n\t\t\t\tinstance[methodName].apply(instance, args);\n\t\t}\n\n\t\tif (plugin && plugin.instance) {\n\t\t\t// We want to update a specific instance\n\t\t\tif ($el) {\n\t\t\t\tif (_.isArray(plugin.instance)) {\n\t\t\t\t\tvar idx = _.indexOf(\n\t\t\t\t\t\tplugin.instance,\n\t\t\t\t\t\t$el.data(plugin.dataAlias || plugin.name),\n\t\t\t\t\t);\n\t\t\t\t\tidx > -1 && _invoke(plugin.instance[idx]);\n\t\t\t\t} else {\n\t\t\t\t\t_invoke(plugin.instance);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (_.isArray(plugin.instance)) {\n\t\t\t\t\t_.each(plugin.instance, _invoke);\n\t\t\t\t} else {\n\t\t\t\t\t_invoke(plugin.instance);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t * Update a plugin instance (if created)\n\t * @method\n\t * @private\n\t * @param {object} plugin Plugin object (with options and instance etc)\n\t * @param {element} $el Element to update the plugin on\n\t * @param {mixed} args Anything to pass to the update method\n\t */\n\tfunction updatePlugin(plugin, $el, args) {\n\t\t// Update helper\n\t\tfunction _update(instance) {\n\t\t\tif (instance) {\n\t\t\t\t// Support for custom update method name\n\t\t\t\tif (\n\t\t\t\t\tplugin.updateMethod &&\n\t\t\t\t\t_.isFunction(instance[plugin.updateMethod])\n\t\t\t\t) {\n\t\t\t\t\tinstance[plugin.updateMethod].apply(instance, args);\n\t\t\t\t}\n\t\t\t\t// Default update method\n\t\t\t\telse if (_.isFunction(instance.update)) {\n\t\t\t\t\tinstance.update.apply(instance, args);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar instance, idx;\n\t\tif (plugin && plugin.instance) {\n\t\t\t// We want to update an instance on a specific $el\n\t\t\tif ($el) {\n\t\t\t\t// An array of instances (multiple)\n\t\t\t\tif (_.isArray(plugin.instance)) {\n\t\t\t\t\t// Find specific instance of $el plugin in instances\n\t\t\t\t\tidx = _.indexOf(\n\t\t\t\t\t\tplugin.instance,\n\t\t\t\t\t\t$el.data(plugin.dataAlias || plugin.name),\n\t\t\t\t\t);\n\t\t\t\t\tidx > -1 && _update(plugin.instance[idx]);\n\t\t\t\t}\n\t\t\t\t// Single instance\n\t\t\t\telse {\n\t\t\t\t\t_update(plugin.instance);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// We want tu update the instance regardless of $el\n\t\t\telse {\n\t\t\t\t// An array of instances (multiple)\n\t\t\t\tif (_.isArray(plugin.instance)) {\n\t\t\t\t\t_.each(plugin.instance, _update);\n\t\t\t\t}\n\t\t\t\t// Single instance\n\t\t\t\telse {\n\t\t\t\t\t_update(plugin.instance);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Our public methods\n\tpublicMethods = {\n\t\tExtend: Extend,\n\t\tFind: Find,\n\t\tGetInstance: GetInstance,\n\t\tRegister: Register,\n\t\tRemove: Remove,\n\t\t// Methods on the plugin themselves\n\t\tInitialize: Initialize,\n\t\tInvoke: Invoke,\n\t\tDestroy: Destroy,\n\t\tUpdate: Update,\n\t\t// Helper\n\t\tgetAll() {\n\t\t\treturn plugins;\n\t\t},\n\t};\n\n\treturn publicMethods;\n}\n","/**\n * Netx.View is a subclass of Backbone.View, and is the superclass of all other views in Netx.\n * It adds a number of features to Views: asyncronous loading of templates,\n * a pager, preRender() and postRender() hooks, a standard for defining template arguments,\n * a modular system for linking clicks to events (called \"Actions\"), child view nesting,\n * standard show() and hide() methods, and more.\n *\n * @class\n */\n\nimport Backbone from 'backbone';\n\nconst BBView = Backbone.View;\n// Make a View we can extend from in other classes\nclass ES6View {\n\t/** @override */\n\tconstructor(opts) {\n\t\tBBView.apply(this, arguments);\n\t}\n}\n_.extend(ES6View.prototype, BBView.prototype);\nBackbone.ES6View = ES6View;\n\nimport Plugins from './netx-plugins';\n\nimport PagerModel from '@netx/core-app/models/pager';\n\nimport ActionsIconInlineTemplate from '@netx/core-app/templates/menuView-actionIconsInline.html';\nimport AssetDetailActionsTemplate from '@netx/core-app/templates/menuView-assetDetailActions.html';\nimport CartBarActionsTemplate from '@netx/core-app/templates/menuView-cartBarActions.html';\nimport ContextTemplate from '@netx/core-app/templates/menuView-context.html';\nimport HeaderActionsTemplate from '@netx/core-app/templates/menuView-headerActions.html';\nimport ListHeaderActionsTemplate from '@netx/core-app/templates/menuView-listHeaderActions.html';\nimport PodActionsTemplate from '@netx/core-app/templates/menuView-podActions.html';\nimport {simulateClickBody} from '@netx/core-next/utils/browser';\nimport {getEnabledActions} from '@netx/core-permissions/properties/actions';\nimport {appRouter} from '@netx/core-next/instance/router';\nimport {userProfile} from '@netx/core-user/collections/singletons/userProfile';\nimport {\n\tRegisterLegacyAction,\n\tFindLegacyAction,\n} from '@netx/core/legacyActionManager';\n\n// currently these are the only menu views that can be used\n// but themes can override the templates\nconst MenuTemplates = {\n\tactionIconsInline: ActionsIconInlineTemplate,\n\tassetDetailActions: AssetDetailActionsTemplate,\n\tcartBarActions: CartBarActionsTemplate, // portal only\n\tcontext: ContextTemplate,\n\theaderActions: HeaderActionsTemplate,\n\tlistHeaderActions: ListHeaderActionsTemplate,\n\tpodActions: PodActionsTemplate, // theme only(?)\n};\n\nclass View extends ES6View {\n\t/** @type {boolean} */\n\tget isView() {\n\t\treturn this.constructor.__isView__;\n\t}\n\n\t/**\n\t * Actions\n\t * Netx Actions are an extensible framework for modules to register their functionality (event names).\n\t * Actions can be added to views by adding 'data-action' attributes to HTML elements in view templates.\n\t * The global Netx.Menus object composes groups of Netx.Action objects into Netx.Menu objects; these\n\t * can be added to templates by adding the 'data-action-context' attribute to elements. ('context' is a deprecated name;\n\t * we now prefer 'menu'.) These are normally rendered as
      elements, but alternate templates can be\n\t * specified via the 'data-template' attribute.\n\t * Views automaticall convert those elements to buttons, menus and other UI elements, which\n\t * then trigger the specified events.\n\t *\n\t * Actions can define Enabler functions and/or a UserLevel to specify when an Action can be fired.\n\t * Actions beyond the user's level are hidden with $.hide(). Actions disabled by a function are\n\t * disabled with $.disable() and given a class -- usually 'disabled', but that\n\t * classname can be overridden by setting action.disabledClass\n\t *\n\t * By default, an action triggers its event with two arguments: the view, and the event object that triggered the action.\n\t * However, an action can define a wrapper (action.wrapper), a function that takes those arguments and returns\n\t * an array containing another set of arguments to trigger the event with. This makes it easier for an action\n\t * to target a general-purpose event handler that may already exist.\n\t * A view can override the wrapper for any of its actions, by setting this.actionWrappers[eventName] to a similar function.\n\t *\n\t * An action that wants to trigger a route instead of an event can specify a 'route' property;\n\t * this can be either a string or a function; the function is passed the action arguments and expected\n\t * to return a string.\n\t *\n\t */\n\n\t/**\n\t * Child View management\n\t *\n\t * this.childView defines a mechanism to let a collection View specify a different child view for its models.\n\t * Backbone operations on the collection (add/remove/set/reset) will be automatically reflected in the view.\n\t * When all child views are rendered, the event 'addedChildViews' is triggered -- on the parent view, not on the dispatcher.\n\t *\n\t * To use child views, specify a childView object similar to this one:\n\t * @memberof View\n\t * @member childView {object}\n\t * @todo update example for view collections\n\t * @example\n\t * childView: {\n\t * // The Netx.View subclass of the child view (or defaults to Netx.View)\n\t * viewClass: 'SomeChildView',\n\t * // jQuery selector for the place in the parent view where the children will be inserted.\n\t * // NOTE: this feature will be deprecated. Instead, label the desired childview element\n\t * // in the template with the className '.nx-childviews'\n\t * target: '#someplace',\n\t * // Can be a number to set the amount of items to insert at a time, before giving the browser a second to catch its breath,\n\t * // or an object that has more details about how to break up the adding of childViews\n\t * breakItUp: {\n\t * // (optional) The amount of items to add in pass\n\t * amount: 50,\n\t * // (optional) The amount of time to delay, in milliseconds, before making the next pass\n\t * delay: 0,\n\t * },\n\t * // operate on a different set than this.collection\n\t * collection: new Netx.Collection([...]),\n\t * // if true, add attribute draggable=\"true\"\n\t * draggable: false,\n\t * // (optional) same thing for href (use on A els)\n\t * href: function( model ){ return '#foo/' + model.id },\n\t * // (optional) function to generate unique id per child from model\n\t * id: function( model ){ return 'foo-' + model.id },\n\t * // (optional) Set max childViews to show\n\t * maxItems: 5,\n\t * // if true, re-render the superview on every add. (Use with caution)\n\t * reset: true,\n\t * // Options passed in the options field of the child view's constructor\n\t * options: {\n\t * tagName: 'div',\n\t * className: 'et etcetera'\n\t * }\n\t * }\n\t */\n\t// get childView() {\n\t// \treturn {};\n\t// }\n\n\t/**\n\t * Events:\n\t * Netx.View both triggers and listens for 'contextmenu' and 'showcontextmenu' events. These are the only default handlers in the events object.\n\t *\n\t * Context Menus:\n\t *\n\t * Child views can use these events to display a context menu, defined by an Netx.Menu that is rendered in the template of a parent view.\n\t * For parent views with lots of child views (such as asset lists) this avoids duplicating the HTML block of the menu for each child view, yielding better performance.\n\t *\n\t * To use context menus on child views, the childView definition should specify a Netx.Menu in a 'data-contextmenu-target' option in its definition, like so:\n\t *\n\t * @example\n\t * // in the parent view's class definition:\n\t *\n\t * childView: {\n\t *\toptions: {\n\t *\t\tattributes: {\n\t *\t\t\t'data-contextmenu-target': 'TheNameOfANetxMenu'\n\t *\t\t}\n\t *\t},\n\t * },\n\t *\n\t * // in the parent view's template:\n\t *\n\t *
        \n\t * @object\n\t * @see {@link Netx.View#findContextMenu|findContextMenu}\n\t */\n\n\t/**\n\t * Loading Classes:\n\t *\n\t * By default, Netx.View adds classes to every view's containing element\n\t * to reflect the state of their models and/or collections:\n\t *\n\t * The HTML5 class 'loading' is added to every view's containing element\n\t * while the view's model is fetched -- or its collection, if it has no model.\n\t *\n\t * If a view's collection is a subclass of Netx.Collections.Assets and is fetching a page chunk,\n\t * it gets the class 'loading-chunk' instead of 'loading'. (Chunk loading\n\t * is used to implement infinite scroll, among other effects.)\n\t *\n\t * If a view's collection finishes fetching and has no models, the view\n\t * gets the class 'no-assets'.\n\t *\n\t * The class 'not-loaded' is added to the view's containing element at init,\n\t * and removed permanently at the first fetch.\n\t *\n\t * CSS styles can use these classes to give users visual feedback on the status of transactions.\n\t *\n\t * this.loadingMethods is an array of strings specifying the backbone.RPC methods that trigger this behavior;\n\t * by default this is the single string \"read\", but child views can modify the array\n\t * to get the same effect on other methods, or delete it to disable this behavior entirely.\n\t *\n\t * When calling an RPC method, if the property 'loadingClasses' is set false in\n\t * the optional Backbone options object, the behavior will be supressed for\n\t * the duration of that RPC method call.\n\t *\n\t * To disable or modify this behavior, add the array 'loadingClassObjects' to the view,\n\t * either in its definition or as an option when instantiated.\n\t * Then, only the objects in that array will be listened to for fetch events.\n\t * (An empty array will disable loading classes completely.)\n\t */\n\n\t/**\n\t * @override\n\t * @param {object} options View options\n\t */\n\tconstructor(opts = {}) {\n\t\t// Sanity check: have we been handed a null or bogus 'el' option?\n\t\t// did we get a valid options.el?\n\t\t// does that element not exist?\n\t\tif (_.isString(opts.el) && !document.querySelector(opts.el)) {\n\t\t\tconsole.warn(\n\t\t\t\t`Could not attach view to DOM: DOM element ${opts.el} does not exist.`,\n\t\t\t);\n\t\t\t// ...so the backbone.view initializer will create a new one.\n\t\t\tdelete opts.el;\n\t\t}\n\n\t\topts.events = {\n\t\t\t// A handler for the contextmenu event\n\t\t\tcontextmenu: 'findContextMenu',\n\t\t\t'click .nx-cancel:first': 'cancel',\n\t\t\t'click [data-nx-control=\"close\"]:first': 'cancel',\n\t\t\t'click .nx-done:first': 'hide',\n\t\t\t// A handler for popout views:\n\t\t\t'click a[data-nx-popout]': 'togglePopout',\n\t\t\t...opts.events,\n\t\t};\n\t\tsuper(opts);\n\n\t\tthis.args = opts.args || [];\n\t\tthis.headerTitle = opts.headerTitle || '';\n\t\tthis.routeMatch = opts.routeMatch;\n\t\tthis.viewSpec = opts.viewSpec;\n\t\tthis.template = opts.template;\n\t\tthis.loadingClassObjects = opts.loadingClassObjects;\n\t\tthis.loadingClassRemoveDelay = opts.loadingClassRemoveDelay || 0;\n\t\tthis.listenToCollection = opts.listenToCollection;\n\t\tthis.modalOptions = opts.modalOptions || {};\n\t\tthis.properties = opts.properties || {};\n\t\tthis.removeOnHide = opts.removeOnHide !== false;\n\t\tthis.removeOnSimpleHide = opts.removeOnSimpleHide !== false;\n\t\tthis.requireSync = opts.requireSync === true;\n\t\tthis.showLoadingOnce = opts.showLoadingOnce === true;\n\t\tthis._loadedOnce = false;\n\n\t\t//opts.childView && ChildViews(this, opts.childView);\n\n\t\t// Debounced/throttled methods\n\t\t// Debounced render for listeners\n\t\t// We are doing this in a lot of views - until we find something better (since we cannot debounce the actual render method):\n\t\tthis.debouncedRender = _.debounce(this.render, 100);\n\n\t\tthis.configureSubmenus = _.debounce(this.configureSubmenus, 100);\n\n\t\t// Keep track of how many views we maintain:\n\t\tNetx.viewStats = Netx.viewStats || {};\n\t\tNetx.viewStats[this.constructor.__name__] =\n\t\t\t(Netx.viewStats[this.constructor.__name__] || 0) + 1;\n\n\t\t/**\n\t\t * this.subViews is an array where any view can manually place a reference to a subview. The promise returned by\n\t\t * have finished rendering. Calls to this.remove() will recursively call all those views.\n\t\t */\n\t\tthis.subViews = {};\n\n\t\t/**\n\t\t * Template Variables.\n\t\t *\n\t\t * By default, if this.model is defined in a template, all of that model's attributes will be available as template variables.\n\t\t * Otherwise, if this.collection is defined, all properties of the collection object will be made into template variables.\n\t\t *\n\t\t * Furthermore, if the view does not override this.doTemplate(), any/every other key/value added to the object this.templateVars\n\t\t * will be translated into additional template variables for the view. This is an easy way to add extra template variables\n\t\t * and is good enough in most situations.\n\t\t *\n\t\t * if this.templateVars is defined as a function, the function will be expected to return an object, which will then be converted to variables.\n\t\t */\n\t\tthis.templateVars = this.templateVars || {};\n\n\t\t// Plugin manager\n\t\tif (!this.Plugins || !(this.Plugins instanceof Plugins)) {\n\t\t\tthis.Plugins = new Plugins(this);\n\t\t}\n\n\t\t// Some plugins that get used a lot\n\t\tthis.Plugins.Register({\n\t\t\tresizeListener: {\n\t\t\t\tname: 'resize',\n\t\t\t\tinitializeMethod: function (pluginObj, $pluginEl, initOpts, cb) {\n\t\t\t\t\t$pluginEl.resize(_.bind(this.resize, this));\n\t\t\t\t\t// This is an odd little plugin - but helpful\n\t\t\t\t\tcb({\n\t\t\t\t\t\tel: $pluginEl,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tdestroyMethod: function (instance) {\n\t\t\t\t\t// Again, an odd (but helpful) plugin\n\t\t\t\t\tinstance.el[0].__resizeTriggers__ && instance.el.removeResize(null);\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\t/**\n\t\t * @type {string}\n\t\t */\n\t\tthis.i18nCountStr =\n\t\t\topts.i18nCountStr !== false ? opts.i18nCountStr || 'i18n.nItems' : false;\n\t\t/** @type {boolean} */\n\t\tthis.isRouted = opts.isRouted === true;\n\t\t/**\n\t\t * Set a delay on the removal of loading classes\n\t\t * Especially useful in views where we debounce renders on sync\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.loadingClassRemoveDelay = opts.loadingClassRemoveDelay || 0;\n\n\t\t/**\n\t\t * RPC methods to listen for loading on\n\t\t * @type {array}\n\t\t */\n\t\tthis.loadingMethods = opts.loadingMethods || ['read'];\n\n\t\t/**\n\t\t * Normally, a route change clears all modal windows.\n\t\t * If the stickyModal flag is set on a modal view, the view will remain\n\t\t * on screen through route changes.\n\t\t * This will automatically be set to true if a view has `modalOptions.blocking` set to `true`\n\t\t * @type {boolean}\n\t\t * @see {@link Netx.View#isMyRoute|isMyRoute}\n\t\t */\n\t\tthis.stickyModal = opts.stickyModal === true;\n\n\t\t/**\n\t\t * What to extend data from when we run doTemplate\n\t\t * If left unset it defaults to standard behavior - we check for `this.model`, `this.collection`, and lastly, fallback to `this`\n\t\t * @type {object}\n\t\t * @default\n\t\t */\n\t\t// this.templateDataSource = opts.templateDataSource || {};\n\n\t\t/**\n\t\t * A Deferred object that resolves when this view finishes rendering.\n\t\t * This is a Deferred object, and is resolved after the first render.\n\t\t * @deprecated 2016-07-01 - Left for legacy as no longer are we deferred thanks to pre-compiling our templates\n\t\t * @type {object}\n\t\t */\n\t\t// TODO: Is this really deprecated yet? It's still used in a lot of code,\n\t\t// and it does have the effect of postponing thing until a view's first render....\n\t\tthis.rendered = new $.Deferred();\n\n\t\t////////////////////////////////////////\n\t\t// SHOWN/HIDDEN PROMISES\n\t\t////////////////////////////////////////\n\t\t// Initial shown/hidden promises\n\t\tthis._hiddenDeferred = new $.Deferred();\n\t\tthis.whenHidden = this._hiddenDeferred.promise();\n\t\tthis._shownDeferred = new $.Deferred();\n\t\tthis.whenShown = this._shownDeferred.promise();\n\t\t////////////////////////////////////////\n\t\t// !SHOWN/HIDDEN PROMISES\n\t\t////////////////////////////////////////\n\n\t\t// Bind\n\t\tthis.bindCollectionEvents().bindModelEvents();\n\n\t\t// Hey, listen!\n\t\tthis\n\t\t\t// listen for model & collection changes\n\t\t\t.listenTo(this, 'setModel', this.setModel)\n\t\t\t.listenTo(this, 'setCollection', this.setCollection)\n\t\t\t// Listen for showing/shown hiding/hidden events\n\t\t\t.listenTo(this, 'hiding', this.onHiding)\n\t\t\t.listenTo(this, 'hidden', this.afterHidden)\n\t\t\t.listenTo(this, 'showing', this.onShowing)\n\t\t\t.listenTo(this, 'shown', this.afterShown)\n\t\t\t// On hidden create new promise for shown\n\t\t\t.listenTo(this, 'hiddenByProxy', () => {\n\t\t\t\tif (!this.removing && !this.hiding && !this.showing) {\n\t\t\t\t\t// If we were visible at the time\n\t\t\t\t\tif (this.isShown) {\n\t\t\t\t\t\tthis.hiddenByProxy = true;\n\t\t\t\t\t\tthis.afterHidden(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.shownByProxy = false;\n\t\t\t})\n\t\t\t// On shown create new promise for hidden\n\t\t\t.listenTo(this, 'shownByProxy', () => {\n\t\t\t\tif (!this.removing && !this.hiding && !this.showing) {\n\t\t\t\t\tif (this.isShown || this.hiddenByProxy) {\n\t\t\t\t\t\tthis.shownByProxy = true;\n\t\t\t\t\t\tthis.afterShown(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.hiddenByProxy = false;\n\t\t\t});\n\n\t\t// Set up any additonal functionality\n\t\tconst __initializers__ = this.constructor.__initializers__ || [];\n\t\t__initializers__.forEach((func) => func(this, opts));\n\n\t\t// Add loading classes\n\t\t// Adding in render gets into to timing issues with lsiteners and repsonses\n\t\t// should a request be in progress\n\t\tthis.addLoadingClasses_internal();\n\t}\n\n\t/**\n\t * Adds loading classes to the the view container\n\t * @method\n\t * @private\n\t */\n\taddLoadingClasses_internal() {\n\t\t// NOTE: no way to check options here for loadingClasses === false.\n\n\t\tif (!this.loadingMethods || !this.loadingMethods.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet showNotLoaded = false;\n\t\tlet thingSyncing;\n\n\t\tconst loadingClassObjects = this.loadingClassObjects || [];\n\n\t\t// First loop over any defined loading class objects and check if they are currently syncing\n\t\tif (loadingClassObjects.length) {\n\t\t\tloadingClassObjects.forEach((item) => {\n\t\t\t\tif (_.isString(item) && this[item] && this[item].isSyncing) {\n\t\t\t\t\tthingSyncing = this[item];\n\t\t\t\t} else if (_.isObject(item) && item.isSyncing) {\n\t\t\t\t\tthingSyncing = item;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\t// TODO: this.model.isSyncing could contain complete sync info instead of a boolean ....\n\t\t// If nothing already syncing and view is not tied to a collection and it has a model that is syncing\n\t\tif (\n\t\t\t!thingSyncing &&\n\t\t\t!this.collection &&\n\t\t\tthis.model &&\n\t\t\tthis.model.isSyncing\n\t\t) {\n\t\t\tthingSyncing = this.model;\n\t\t}\n\t\t// Have we found anything syncing yet, if not check this.collection\n\t\telse if (!thingSyncing && this.collection && this.collection.isSyncing) {\n\t\t\tthingSyncing = this.collection;\n\t\t}\n\t\t// Either the collection has never synced or the model is new - nothing loaded\n\t\telse if (\n\t\t\t(!this.collection && this.model && this.model.isNew()) ||\n\t\t\t(this.collection && this.collection.syncedOnce !== true)\n\t\t) {\n\t\t\tshowNotLoaded = true;\n\t\t}\n\n\t\tconst thingListener = (thingRequesting, xhr, opts) => {\n\t\t\t// Prevent models from triggering request events on collections, unless a model is specified in loadingClassObjects\n\t\t\tif (\n\t\t\t\t(thingRequesting.isModel && loadingClassObjects.includes('model')) ||\n\t\t\t\t(thingRequesting.isCollection &&\n\t\t\t\t\tloadingClassObjects.includes('collection'))\n\t\t\t) {\n\t\t\t\tthis.showLoading(thingRequesting, xhr, opts);\n\t\t\t}\n\t\t};\n\n\t\t// This function adds to some Backbone object the listeners for adding & removing the loading classes\n\t\tconst addListeners = (thing) => {\n\t\t\tif (!thing || !thing._listenId) return;\n\n\t\t\t_.each(this.loadingMethods, (arg) => {\n\t\t\t\tthis.stopListening(thing, `request:${arg}`, thingListener).listenTo(\n\t\t\t\t\tthing,\n\t\t\t\t\t`request:${arg}`,\n\t\t\t\t\tthingListener,\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tthis.stopListening(thing, 'sync', this.showLoaded).listenTo(\n\t\t\t\tthing,\n\t\t\t\t'sync',\n\t\t\t\tthis.showLoaded,\n\t\t\t);\n\t\t};\n\n\t\t// We have a syncing model or collection\n\t\tif (thingSyncing) {\n\t\t\t// if addLoadingClasses is called while the model/collection is fetching, reflect that immediately.\n\t\t\tthis.showLoading(thingSyncing);\n\t\t\taddListeners(thingSyncing);\n\t\t}\n\t\t// Nothing loaded\n\t\telse if (showNotLoaded) {\n\t\t\tthis.showNotLoaded();\n\t\t}\n\t\t// We must already have all we need to be considered \"loaded\"\n\t\telse {\n\t\t\t// TODO: need to include the loadingclassobjects some how\n\t\t\t// we were getting false positives before on no-assets because showLoaded needs\n\t\t\t// a `thing` to reference to make sure we are not adding classes based on some rogue\n\t\t\t// thing that may have been syncing at one time - really we need to sit down and\n\t\t\t// discusss this as there are a lot of problems with our current approach\n\t\t\t// Everything appeared to work so brilliantly when we had a template lag >.<\n\t\t\tthis.showLoaded(this.collection || this.model, null, {noDelay: true});\n\t\t}\n\n\t\t// What should we listen on?\n\t\t// if this.loadingClassObjects is set, use the objects it points to.\n\t\tloadingClassObjects.forEach((item) => {\n\t\t\tlet thingToListenTo;\n\t\t\tif (_.isString(item)) {\n\t\t\t\tif (!_.isUndefined(this[item])) {\n\t\t\t\t\tthingToListenTo = this[item];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthingToListenTo = item;\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!thingSyncing ||\n\t\t\t\tthingSyncing._listenId !== thingToListenTo._listenId\n\t\t\t) {\n\t\t\t\taddListeners(thingToListenTo);\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add a pager to this collection view\n\t * @param {Netx.Collection} c Netx.Collection instance -- defaults to this.collection\n\t */\n\taddPagerView(c) {\n\t\tc = c || this.collection;\n\t\tif (!c) {\n\t\t\tconsole.warn('cant add pager to view without a collection!');\n\t\t\treturn;\n\t\t}\n\n\t\tconst pagers = this.$('[data-nx-pager]');\n\t\tif (pagers.length > 1) {\n\t\t\t// ALERT! Sensitivity training error! Report to HR for reprogramming!\n\t\t\t//console.error( 'To many pager Daniel-san! Only one `data-nx-pager` element per template.' );\n\t\t\tconsole.warn('Only one `data-nx-pager` element allowed per template.');\n\t\t} else if (pagers.length === 0) {\n\t\t\tconsole.warn('Cant find a `data-nx-pager` element in template.');\n\t\t} else {\n\t\t\tif (this.pagerView) {\n\t\t\t\tthis.removeSubView(this.pagerView, true);\n\t\t\t}\n\t\t\timport(\n\t\t\t\t/* webpackChunkName: \"view-pagerView\" */ '@netx/core-app/views/pagerView'\n\t\t\t).then((PagerView) => {\n\t\t\t\tconst $pager = pagers[0];\n\t\t\t\tthis.pagerView = new PagerView.default({\n\t\t\t\t\tcollection: c,\n\t\t\t\t\tmodel: c.pager || new PagerModel(),\n\t\t\t\t});\n\t\t\t\tthis.addSubView(this.pagerView);\n\t\t\t\tthis.pagerView.setElement($pager).render();\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Add any old view as a 'subview' to this view. It will be stored in this.subViews{} using view.cid as the key.\n\t * This view will manage the subview's life cycle, destroying it when this view is destroyed,\n\t * and this view's render promise will not resolve until all subviews are also done rendering.\n\t * All other management (like triggering render) must be handled by the parent view.\n\t *\n\t * Unlike this.childViews{}, this.subViews{} is totally seperate from the child view system for collections & their models.\n\t * Views in this.subViews{} are not destroyed in the render cycle.\n\t * @method\n\t * @param {Netx.View} v\n\t * @returns {Netx.View} view Sub view\n\t */\n\taddSubView(v) {\n\t\tthis.subViews[v.cid] = v;\n\t\treturn v;\n\t}\n\n\t/**\n\t * Everything has happend in the core hiding of this view\n\t * Executes just before `whenHidden` is resolved\n\t * @method\n\t * @listens Netx.View#hidden\n\t */\n\tafterHidden(view) {\n\t\tif (view !== this || this.removing) {\n\t\t\treturn;\n\t\t}\n\t\t// Set the appropriate hidden stuff\n\t\tthis.hiding = false;\n\t\tthis.isShown = false;\n\n\t\tthis.el.removeAttribute('data-nx-hiding');\n\t\tthis.el.removeAttribute('data-nx-showing');\n\t\t// this.$el.removeClass('showing hiding');\n\n\t\tif (this.viewSpec) {\n\t\t\tthis.$el.removeClass('active');\n\t\t}\n\n\t\tif (this.whenHidden.state() === 'pending') {\n\t\t\tthis._hiddenDeferred.resolveWith(this);\n\t\t}\n\t\tif (this.whenShown.state() === 'pending') {\n\t\t\tthis._shownDeferred.reject();\n\t\t}\n\n\t\t_.invoke(this.subViews, 'trigger', 'hiddenByProxy', this);\n\n\t\t_.defer(() => {\n\t\t\t// New shown promise\n\t\t\tthis._shownDeferred = new $.Deferred();\n\t\t\tthis.whenShown = this._shownDeferred.promise();\n\t\t});\n\t}\n\n\t/**\n\t * Everything has happend in the core showing of this view\n\t * Executes just before `whenShown` is resolved\n\t * @method\n\t * @listens Netx.View#shown\n\t */\n\tafterShown(view) {\n\t\tif (view !== this || this.removing) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Set the appropriate shown stuff\n\t\tthis.isShown = true;\n\t\tthis.showing = false;\n\n\t\tthis.el.removeAttribute('data-nx-hiding');\n\t\tthis.el.removeAttribute('data-nx-showing');\n\t\tthis.$el.removeClass('showing hiding');\n\n\t\tif (this.viewSpec) {\n\t\t\tthis.$el.addClass('active');\n\t\t}\n\n\t\tif (this.whenShown.state() === 'pending') {\n\t\t\tthis._shownDeferred.resolveWith(this);\n\t\t}\n\t\tif (this.whenHidden.state() === 'pending') {\n\t\t\tthis._hiddenDeferred.reject();\n\t\t}\n\n\t\t_.invoke(this.subViews, 'trigger', 'shownByProxy', this);\n\n\t\t_.defer(() => {\n\t\t\t// New hidden promise\n\t\t\tthis._hiddenDeferred = new $.Deferred();\n\t\t\tthis.whenHidden = this._hiddenDeferred.promise();\n\t\t});\n\t}\n\n\t/**\n\t * This is where the any animation should happen\n\t * When the callback is executed the app considers this view as good as hidden\n\t * @method\n\t * @param {function} cb Callback\n\t * @see Netx.View#hide\n\t */\n\tbeforeHidden(cb) {\n\t\tthis.el.style.display = 'none';\n\t\tcb.apply(this);\n\t}\n\n\t/**\n\t * This is where the any animation should happen\n\t * When the callback is executed the app considers this view as good as shown\n\t * @method\n\t * @param {function} cb Callback\n\t * @see Netx.View#show\n\t */\n\tbeforeShown(cb) {\n\t\tthis.el.style.display = '';\n\t\tcb.apply(this);\n\t}\n\n\t/**\n\t * @method\n\t */\n\tbindCollectionEvents() {\n\t\tconst collection = this.listenToCollection || this.collection;\n\t\tif (!collection) return this;\n\n\t\tthis.trigger('bindCollectionEventsHook', this);\n\n\t\treturn this.listenTo(collection, 'reset add remove', () => {\n\t\t\tthis.collectionUpdated(collection);\n\t\t})\n\t\t\t.listenTo(collection, 'sync', (thing) => {\n\t\t\t\tif (thing !== collection) return;\n\t\t\t\tthis.collectionUpdated(collection);\n\t\t\t})\n\t\t\t.listenTo(collection, 'updatedTotal', this.collectionUpdated);\n\t}\n\n\t/**\n\t * @method\n\t */\n\tbindEvents() {\n\t\tthis.unbindEvents();\n\n\t\t// DAM-13638\n\t\tif (/iphone|ipad|ipod/i.test(navigator.userAgent)) {\n\t\t\tconst menuName = this.$el.data('contextmenu-target');\n\t\t\tif (!menuName) return this;\n\n\t\t\tif (!this.hammer) {\n\t\t\t\tthis.hammer = new Hammer(this.el);\n\t\t\t}\n\n\t\t\tthis.hammer.on('press', (e) => {\n\t\t\t\t// e.preventDefault();\n\t\t\t\tthis.findContextMenu(e.srcEvent);\n\t\t\t});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * @method\n\t */\n\tbindModelEvents() {\n\t\tif (!this.model) return this;\n\n\t\treturn this.trigger('bindModelEventsHook', this);\n\t}\n\n\t/**\n\t * A helper method for dealing with large arrays or objects of data\n\t * We can set a slight delay to allow the update of progress (etc) and not just have a locked up browser\n\t * @method\n\t * @param {object} options Options (like size, amount, start, delay)\n\t * @param {function} processCallback Is called on each iteration and passes the current index\n\t * @param {function} completeCallback Is called when all iterations are complete - return data here\n\t */\n\tbreakItUp(options, processCallback, completeCallback) {\n\t\t// Helpers\n\t\tconst d = new $.Deferred();\n\n\t\t// Vars\n\t\tvar start = _.isUndefined(options.start) ? 0 : options.start,\n\t\t\tidx = 0,\n\t\t\tamount = options.amount || 10,\n\t\t\tincrement = options.increment || 1,\n\t\t\tsize = options.size,\n\t\t\tdelay = options.delay || 2,\n\t\t\tself = this;\n\n\t\t// I am trying this out so that we might be able to give some progress indication in the event that\n\t\t// we are trying to edit a whole lot of cells (so the screen isn't just locked up)\n\t\tvar brokenUp = function (start, amt) {\n\t\t\t// No delay on first call\n\t\t\tidx === 0 ? process(start, amt) : setTimeout(process, delay, start, amt);\n\t\t};\n\t\t// So we are not creating a new anonymouse function each chunk we iterate over (delays and all)\n\t\tvar process = function (start, amt) {\n\t\t\t// Vars\n\t\t\tvar end, processed;\n\n\t\t\t// Keep in bounds\n\t\t\tif (start < 0) start = 0;\n\t\t\tend = start + amount;\n\t\t\tif (end > size) end = size;\n\n\t\t\tvar c, i;\n\t\t\t// Process\n\t\t\tfor (i = start, c = end; i < c; i += increment) {\n\t\t\t\t// Return false in your process callback to end the loop and just fire the complete callback\n\t\t\t\tprocessed = processCallback.call(self, i);\n\t\t\t\tidx++;\n\t\t\t\tif (processed === false) break;\n\t\t\t}\n\n\t\t\t// Next\n\t\t\tif (processed !== false && i <= size - 1) {\n\t\t\t\tbrokenUp(i, amount);\n\t\t\t}\n\t\t\t// Finished\n\t\t\telse {\n\t\t\t\td.resolveWith(self, [\n\t\t\t\t\t_.isFunction(completeCallback) ? completeCallback.call(self) : null,\n\t\t\t\t]);\n\t\t\t}\n\t\t};\n\t\t// Start\n\t\tbrokenUp(start, amount);\n\n\t\treturn d.promise();\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e jQueryEvent\n\t */\n\tcancel(e) {\n\t\tif (e && e.preventDefault) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\tthis.trigger('cancelled', this);\n\t\tthis.hide();\n\n\t\tif (this.eventStr) {\n\t\t\tdispatcher.trigger(\n\t\t\t\t`${this.eventStr}:cancelled`,\n\t\t\t\tthis.model || this.collection,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Differntiate between having `no-assets` and having `no-matches`\n\t * @method\n\t */\n\tcheckHasResults() {\n\t\tconst collection = this.listenToCollection || this.collection;\n\t\tif (\n\t\t\t!collection ||\n\t\t\tcollection.syncing ||\n\t\t\t(this.requireSync && !collection.syncedOnce)\n\t\t)\n\t\t\treturn;\n\n\t\tconst el = this.el;\n\n\t\tel.removeAttribute('data-nx-no-matches'); //removeClass('no-matches');\n\n\t\tif (collection.isFiltered()) {\n\t\t\tel.removeAttribute('data-nx-no-assets');\n\t\t\tel.removeAttribute('data-nx-no-results');\n\t\t\tcollection.length === 0 && el.setAttribute('data-nx-no-matches', true);\n\t\t\treturn;\n\t\t}\n\n\t\tconst hasResults = _.isFunction(this.hasAssets)\n\t\t\t? this.hasAssets()\n\t\t\t: collection.getTotal();\n\t\tif (hasResults) {\n\t\t\tel.removeAttribute('data-nx-no-assets');\n\t\t\tel.removeAttribute('data-nx-no-results');\n\t\t} else {\n\t\t\tel.setAttribute('data-nx-no-assets', true);\n\t\t\tel.setAttribute('data-nx-no-results', true);\n\t\t}\n\t}\n\n\t/**\n\t * Often, a model wants to remove itself from the DOM when its model is removed from a collection.\n\t * checkRemove() is a handler for Backbone \"remove\" events on models, which pass a model, a collection and options.\n\t * It calls .remove() only if the event's collection argument matches this.collection .\n\t * @method\n\t * @param {Backbone.Model} model\n\t * @param {Backbone.Collection) collection\n\t * @param {Object} opts\n\t */\n\tcheckRemove(model, collection, opts) {\n\t\tif (collection == this.collection) {\n\t\t\treturn this.remove();\n\t\t}\n\t}\n\n\t/** @method */\n\tcleanUpActionEvents() {\n\t\t_.forEach(this.actionEvents, (event, action) => {\n\t\t\t_.each(event.els, function (el) {\n\t\t\t\tel.removeEventListener('click', event.func);\n\t\t\t\tel.removeEventListener('keydown', event.func);\n\t\t\t\t$(el).off('tapToClick', event.func);\n\t\t\t});\n\t\t});\n\t\tthis.actionEvents = {};\n\t}\n\n\t/**\n\t * @method\n\t * @param {module:core/lib/netx-collection} collection Collection\n\t */\n\tcollectionUpdated(collection) {\n\t\tconst _collection = this.listenToCollection || this.collection;\n\t\tif (collection !== _collection) return;\n\n\t\tthis.checkHasResults();\n\t\tthis.updateCount();\n\t}\n\n\t/**\n\t * configureActions: for a set of actions, re-test all Enablers and userlevel tests, and enable/disable the Actions as needed.\n\t * This happens automatically with rendering, but can be useful to trigger manually.\n\t * @param {array} actionList the set of actions\n\t * @param {Netx.View} [otherView] operate on a view other than this one.\n\t */\n\tconfigureActions(actionList, otherView) {\n\t\tif (!actionList.length) return;\n\n\t\tconst view = otherView != null ? otherView : this;\n\t\tconst actionOpts =\n\t\t\totherView && otherView !== this ? {targetView: otherView} : undefined;\n\n\t\tconst enabledActions = getEnabledActions(actionList, view);\n\t\tconst disabledActions = actionList.filter(\n\t\t\t(action) => !enabledActions.includes(action),\n\t\t);\n\n\t\tenabledActions.forEach((action) => {\n\t\t\tif (this.$actionEls) {\n\t\t\t\tconst $target = this.$actionEls.filter(\n\t\t\t\t\t`[data-action=\"${action.event}\"]`,\n\t\t\t\t);\n\n\t\t\t\t$target.attr('title', action.label);\n\t\t\t\tthis.enableAction(action, actionOpts);\n\t\t\t}\n\t\t});\n\n\t\tdisabledActions.forEach((action) => {\n\t\t\tif (this.$actionEls) {\n\t\t\t\tconst $target = this.$actionEls.filter(\n\t\t\t\t\t`[data-action=\"${action.event}\"]`,\n\t\t\t\t);\n\n\t\t\t\t$target.attr('title', action.label);\n\t\t\t\tthis.disableAction(action, actionOpts);\n\t\t\t}\n\t\t});\n\n\t\tconst menuActions = this.menuActions;\n\t\t// Reconfigure any menus that need it:\n\t\tlet menusToConfigure = [];\n\t\tactionList.forEach((action) => {\n\t\t\tfor (const menuName in menuActions) {\n\t\t\t\tif (menuActions.hasOwnProperty(menuName)) {\n\t\t\t\t\tmenuActions[menuName].includes(action) &&\n\t\t\t\t\t\t!menusToConfigure.includes(menuName) &&\n\t\t\t\t\t\tmenusToConfigure.push(menuName);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t// configure each menu once, not once for each menu item\n\t\tmenusToConfigure.forEach((menuName) => {\n\t\t\tthis.configureMenu(menuName);\n\t\t});\n\n\t\t// Super gross\n\t\t// A view containing the menu calls on `this.configureMenu` with the menu it contains\n\t\t// but the menu view is responsible for checking its actions and enabling/disabling them\n\t\t// this can happen after the parent view has already called `this.configureMenu`\n\t\t// There seems to be no reason why a parent view should be handling this since it is trying\n\t\t// to directly control the top level element that is them menu view's el - and it knows\n\t\t// everything that needs to be known about the actions within and itself\n\t\t// Rather than trying to tackle the right way now, holding off for our menu/actiomns refactor\n\t\t// which is greatly needed\n\t\tif (this.isMenuView && this.$el.hasClass('nx-action-context')) {\n\t\t\tthis.configureMenuView(this);\n\t\t}\n\n\t\t// re-initialize backbone's listeners off this.events\n\t\tthis.delegateEvents();\n\n\t\t// done.\n\t\tthis.trigger('configuredActions', actionList);\n\t}\n\n\t/**\n\t * Enable/disable a menu based on whether it contains any enabled actions.\n\t * @method\n\t * @param {module:app/views/menuView} menuView Menu view\n\t * @param {Element} menuEl Menu element (if not specified will use menuView.$el)\n\t */\n\tconfigureMenuView(menuView, $menuEl) {\n\t\t$menuEl = $menuEl || menuView.$el;\n\t\tconst $menuToggle = $menuEl.siblings('[data-toggle=\"dropdown\"]');\n\n\t\t// Check if we have any enabled actions\n\t\tlet allActions = menuView.$('.nx-action');\n\t\tlet disabledActions = menuView.$('.nx-action[disabled]');\n\n\t\t// TODO: maybe there's a bug here:\n\t\t// if a menu has a mix of actions and hrefs,\n\t\t// and one href is the only enabled item,\n\t\t// will this 2-step check work right?\n\t\t//\n\t\t// There should not be, this double checks seems pointless as all things\n\t\t// in a menu are actions and should have a `.nx-action` class -jse-\n\n\t\t// Maybe it is just href based and not data-action\n\t\tif (!allActions.length) {\n\t\t\tallActions = menuView.$('[href]');\n\t\t\tdisabledActions = menuView.$('[href][disabled]');\n\t\t}\n\n\t\t// Configure the menu element: disable if all its actions are disabled.\n\t\t$menuEl.enableIf(disabledActions.length < allActions.length);\n\t\t// If the menu is a dropdown, also configure its toggle.\n\t\t$menuToggle.enableIf(disabledActions.length < allActions.length);\n\n\t\tmenuView.configureSubmenus();\n\t}\n\n\t/**\n\t * Configure menu by name\n\t * @method\n\t * @param {string} menuName Menu name\n\t */\n\tconfigureMenu(menuName) {\n\t\tif (!this.menuViews) {\n\t\t\treturn;\n\t\t} // no menu views yet (something is configuring before we've rendered.)\n\n\t\tvar menuView = this.menuViews[menuName];\n\t\tvar $menuEl = this.$(\n\t\t\t'.nx-action-context[data-action-context=\"' + menuName + '\"]',\n\t\t);\n\t\tif (!menuView || !$menuEl.length) {\n\t\t\t// Let's not be so noisy about it\n\t\t\tconsole.warn(\"Can't find menu \" + menuName);\n\t\t\treturn;\n\t\t}\n\n\t\tthis.configureMenuView(menuView, $menuEl);\n\t}\n\n\t/** @method */\n\tconfigureSyncActions() {\n\t\tthis.configureActions(this.syncActions);\n\t}\n\n\t/** @method */\n\tconfigureUserActions() {\n\t\tthis.configureActions(this.userActions);\n\t}\n\n\t/**\n\t * If we have unsaved changes, confirm that we want to hide\n\t * This method is only automatically called from a `multi-view` world when `hide` is triggered on a top level view (and up for removal)\n\t * For this to fire under any other circumstance requires manually calling where needed\n\t * @return {boolean}\n\t * @fires module:app#app:confirmUnsaved\n\t */\n\tconfirmHide() {\n\t\tconst d = new $.Deferred();\n\t\tlet unsavedView =\n\t\t\t_.isFunction(this.unsavedChanges) && this.unsavedChanges();\n\n\t\tif (unsavedView) {\n\t\t\tdispatcher.trigger('app:confirmUnsaved', {\n\t\t\t\tconfirmed: (...args) => {\n\t\t\t\t\t// Trigger event\n\t\t\t\t\tunsavedView.trigger('nx:unsavedChanges:confirmed');\n\t\t\t\t\t// Resolve with this view (may or may not be the actual unsaved view)\n\t\t\t\t\td.resolveWith(this, [unsavedView].concat(...args));\n\t\t\t\t},\n\t\t\t\tcancelled: (...args) => {\n\t\t\t\t\t// Trigger event\n\t\t\t\t\tunsavedView.trigger('nx:unsavedChanges:cancelled');\n\t\t\t\t\t// Reject and pass the unsaved view\n\t\t\t\t\td.rejectWith(this, [unsavedView].concat(...args));\n\t\t\t\t\t// Show the view in question\n\t\t\t\t\t// Basically, `this.unsavedChanges` returns a view that has unsaved changes - this could be a subView/chilView\n\t\t\t\t\t// If it does return a view other than itself, and this view is a multiView as well, show that view and the higher `multiView` will show this view on reject\n\t\t\t\t\tif (this !== unsavedView && this.isMultiView) {\n\t\t\t\t\t\tthis.isTabView\n\t\t\t\t\t\t\t? this.showTab(unsavedView)\n\t\t\t\t\t\t\t: this.showView(unsavedView);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t});\n\t\t} else {\n\t\t\td.resolveWith(this);\n\t\t}\n\t\treturn d.promise();\n\t}\n\n\t/**\n\t * disableAction: disables an action. This happens automatically when actions have Enablers.\n\t * @method\n\t * @private\n\t * @param {object} action An Action object, or an event string that identifes a registered Action object\n\t * @param {boolean} [options.redelegate] Should delegateEvents() be called?\n\t */\n\tdisableAction(action, options) {\n\t\tif (_.isString(action)) {\n\t\t\taction = FindLegacyAction(action); // convert action name to action object\n\t\t}\n\n\t\tconst $target = this.$actionEls.filter(`[data-action=\"${action.event}\"]`);\n\t\tconst disabledClass = _.isString(action.disabledClass)\n\t\t\t? action.disabledClass\n\t\t\t: 'disabled';\n\n\t\t$target.addClass(disabledClass).disable();\n\n\t\t// if this is the first action and it is disabled, this.actionEvents wont be defined\n\t\tthis.actionEvents = this.actionEvents || {};\n\n\t\tconst actionEvent = this.actionEvents[action.event];\n\t\tif (actionEvent) {\n\t\t\t_.each(actionEvent.els, function (el) {\n\t\t\t\tel.removeEventListener('click', actionEvent.func);\n\t\t\t\t$(el).off('tapToClick', actionEvent.func);\n\t\t\t});\n\t\t\tdelete this.actionEvents[action.event];\n\t\t}\n\n\t\tthis.trigger('disabledAction', action, options);\n\t}\n\n\t/**\n\t * Disable the target element involved in the event\n\t * @method\n\t * @param {event} e Event\n\t */\n\tdisableTarget(e) {\n\t\te && e.target && $(e.target).disable();\n\t}\n\n\t/**\n\t * Netx.View templates are processed by Underscore's _.template() command, which can take various arguments.\n\t * Sub-classes can override this.doTemplate() to specify what arguments are passed to that templating function.\n\t *\n\t * The default implementation is useful; it passes the entire collection (for collection views),\n\t * or all the model attributes (for model views), or the entire view (for views without a model or collection).\n\t * @see {@link Netx.View#render|render}\n\t * @see {@link Netx.View#renderElement|renderElement}\n\t * @method\n\t * @return {object} this\n\t */\n\tdoTemplate() {\n\t\tif (!this.template) return '';\n\t\t// Additional template variables\n\t\t// This is a helper - you will always get the model or collection for free\n\t\t// adding things to this.templateVars will make it so you do not have to override this doTemplate method\n\t\t// If you have a doTemplate override in your view it will be up to you to recreate this functionality or not\n\t\t// The only reason I can see, going forward, to have a custom doTemplate method is if it is absolutely imperative\n\t\t// to not pass the model/collection/view (depending on what is there)\n\t\tlet additionalVars = {};\n\t\tif (_.isFunction(this.templateVars)) {\n\t\t\tadditionalVars = this.templateVars();\n\t\t} else if (_.isObject(this.templateVars)) {\n\t\t\tadditionalVars = _.extend({}, this.templateVars);\n\t\t}\n\n\t\tif (this.model) {\n\t\t\tadditionalVars.isNew = this.model.isNew();\n\t\t}\n\n\t\tlet opts = {};\n\t\t// Defined templateDataSource\n\t\tif (_.isObject(this.templateDataSource)) {\n\t\t\topts = _.extend({}, this.templateDataSource, additionalVars);\n\t\t}\n\t\t// Model view\n\t\telse if (this.model && this.model.attributes) {\n\t\t\topts = _.extend({}, this.model.attributes, additionalVars);\n\t\t}\n\t\t// Collection view\n\t\telse if (this.collection) {\n\t\t\topts = _.extend({}, this.collection.templateProps, additionalVars);\n\t\t}\n\t\t// Generic view\n\t\t// TODO: this needs to go away - if a view has not specified a data source, it gets no data in the template!\n\t\telse {\n\t\t\topts = _.extend({}, this, additionalVars);\n\t\t}\n\n\t\tconst headerTitle = this.headerTitle;\n\t\tif (headerTitle != null && opts.headerTitle == null) {\n\t\t\topts.headerTitle = headerTitle;\n\t\t}\n\t\treturn this.template.call(this, opts);\n\t}\n\n\t/**\n\t * enableAction: enables an action. This happens automatically when actions have Enablers.\n\t * @method\n\t * @private\n\t * @param {} action An Action object, or an event string that identifes a registered Action object\n\t * @param {boolean} [options.redelegate] Should delegateEvents() be called?\n\t * @param {boolean} [options.targetView] Trigger the action on a view other than this one.\n\t */\n\tenableAction(action, options) {\n\t\tif (_.isString(action)) {\n\t\t\taction = FindLegacyAction(action); // convert action name to action object\n\t\t}\n\n\t\tconst $target = this.$actionEls.filter(`[data-action=\"${action.event}\"]`);\n\n\t\tconst disabledClass =\n\t\t\ttypeof action.disabledClass === 'string'\n\t\t\t\t? action.disabledClass\n\t\t\t\t: 'disabled';\n\n\t\t$target.removeClass(disabledClass).enable();\n\n\t\t// Add a listener for the action's click events, via the standard Backbone.View events list.\n\t\tthis.events = this.events || {};\n\n\t\tthis.actionEvents = this.actionEvents || {};\n\n\t\tconst actionEvent = this.actionEvents[action.event];\n\n\t\tif (actionEvent) {\n\t\t\t_.each(actionEvent.els, function (el) {\n\t\t\t\tel.removeEventListener('click', actionEvent.func);\n\t\t\t\t$(el).off('tapToClick', actionEvent.func);\n\t\t\t});\n\t\t}\n\n\t\tvar clickEvent = (e) => {\n\t\t\tif (e) {\n\t\t\t\t// Be respectful\n\t\t\t\tif (\n\t\t\t\t\te.defaultPrevented ||\n\t\t\t\t\t(e.originalEvent && e.originalEvent.defaultPrevented) ||\n\t\t\t\t\t// not mouse click, but not enter or space either\n\t\t\t\t\t(e.which !== 1 && e.which !== 13 && e.which !== 32)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Actions are superseding events within them\n\t\t\t\tif (e.target.closest('.nx-ignore-action')) return;\n\t\t\t}\n\n\t\t\t// The click doesn't get up to the menu view\n\t\t\tif (this.isMenuView) {\n\t\t\t\tdispatcher.trigger('app:close:menus');\n\t\t\t}\n\n\t\t\t// With action & arguments, perform the appropriate action:\n\t\t\tthis.performAction(action, [this, e]);\n\t\t\t// Our return value will control subsequent processing of this click event.\n\t\t\t// Set it by tag type:\n\t\t\tvar tag = $(e.currentTarget).prop('tagName');\n\t\t\ttag = tag && tag.toLowerCase();\n\t\t\tif (tag == 'a') {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\n\t\t\tsimulateClickBody();\n\n\t\t\t// Our return value will control subsequent processing of this click event.\n\t\t\t// We do not want to prevent default behavior for inputs and textareas. (return true)\n\t\t\t// For all other elements, tell jQuery we are done processing this click. (return false)\n\t\t\t// THIS IS SO GROSS:\n\t\t\tif (\n\t\t\t\t!(\n\t\t\t\t\ttag == 'input' ||\n\t\t\t\t\ttag == 'select' ||\n\t\t\t\t\ttag == 'textarea' ||\n\t\t\t\t\te.currentTarget.closest('.mdc-drawer')\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t//e.stopPropagation();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t};\n\n\t\tif ($target.length) {\n\t\t\t_.each($target, function (el) {\n\t\t\t\tel.addEventListener('click', clickEvent);\n\t\t\t\tel.addEventListener('keydown', clickEvent);\n\t\t\t\t$(el).on('tapToClick', clickEvent);\n\t\t\t});\n\t\t\tthis.actionEvents[action.event] = {els: $target, func: clickEvent};\n\t\t}\n\n\t\tthis.trigger('enabledAction', action, options);\n\t}\n\n\t/**\n\t * End progress simulation\n\t * @method\n\t */\n\tendProgressSimulation() {\n\t\t// Must have been simulating to end simulation\n\t\tif (!this.simulatingProgress) return;\n\n\t\twindow.requestAnimationFrame(() => {\n\t\t\tthis.$pseudoProgressBar.width('100%').attr('aria-valuenow', '100%');\n\t\t});\n\n\t\t// Simualtion over\n\t\tthis.simulatingProgress = false;\n\n\t\t_.delay(() => {\n\t\t\tif (this.simulatingProgress) return;\n\t\t\tthis.el.removeAttribute('data-nx-simulating-progress');\n\t\t\tthis.$pseudoProgress.removeClass('active');\n\t\t\tthis.$pseudoProgressBar.width('0%').attr('aria-valuenow', 0);\n\t\t}, this.loadingClassRemoveDelay || 300);\n\t}\n\n\t/** @method */\n\tescapeKeyListener() {\n\t\tif (!this.$el.is(':visible')) return;\n\t\tthis.escape();\n\t}\n\n\t/**\n\t * this.findContextMenu(): contextmenu event (right-click, etc) handler for context menus.\n\t *\n\t * A Netx.View may define the attribute 'data-contextmenu-target' on its element to specify that\n\t * right clicks should show a context menu containing the Actions of a Netx.Menu\n\t * The value of 'data-contextmenu-target' is the name of the menu.\n\t *\n\t * You should not need to call this function directly.\n\t *\n\t * @method\n\t * @param {event} e Event\n\t * @private\n\t * @see {@link Netx.View#insertContextMenu|insertContextMenu}\n\t */\n\tfindContextMenu(e) {\n\t\t// If we have data-contextmenu-target set, we are a view trying to have a menu.\n\t\tconst menuName = this.$el.data('contextmenu-target');\n\t\tif (!menuName) return true;\n\n\t\tsimulateClickBody();\n\n\t\t// insert context menu\n\t\tthis.insertContextMenu(menuName, e);\n\t\t// Prevent browser from getting this click\n\t\treturn false;\n\t}\n\n\t/**\n\t * Get this.templateVars\n\t * @method\n\t * @return {function|object} Template variables\n\t */\n\tgetTemplateVars() {\n\t\treturn this.templateVars;\n\t}\n\n\t/**\n\t * Hide the view\n\t * @method\n\t * @param {boolean} simple Simply a flip\n\t * @fires Netx.View#hiding\n\t * @fires Netx.View#hidden\n\t * @see {@link Netx.View#show|show}\n\t * @see {@link Netx.View#toggle|toggle}\n\t */\n\thide(simple, extra) {\n\t\t// used to be function (route, simple)\n\t\tif (extra) {\n\t\t\t// if we got two args\n\t\t\tconsole.warn(\n\t\t\t\t'hide() no longer takes a route argument. Fix before v8.10',\n\t\t\t);\n\t\t\tsimple = extra;\n\t\t}\n\n\t\t// Sometimes events get piped to this method - trying to find them all, but for any remaining\n\t\tif (simple && !_.isBoolean(simple)) {\n\t\t\tsimple = false;\n\t\t}\n\n\t\t// This could change in the interim (while the beforeHidden method runs)\n\t\t// Say there was a simple hide - but while the view was hiding some conditions were met to call a hard hide - so set it and\n\t\t// delete it later - it should never be set outside of right here\n\t\tif (this._simpleHide !== false) {\n\t\t\tthis._simpleHide = simple === true;\n\t\t}\n\n\t\t// Do nothing if we are in the midst of being removed\n\t\t// or are already preparing to hide\n\t\tif (this.removing || this.preparingToHide) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We are fixing to hide but may have to wait for or do a few things first\n\t\tthis.preparingToHide = true;\n\n\t\t// When hiding is complete - check if we should remove this view\n\t\tconst checkAndRemove = () => {\n\t\t\t// Remove? If it is not a simple el hide (caused by a flip and not any actual events) -\n\t\t\t// check if the view should be removed after hiding the instance\n\t\t\tif (\n\t\t\t\t(this._simpleHide !== true || this.removeOnSimpleHide) &&\n\t\t\t\tthis.removeOnHide\n\t\t\t) {\n\t\t\t\t// Check that this view's viewCollection matches our original view collection\n\t\t\t\t// When popping views from one thing to another, we will always put the view back - there is no\n\t\t\t\t// permanant popping. It should be used to go into more focused/larger contexts but ultimately\n\t\t\t\t// still belongs to the viewCollection it was created in.\n\t\t\t\t// Also check that there are not any transient views - if there is a transient view then this\n\t\t\t\t// view that is hiding will be back when that view returns to its original home\n\t\t\t\tif (\n\t\t\t\t\t!this.viewSpec ||\n\t\t\t\t\t(this.viewSpec.currentCollection == null &&\n\t\t\t\t\t\t(!this.viewSpec.collection ||\n\t\t\t\t\t\t\t!this.viewSpec.collection.getTransient()))\n\t\t\t\t) {\n\t\t\t\t\tthis.remove();\n\t\t\t\t}\n\t\t\t}\n\t\t\t// If not a simple hide, and it is not in original `viewCollection` then it needs to be removed\n\t\t\t// from the `currentCollection`\n\t\t\telse if (\n\t\t\t\tthis._simpleHide !== true &&\n\t\t\t\tthis.viewSpec &&\n\t\t\t\tthis.viewSpec.currentCollection\n\t\t\t) {\n\t\t\t\tthis.viewSpec.currentCollection.remove(this.viewSpec);\n\t\t\t}\n\t\t\tdelete this._simpleHide;\n\n\t\t\t// It's over, we are hidden (and possibly removed)\n\t\t\tthis.preparingToHide = false;\n\t\t};\n\n\t\t// In case hide was called while we were still in the middle of showing\n\t\t// Let show finish and then we can hide, this way nothing is jerky in and out of the app\n\t\t$.when(this.showing ? this.whenShown : true).then(() => {\n\t\t\t// To save people from themselves we always have a slight hide delay in most cases\n\t\t\treturn $.when(this.hideDelayed ? this.hideDelayed : true).then(() => {\n\t\t\t\tthis.hiddenByProxy = false;\n\t\t\t\t// Not already hiding\n\t\t\t\t// I do not think there is harm in hiding something already hidden - if there is we need to fine tune a few more things\n\t\t\t\t// as if you race fast enought you can be visible to the user while not being quite \"visible\" to the code and/or vice versa\n\t\t\t\tif (!this.hiding && this.isShown) {\n\t\t\t\t\t// We are now officially starting to hide\n\t\t\t\t\tthis.trigger('hiding', this);\n\n\t\t\t\t\t// NOTE: We do not do any fliiping in here as it is assumed the event system is taking care of showing something else\n\t\t\t\t\t// It is in the `show` method that we help out with flipping\n\n\t\t\t\t\t// Wait for view to be considered hidden\n\t\t\t\t\tthis.beforeHidden(() => {\n\t\t\t\t\t\t// We are now officially hidden\n\t\t\t\t\t\tthis.trigger('hidden', this);\n\t\t\t\t\t\t// Remove?\n\t\t\t\t\t\tcheckAndRemove();\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// We are already hidden\n\t\t\t\telse if (!this.isShown) {\n\t\t\t\t\t// Remove?\n\t\t\t\t\tcheckAndRemove();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * @method\n\t * @return {array} Excluded views\n\t */\n\tgetExcludedViews() {\n\t\treturn _.pluck(this.subViews, 'el').concat(_.pluck(this.menuViews, 'el'));\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} functionalityName Functionality name\n\t * @return {boolean}\n\t */\n\thasFunctionality(functionalityName) {\n\t\treturn this.constructor.hasFunctionality(functionalityName);\n\t}\n\n\t/**\n\t * Called by view.initialize() to parse the template for the attributes 'data-action' and\n\t * 'data-action-context', which sets up listeners and does basic parsing.\n\t * @method\n\t * @private\n\t */\n\tinitializeActions() {\n\t\t// TODO: We need to support our multiView stuff in actions so we do not need to set up wrappers on every action related to\n\t\t// a modal crumb or tab item (these are created via child views and there models are the viewSpec - but all actions want the view related to the viewSpec)\n\t\t// var _view = view.model instanceof AppViewModel ? view.model.get('view') : view;\n\t\t// This needs to be handled when triggering a wrapper and enbleTest\n\n\t\tthis.$actionEls = this.$('.nx-action').purge(this.getExcludedViews());\n\t\tif (this.el.classList.contains('nx-action')) {\n\t\t\tthis.$actionEls.push(this.el);\n\t\t}\n\t\t// if this view has action context, parse it.\n\t\t// find all actions & menus in the view;\n\t\t// exclude those that actually belong to child views;\n\t\t// build arrays of their names\n\t\tthis.actions = this.$actionEls.map(function () {\n\t\t\treturn $(this).data('action');\n\t\t});\n\t\tthis.menus = this.$('.nx-action-context')\n\t\t\t.purge(this.getExcludedViews())\n\t\t\t.map(function () {\n\t\t\t\treturn $(this).data('action-context');\n\t\t\t});\n\n\t\t// find syncActions & userActions\n\t\tthis.syncActions = [];\n\t\tthis.specificSyncActions = [];\n\t\tthis.userActions = [];\n\n\t\tthis.menuActions = this.menuActions || {};\n\n\t\t// test all the actions we have buttons for\n\t\t_.each(this.actions, (c, idx, all) => {\n\t\t\tconst a = FindLegacyAction(c);\n\t\t\tif (_.isUndefined(a)) {\n\t\t\t\tconsole.warn('The action \"' + c + \"' has not been registered.\");\n\t\t\t\t// add a minimal fake action, so we still trigger an event\n\t\t\t\tRegisterLegacyAction({event: c, fake: true});\n\t\t\t} else {\n\t\t\t\tif (_.has(a, 'testOnSync')) {\n\t\t\t\t\tif (a.testOnSync !== true) {\n\t\t\t\t\t\tthis.specificSyncActions.push(a);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.syncActions.push(a);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (_.has(a, 'userLevel')) {\n\t\t\t\t\tthis.userActions.push(a);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// test all the actions we have menus (menus) for.\n\t\t_.each(this.menus, (menuName) => {\n\t\t\t// search Netx.Menus instead (or also)\n\t\t\tif (Netx.Menus[menuName]) {\n\t\t\t\t// TODO: refactor this.menus, this.menuViews, this.menuActions, etc, into one property on this\n\t\t\t\tthis.menuActions[menuName] = Netx.Menus[menuName].toActions();\n\t\t\t} else {\n\t\t\t\t// Thanks to this interesting code,\n\t\t\t\t// if we have an action named 'foo',\n\t\t\t\t// this lets us say 'data-nx-context=\"foo\"' instead of 'data-nx-action=\"foo\"' ....\n\t\t\t\t// But is this a feature we use? Does it even work? What does it do? Bug maybe? Deprecate?\n\t\t\t\tconsole.warn('using actions as menus is deprecated, gone in 8.13');\n\t\t\t\tthis.menuActions[menuName] = Netx.Actions[menuName];\n\t\t\t}\n\n\t\t\t_.each(this.menuActions[menuName], (a) => {\n\t\t\t\tif (_.has(a, 'testOnSync')) {\n\t\t\t\t\tif (a.testOnSync !== true) {\n\t\t\t\t\t\tthis.specificSyncActions.push(a);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.syncActions.push(a);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (_.has(a, 'userLevel')) {\n\t\t\t\t\tthis.userActions.push(a);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\t// Support appView instances - proxy through the actual view involved in that case\n\t\t// This is used mostly in cases where a appTabITemView is involved - the view itself does not have any syncable models/collections\n\t\t// But the view it works for does\n\t\tconst view =\n\t\t\tthis.model && this.model.isAppView ? this.model.get('view') : this;\n\n\t\tthis.specificSyncActions.forEach((action) => {\n\t\t\tif (this.configureSpecificSyncActions) {\n\t\t\t\tthis.stopListening(\n\t\t\t\t\taction.testOnSync,\n\t\t\t\t\t'sync reset',\n\t\t\t\t\tthis.configureSpecificSyncActions,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst syncListener = (this.configureSpecificSyncActions = () => {\n\t\t\t\tthis.configureActions([action]);\n\t\t\t});\n\t\t\tthis.listenTo(\n\t\t\t\taction.testOnSync,\n\t\t\t\t'sync reset',\n\t\t\t\tthis.configureSpecificSyncActions,\n\t\t\t);\n\t\t});\n\n\t\tif (view) {\n\t\t\t// Configure sync listeners for sync actions.\n\t\t\t// We have sync actions\n\t\t\tif (this.syncActions.length) {\n\t\t\t\t// But we haven't set up listeners yet, so set them up now\n\t\t\t\tif (!this.syncActionsListening) {\n\t\t\t\t\tif (view.collection) {\n\t\t\t\t\t\t// not happening on collections?\n\t\t\t\t\t\tthis.stopListening(\n\t\t\t\t\t\t\tview.collection,\n\t\t\t\t\t\t\t'sync reset',\n\t\t\t\t\t\t\tthis.configureSyncActions,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.listenTo(\n\t\t\t\t\t\t\tview.collection,\n\t\t\t\t\t\t\t'sync reset',\n\t\t\t\t\t\t\tthis.configureSyncActions,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (view.model) {\n\t\t\t\t\t\tthis.stopListening(view.model, 'sync', this.configureSyncActions);\n\t\t\t\t\t\tthis.listenTo(view.model, 'sync', this.configureSyncActions);\n\t\t\t\t\t}\n\t\t\t\t\t// avoid re-adding these listeners.\n\t\t\t\t\tthis.syncActionsListening = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// We have no sync actions.\n\t\t// But we have listeners (unlikely but not impossible), so remove them.\n\t\telse if (this.syncActionsListening) {\n\t\t\tthis.stopListening(\n\t\t\t\tview.collection,\n\t\t\t\t'sync reset',\n\t\t\t\tthis.configureSyncActions,\n\t\t\t);\n\t\t\tthis.stopListening(view.model, 'sync', this.configureSyncActions);\n\t\t\tdelete this.syncActionsListening;\n\t\t}\n\n\t\t// Configure sync listeners for user actions ...\n\t\t// TODO: this was from when we had to wait for Netx.user.profile. Now that we are assured of having that object before\n\t\t// the application starts, I'm not sure this matters any more.\n\t\tif (this.userActions.length) {\n\t\t\tif (!this.userActionsListening) {\n\t\t\t\tthis.stopListening(userProfile, 'sync', this.configureUserActions);\n\t\t\t\tthis.listenTo(userProfile, 'sync', this.configureUserActions); // could be \"change:userLevel\" instead of \"sync\" ...\n\t\t\t\tthis.userActionsListening = true;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.userActionsListening) {\n\t\t\t\tthis.stopListening(userProfile, 'sync', this.configureUserActions);\n\t\t\t}\n\t\t}\n\t}\n\n\t/*\n\t * initializeKeyListeners() is called by view.initialize() and checks for key events\n\t * @private\n\t */\n\tinitializeKeyListeners() {\n\t\t// Listen for escape key if property is set\n\t\tif (!_.isFunction(this.escape)) return this;\n\n\t\treturn this.stopListening(\n\t\t\tdispatcher,\n\t\t\t'key:escape',\n\t\t\tthis.escapeKeyListener,\n\t\t).listenTo(dispatcher, 'key:escape', this.escapeKeyListener);\n\t}\n\n\t/**\n\t * this.insertContextMenu() inserts a given menu in this view, positioned underneath the mouse pointer.\n\t * @param string menuName\n\t * @param {event} e The original click event (required for positioning)\n\t */\n\tinsertContextMenu(menuName, e) {\n\t\tconst menuOptions = {\n\t\t\tclassName: 'dropdown',\n\t\t\tmodel: this.model,\n\t\t\tcollection: this.menuCollection || this.collection,\n\t\t\tcontext: true,\n\t\t};\n\n\t\tif (!this.useAdvancedMenu) {\n\t\t\tmenuOptions.menu = Netx.Menus[menuName];\n\t\t\t// Warn about obsolete menus:\n\t\t\tif (menuOptions.menu && menuOptions.menu.get('deprecated')) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Menu ${menuName} deprecated, gone after ${menuOptions.menu.get(\n\t\t\t\t\t\t'deprecated',\n\t\t\t\t\t)}.`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Look for custom template\n\t\tconst templateName = this.useAdvancedMenu\n\t\t\t? menuName\n\t\t\t: (this.$el.attr('data-nx-template') || '').replace('menuView-', '');\n\t\tif (templateName != null) {\n\t\t\tmenuOptions.template = MenuTemplates[templateName];\n\t\t}\n\n\t\t// Menu view type\n\t\tconst menuView = (this.menuView = this.useAdvancedMenu\n\t\t\t? new Netx.Views.AdvancedMenuView(menuOptions)\n\t\t\t: new Netx.Views.MenuView(menuOptions));\n\n\t\t// Where to append menu\n\t\tlet appendTo = this.$el.data('contextmenu-container') || 'body';\n\n\t\t// Set it apart\n\t\tmenuView.$el.addClass('contextmenu');\n\n\t\t// Render and show\n\t\tmenuView.render().$el.appendTo(appendTo);\n\n\t\t// iOS safari has some real issues\n\t\t// if we do not do something here the menu will either hide immediately\n\t\t// or an action that is now beneath your finger will fire\n\t\tlet canHide = true;\n\t\tif (/iphone|ipad|ipod/i.test(navigator.userAgent)) {\n\t\t\tcanHide = false;\n\t\t\tmenuView.$el.find('.dropdown-menu').css('pointer-events', 'none');\n\t\t\t_.delay(() => {\n\t\t\t\tcanHide = true;\n\t\t\t\tmenuView.$el.find('.dropdown-menu').css('pointer-events', 'initial');\n\t\t\t}, 300);\n\t\t}\n\n\t\t// show menu\n\t\tmenuView.$el.find('[data-toggle=\"dropdown\"]').click();\n\n\t\t// Move the menu underneath the mouse\n\t\tmenuView.$el.css(_.getMenuPosition(e, menuView.$el));\n\n\t\t// Remove and destroy the menuView when it gets closed.\n\t\tmenuView.$el.on('hide.bs.dropdown', () => {\n\t\t\tif (!canHide) {\n\t\t\t\t// Reshow\n\t\t\t\tmenuView.$el.find('[data-toggle=\"dropdown\"]').click();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.defer(() => {\n\t\t\t\tthis.trigger('context:menu:removed', menuView);\n\t\t\t\tmenuView.$el.off('hide.bs.dropdown');\n\t\t\t\tmenuView.remove();\n\t\t\t\tdelete this.menuView;\n\t\t\t});\n\t\t});\n\n\t\t// Make menuView remove itself when its parent (this) is removed\n\t\tmenuView.stopListening(this, 'removed').listenTo(this, 'removed', () => {\n\t\t\tmenuView.remove();\n\t\t});\n\n\t\t// deprecated 2016-07-01 - Left for legacy as no longer are we deferred thanks to pre-compiling our templates\n\t\t// TODO: actually go and remove the listeners for this event from the three views that use it.\n\t\tthis.trigger('context:menu:rendered', menuView);\n\t}\n\n\t/**\n\t * insertMenu creates a menuView and inserts it in the given element, which must have a data-action-context attr.\n\t * @method\n\t * @private\n\t * @param {jQuery} $menuEl Selector for the data-action-context element\n\t * @param {string} menuName Name of the menu (key to this.menus)\n\t * @param {boolean} vanish Should this menu remove itself when it hides?\n\t * @return {Netx.View} Menu view\n\t */\n\tinsertMenu($menuEl, menuName, vanish) {\n\t\tif (!menuName) {\n\t\t\tthrow new Error('insertMenu called on non-menu');\n\t\t}\n\n\t\t// TODO: Talk about the fact model is undefined and collection has 0 models\n\t\t// But- really in the context of where I was testing- appHeader - was one hoping the menu would be privy to the view it was called in's model and collection? Maybe?\n\t\tvar menuOptions = {\n\t\t\tmodel: this.model,\n\t\t\tcollection: this.collection,\n\t\t\tmenu: Netx.Menus[menuName],\n\t\t};\n\n\t\tif (!menuOptions.menu) {\n\t\t\tthrow new Error('Can\\'t find menu \"' + menuName + '\"');\n\t\t}\n\n\t\t// Warn about obsolete menus:\n\t\tif (menuOptions.menu.get('deprecated')) {\n\t\t\tconsole.warn(\n\t\t\t\t'Menu ' +\n\t\t\t\t\tmenuName +\n\t\t\t\t\t' deprecated, gone after ' +\n\t\t\t\t\tmenuOptions.menu.get('deprecated') +\n\t\t\t\t\t'.',\n\t\t\t);\n\t\t}\n\n\t\t// Look for custom template\n\t\tvar templateName = ($menuEl.attr('data-nx-template') || '').replace(\n\t\t\t'menuView-',\n\t\t\t'',\n\t\t);\n\t\tif (templateName != null) {\n\t\t\tmenuOptions.template = MenuTemplates[templateName];\n\t\t}\n\n\t\t// Create menu view if it doesn't exit\n\t\tthis.menuViews = this.menuViews || {};\n\n\t\t// Find/create view, and attach.\n\t\tvar mv = this.menuViews[menuName] || new Netx.Views.MenuView(menuOptions);\n\t\tthis.menuViews[menuName] = mv;\n\t\tif (mv.el !== $menuEl && mv.$el !== $menuEl) {\n\t\t\tmv.setElement($menuEl);\n\t\t}\n\n\t\tvar $parent = mv.$el.parent();\n\n\t\t// The menu can remove itself when hidden\n\t\tif (vanish) {\n\t\t\t// Remove and destroy the menuView when it gets closed.\n\t\t\t$parent.off('hide.bs.dropdown.nx').on(\n\t\t\t\t'hide.bs.dropdown.nx',\n\t\t\t\t_.bind(function (e) {\n\t\t\t\t\t// This isn't going to work\n\t\t\t\t\t// By stopping propagation, it does not just stop the flow of the event upwards, it stops any\n\t\t\t\t\t// other event listener on the element for this event - namespace is not a consideration.\n\t\t\t\t\t// Instead: just respond to the event if it pertains directly to us and then we do not need\n\t\t\t\t\t// to worry about the upward flow of the event\n\t\t\t\t\t// e.stopPropagation();\n\t\t\t\t\tif (e.target == $parent[0]) {\n\t\t\t\t\t\t// Delete the menu view ... this is more complicated than it should be.\n\t\t\t\t\t\t// This defer allows any other event listener to do its thing. Whithout it you risk flickers and other oddities.\n\t\t\t\t\t\t_.defer(\n\t\t\t\t\t\t\t_.bind(function () {\n\t\t\t\t\t\t\t\t$parent.off('hide.bs.dropdown.nx');\n\t\t\t\t\t\t\t\t// We can't just call mv.remove(), but we can't because we installed our view on a UL element and we need to leave that element behind.\n\t\t\t\t\t\t\t\tmv.removeInner();\n\t\t\t\t\t\t\t\tdelete this.menuViews[menuName];\n\t\t\t\t\t\t\t}, this),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}, this),\n\t\t\t);\n\t\t}\n\n\t\t// make mv remove itself when its parent (this) is removed\n\t\tmv.stopListening(this, 'removed');\n\t\tmv.listenTo(this, 'removed', function () {\n\t\t\tif (vanish) {\n\t\t\t\t// We create a lot of menus - be safe and overkill events\n\t\t\t\t$parent.off('hide.bs.dropdown.nx');\n\t\t\t}\n\t\t\t// because .listenTo sets context, this 'this' == mv.\n\t\t\tthis.remove();\n\t\t});\n\n\t\t// Return menu view\n\t\treturn mv;\n\t}\n\n\t/**\n\t * A view can be attached to either a Model or a Collection;\n\t * this.isCollectionView() is the canonical way to tell the difference.\n\t * @method\n\t * @return {boolean} Is collection view\n\t */\n\tisCollectionView() {\n\t\treturn this.model == null;\n\t}\n\n\t/**\n\t * For more complicated responses to route changes, a modal view can override this.isMyRoute();\n\t * It receives the current route, and returns true if the route is one it expects to\n\t * be showing for, or false if it expects to close. The default implementation respects\n\t * this.stickyModal.\n\t * @method\n\t * @param {string} route The current route.\n\t * @return {boolean}\n\t * @see {@link Netx.View#isMyRoute|isMyRoute}\n\t */\n\tisMyRoute(route) {\n\t\tif (this.stickyModal) return true;\n\t\tif (this.routeMatch) {\n\t\t\treturn _.isString(this.routeMatch)\n\t\t\t\t? route === this.routeMatch\n\t\t\t\t: !_.isNull(route.match(this.routeMatch));\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Hide is about to start\n\t * At this point no animations or actual hiding [should] have taken place\n\t * @method\n\t * @listens Netx.View#hiding\n\t */\n\tonHiding(view) {\n\t\tif (view !== this) return;\n\n\t\t// Definitely not showing\n\t\tthis.showing = false;\n\t\t// Set the appropriate hiding stuff\n\t\tthis.hiding = true;\n\t\tthis.el.removeAttribute('data-nx-showing');\n\t\tthis.el.setAttribute('data-nx-hiding', true);\n\t\t//this.$el.removeClass('showing').addClass('hiding');\n\t}\n\n\t/**\n\t * Show is about to start\n\t * At this point no animation or actual showing [should] have taken place\n\t * @method\n\t * @listens Netx.View#showing\n\t */\n\tonShowing(view) {\n\t\tif (view !== this) return;\n\n\t\t// Definitely not hiding anymore\n\t\tthis.hiding = false;\n\t\t// Set the appropriate showing stuff\n\t\tthis.showing = true;\n\t\tthis.el.removeAttribute('data-nx-hiding');\n\t\tthis.el.setAttribute('data-nx-showing', true);\n\t\t//this.$el.removeClass('hiding').addClass('showing');\n\t}\n\n\t/**\n\t * Parse the contents of an action object and execute its action\n\t *\n\t * @param Object action An action object\n\t * @param Array actionArgs A set of action arguments.\n\t * @method\n\t * @private\n\t */\n\tperformAction(action, actionArgs) {\n\t\tvar e = _.last(actionArgs);\n\n\t\t//\n\t\t// Generic handler for all Action clicks:\n\t\t//\n\t\tif (action.fake) {\n\t\t\tconsole.warn(\n\t\t\t\t'The action \"' + action.event + '\" has not been registered.',\n\t\t\t);\n\t\t}\n\n\t\t// if this view has defined an actionWrapper for this action, run the arguments through that.\n\t\tif (\n\t\t\tthis.actionWrappers &&\n\t\t\t_.isFunction(this.actionWrappers[action.event])\n\t\t) {\n\t\t\tactionArgs = this.actionWrappers[action.event].apply(this, actionArgs);\n\t\t\tif (!_.isArray(actionArgs)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"view.actionWrapper['\" + action.event + \"'] did not return an array\",\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// or else, if the action itself defined a wrapper, run the arguments through that.\n\t\telse if (_.isFunction(action.wrapper)) {\n\t\t\tactionArgs = action.wrapper.apply(this, actionArgs);\n\t\t\tif (!_.isArray(actionArgs)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Action wrapper for ' + action.event + ' did not return an array',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// close any/all open dropdown menus\n\t\t// TODO: have the menus respond to an event, instead of scraping the entire DOM on every click.\n\t\tdispatcher.trigger('app:close:menus');\n\t\t//$('.dropdown.open .dropdown-toggle').click();\n\n\t\t// If this action has a route, route to it\n\t\tif (_.isFunction(action.route)) {\n\t\t\t// route can be a function that takes args & returns a string\n\t\t\tappRouter.navigate(action.route.apply(this, actionArgs), true);\n\t\t} else if (_.isString(action.route)) {\n\t\t\t// it can also be a plain string.\n\t\t\t// TODO: such actions could be rendered as simple hrefs that can be enabled/disabled, so the browser can do this part ...\n\t\t\tappRouter.navigate(action.route, true);\n\t\t}\n\n\t\t// If this action has a link, send the browser to it.\n\t\t// (Again, this could have been rendered as a simple href ...)\n\t\telse if (_.isString(action.link)) {\n\t\t\t// a link could be of the format \"#route\", or \"/other/site/on/this/host\" or even \"http://google.com\"\n\t\t\twindow.location = action.link;\n\t\t\treturn;\n\t\t}\n\n\t\t// If no view & no route, trigger this action's event\n\t\telse {\n\t\t\tactionArgs.unshift(action.event);\n\t\t\tdispatcher.trigger.apply(dispatcher, actionArgs);\n\t\t}\n\n\t\tthis.trigger('performedAction', action);\n\t}\n\n\t/**\n\t * Prevent default event\n\t * @method\n\t */\n\tpreventDefault(e) {\n\t\te && e.preventDefault && e.preventDefault();\n\t\treturn false;\n\t}\n\n\t/**\n\t * Pre-Render hook: preRender() is called by render(), and runs first.\n\t * The default method is null by default, and can be overridden without concern.\n\t * It will not be called until the template is loaded.\n\t * @see {@link Netx.View#postRender|postRender}\n\t * @see {@link Netx.View#render|render}\n\t */\n\tpreRender() {\n\t\t// Cleanup lazyloader\n\t\tthis.Plugins.Destroy('lazyloader');\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Post-Render hook: postRender() is called immediately after render completes.\n\t * The default method is null by default and can be overriden without concern.\n\t * It will not be called until the template is loaded.\n\t * @see {@link Netx.View#preRender|preRender}\n\t * @see {@link Netx.View#render|render}\n\t */\n\tpostRender() {\n\t\t//console.debug('POST-RENDER');\n\t}\n\n\t/** @override */\n\tremove() {\n\t\t// This is already happening\n\t\tif (this.removing) return;\n\n\t\tthis.trigger('removeHook', this);\n\n\t\tthis.cleanUpActionEvents();\n\t\tdelete this.$actionEls;\n\n\t\t// We want to know when we are removing\n\t\t// The reason being - when we remove we fire off all appropriate events to hide/remove/cancel our children - the thing is - when children remove\n\t\t// we check to see if there is anything left in our viewCollection - if nothing is left we fire `this.hide` - essentially starting this whole thing over -\n\t\t// which confuses appModalView as the view is already gone as far as it was concerned but the hide event gets back to it - it check its viewCollection\n\t\t// length - see's only 1 and assumes that that is it - modal game over (as why bother trying to do anything fancy if only one view is there at hide time)\n\t\tthis.removing = true;\n\n\t\tthis.menuView && this.menuView.remove();\n\n\t\tthis.unbindEvents();\n\n\t\t// clean up any pending stuff\n\t\tthis._hiddenDeferred.state() === 'pending' &&\n\t\t\tthis._hiddenDeferred.resolve();\n\t\tthis._shownDeferred.state() === 'pending' && this._shownDeferred.resolve();\n\t\tthis.rendered.state() === 'pending' && this.rendered.reject();\n\t\tthis.whenImagesLoaded &&\n\t\t\tthis.whenImagesLoaded.state() === 'pending' &&\n\t\t\tthis.whenImagesLoaded.reject();\n\t\tthis.whenShown.state() === 'pending' && this.whenShown.reject();\n\t\tthis.whenHidden.state() === 'pending' && this.whenHidden.reject();\n\n\t\t// Destroy all plugins\n\t\tthis.Plugins.Destroy();\n\n\t\t// Remove any children we may have.\n\t\tthis.removeAllSubViews();\n\n\t\tthis.pseudoProgressInterval && clearInterval(this.pseudoProgressInterval);\n\n\t\tsuper.remove();\n\n\t\tNetx.viewStats[this.constructor.__name__]--;\n\n\t\tthis.trigger('removed');\n\n\t\tthis.off();\n\t}\n\n\t/**\n\t * @method\n\t */\n\tremoveAllSubViews() {\n\t\t_.invoke(this.subViews, 'remove');\n\t\tthis.subViews = {};\n\t\treturn this;\n\t}\n\n\t/**\n\t * If a child is removing a view added with addSubView(), they should call removeSubView() to clean up its reference\n\t * so memory can be freed.\n\t * @method\n\t * @param {string|Netx.View} idx Either a view or a view's .cid (which is a unique ID)\n\t * @param {boolean} destroyView Whether or not to destroy the view\n\t * @see {Netx.View#addSubView}\n\t */\n\tremoveSubView(idx, destroyView) {\n\t\tif (idx === void 0) return;\n\n\t\tif (idx.cid && idx.cid.includes('view')) {\n\t\t\tidx = idx.cid;\n\t\t}\n\n\t\tconst view = this.subViews[idx];\n\t\tdelete this.subViews[idx];\n\t\tdestroyView && view && view.remove();\n\t\treturn view;\n\t}\n\n\t/**\n\t * Render: paint a view's DOM objects.\n\t * render() calls doTemplate() to generate templated HTML, and installs that HTML in the\n\t * view's element, $el. The preRender() and postRender() hooks are called before and after.\n\t *\n\t * NOTE: render() is asynchronous. Templates load on demand as views are instantiated, and if\n\t * render() is called before the template is loaded it returns immediately, but actual\n\t * rendering is deferred until the template is available. Listen for the Backbone event\n\t * \"rendered\" on the View object itself (not the dispatcher) to know when rendering has completed,\n\t * or attach a done handler to the Promise object this.rendered .\n\t *\n\t * render() is quite complex; ideally, views will not need to override this method,\n\t * and will override the pre- and post- hooks instead. If you must override render,\n\t * be sure to call it in your custom render method via this._super().\n\t *\n\t * render() returns the view itself, for daisychaining in the Backbone pattern.\n\t *\n\t * @see {@link Netx.View#doTemplate|doTemplate}\n\t * @see {@link Netx.View#preRender|preRender}\n\t * @see {@link Netx.View#postRender|postRender}\n\t * @see {@link Netx.View#renderElement|renderElement}\n\t */\n\t//\n\t// DEVNOTE: the definition below of render() is wrapped in the initializer (above), which\n\t// passes it the argument 'deferred'. But for the sake of clarity I'm putting the\n\t// documentation here for the external render() method (i.e. the wrapper), which does not\n\t// take an argument.\n\t//\n\t// ... and yes, we need to do it that way, in order to implement pre- and post- hooks on any overridden render() method.\n\t//\n\trender() {\n\t\t// We debounce some renders - do not render if we are removing/removed\n\t\tif (this.removing) return;\n\n\t\t// This is a cleaner way of having to check - `!this.renderedOnce` then `this.listenToOnce( this, 'rendered', ... )`\n\t\t// You can just say `this.rendered.then(...)`\n\t\t// Usefule for things that get declared in the initialize method but do not want to act until the view has first rendered\n\t\tif (this.rendered.state() !== 'pending') {\n\t\t\tthis.rendered = new $.Deferred();\n\t\t}\n\n\t\tif (this.whenImagesLoaded && this.whenImagesLoaded.state() === 'pending') {\n\t\t\tthis.whenImagesLoaded.reject();\n\t\t}\n\t\t// Let our view know when its images have loaded\n\t\tthis.whenImagesLoaded = new $.Deferred();\n\n\t\tthis.cleanUpActionEvents();\n\n\t\t// Call pre-render hook before we touch anything.\n\t\tthis.trigger('preRenderHook', this);\n\t\tthis.preRender();\n\t\tthis.unbindEvents();\n\n\t\t// Modifying this.el begins here.\n\t\t// When adding anything new to the render process,\n\t\t// alway add it after this point, or else\n\t\t// preRender() can't access the unmodified version\n\t\tsuper.render();\n\n\t\tlet html;\n\t\t// try to apply the template; catch any template errors.\n\t\ttry {\n\t\t\thtml = this.doTemplate();\n\t\t} catch (error) {\n\t\t\tconsole.error(`Exception in template ${this.constructor.__name__}`);\n\t\t\tthrow error;\n\t\t}\n\n\t\t// Further research finds that this method is about 30% faster (on Chrome at least):\n\t\tif (!this.el) {\n\t\t\t// WTF? Caused by some extension code in custom controller, altering UserPrefsView and SearchRulesView by deleting 'el' in the prototypes.\n\t\t\t// TODO: move those extensions to the new extension system & this won't happen.\n\t\t\t// TODO: our views should not define 'el' in the first place. Probably an old mistake. Fix those in core, then delete this whole hack.\n\t\t\t// Meanwhile, revert to the old algorithm for just these two views.\n\t\t\tthis.el = document.createElement(this.tagName);\n\t\t\tthis.$el = $(this.el);\n\t\t}\n\t\tthis.el.innerHTML = html;\n\t\t// TODO: if we could translate the html before adding it to the DOM, it might be faster still\n\t\tthis.$el.localize();\n\n\t\t// attach model ID to all model views:\n\t\tif (this.model && this.model.id) {\n\t\t\tthis.$el.attr('data-nx-model-id', this.model.id);\n\t\t}\n\n\t\t// process any AutoTemplate directives in the template (and potentially load other templates)\n\t\tdispatcher.trigger('autoTemplate:scan', this.$el);\n\n\t\t// install & configure Actions in this template\n\t\tthis.initializeActions();\n\t\tthis.renderActions();\n\n\t\t// Count/total collection items\n\t\tthis.$count = this.$('.nx-count');\n\t\t// Do not interfere with children\n\t\tif (this.$childTargetEl && this.$childTargetEl.find(this.$count).length) {\n\t\t\tthis.$count = null;\n\t\t}\n\t\tthis.updateCount();\n\n\t\t// Done modifying this.el.\n\t\t// Don't add modifications after here, or\n\t\t// postRender() won't have access to them.\n\n\t\t// call post-render hook\n\t\tthis.trigger('postRenderHook', this);\n\t\tthis.postRender();\n\n\t\t// Add/remove `no-assets`/`no-results`/`no-matches` classes\n\t\t// TODO: Stop using `no-assets`, instead use `no-results`\n\t\tthis.checkHasResults();\n\n\t\t// install key listeners\n\t\tthis.initializeKeyListeners();\n\n\t\t// Re-attach event listeners.\n\t\t// http://ianstormtaylor.com/rendering-views-in-backbonejs-isnt-always-simple/\n\t\tthis.delegateEvents();\n\n\t\t// Backstory:\n\t\t// We have relied on this rendered promise to so something once in initialize after it is resolved\n\t\t// In a lot of cases we only want this to happen on the first render - so moving the code to postRender is not going to be good for us\n\t\t// I do not see any harm in triggering a rendered event on the view that we can `listenToOnce` and accomplish what we want\n\t\t// I have deferred this event because we chanin our renders a lot - I do not want the event to fire until we are done with our chain\n\t\t_.defer(() => {\n\t\t\t// When we need to do something on only the first render, in some more complciated views, we can just\n\t\t\t// use `.then` rather than having to check `this.renderedOnce` -> `this.listenToOnce(this, 'rendered' ... )`\n\t\t\t// Use cases are for when you only want to do something once on rendered (so postRender will not cut it, though,\n\t\t\t// you could check for `this.renderedOnce` in `postRender`, but all the places we would need to do this, `postRender`\n\t\t\t// just doesn't seem like the appropriate place - `initialize` is a better place for 99% of that logic.\n\t\t\tthis.rendered.resolveWith(this);\n\t\t\tthis.trigger('rendered');\n\t\t\t// Now listen for view's images to load\n\t\t\tthis.$el.imagesLoaded(() => {\n\t\t\t\tthis.whenImagesLoaded.resolveWith(this);\n\t\t\t});\n\n\t\t\tthis.bindEvents();\n\t\t});\n\n\t\t// We have rendered once (at least)\n\t\tthis.renderedOnce = true;\n\n\t\tthis.trigger('renderedHook', this);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * renderActions() is called after view.render(), to install context menus and buttons in the DOM.\n\t * @method\n\t * @private\n\t */\n\trenderActions() {\n\t\t// are there any actions to activate?\n\t\tthis.configureActions(_.map(this.actions, FindLegacyAction));\n\n\t\t// any menus to install?\n\t\tif (!this.menus.length) return this;\n\n\t\t_.each(this.menus, (menuName) => {\n\t\t\tvar $menuEl = this.$(\n\t\t\t\t'.nx-action-context[data-action-context=\"' + menuName + '\"]',\n\t\t\t);\n\t\t\tvar triggerEvent =\n\t\t\t\t$menuEl.closest('[data-nx-trigger]').data('nxTrigger') || 'click';\n\n\t\t\t// TODO: this is a hack for DAM-12956 until we reqork menus. Not injecting and testing now could mean an empty menu\n\t\t\t// displaying until hover (at which point it disappears like it should have)\n\t\t\tif (\n\t\t\t\ttriggerEvent !== 'mouseover' &&\n\t\t\t\t$menuEl.filter('.dropdown-menu').length > 0\n\t\t\t) {\n\t\t\t\t// we don't really \"render\" dropdowns any more; we wait for a triggerEvent, and create the menuView then.\n\t\t\t\tvar $trigger = $menuEl.siblings('.dropdown-toggle'); // changed a.dropdown-toggle to .dropdown-toggle (buttons are dropdowns too!)\n\t\t\t\t$trigger.off(triggerEvent + '.data-action-context');\n\t\t\t\t$trigger.on(\n\t\t\t\t\ttriggerEvent + '.data-action-context',\n\t\t\t\t\t_.bind(function () {\n\t\t\t\t\t\tthis.insertMenu($menuEl, menuName, true).render();\n\t\t\t\t\t\tthis.configureMenu(menuName);\n\t\t\t\t\t}, this),\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// normal menus are created now\n\t\t\t\tthis.insertMenu($menuEl, menuName, false).render();\n\t\t\t\tthis.configureMenu(menuName);\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Backbone generally updates the screen by re-rendering a view via view.render(). But sometimes we don't want to re-render\n\t * a whole view; for instance, third-party plugins may be bothered if our DOM objects are deleted and re-created.\n\t * renderElement() replaces just one element of our template, specified by a jQuery selector, with freshly template-generated HTML.\n\t * Canonical usage:\n\t * @example\n\t * this.renderElement(selector, this.doTemplate());\n\t * @see {@link Netx.View#render|render}\n\t */\n\trenderElement(selector, the_html) {\n\t\t// convert the_html to DOM object.\n\t\tconst jq = $('
        ' + the_html + '
        ');\n\t\tconst the_el = jq.find(selector);\n\t\tif (the_el.length == 0) {\n\t\t\tconsole.warn('selector found nothing');\n\t\t\treturn;\n\t\t}\n\t\tconst new_html = the_el.html();\n\t\t// install where needed.\n\t\tthis.$(selector).html(new_html).localize();\n\t\t// If there are actions in the new html, initialize and render them.\n\t\tif (\n\t\t\tnew_html.match(/data-action=/) ||\n\t\t\tnew_html.match(/data-action-context=/)\n\t\t) {\n\t\t\tthis.initializeActions();\n\t\t\tthis.renderActions();\n\t\t}\n\t\t// If there are autocomplete fields in the new html, initialize them.\n\t\t//this.detectAutocomplete(this.$(selector));\n\t}\n\n\t/**\n\t * @method\n\t * @param {event} e `search` event\n\t */\n\tsearch(e) {\n\t\tlet str = (_.isString(e) ? e : (e && e.detail) || '').trim();\n\t\tif (str && str.length >= 2) {\n\t\t\tthis.collection.setFilterStr(str);\n\t\t}\n\t\t// Only clear if we previously had a search str of 2 characters or more\n\t\telse if (\n\t\t\tthis.collection.filterStr &&\n\t\t\tthis.collection.filterStr.length >= 2\n\t\t) {\n\t\t\tthis.collection.setFilterStr('');\n\t\t}\n\t}\n\n\t/** @method */\n\tsetCollection(collection, opts = {}) {\n\t\tif (this.collection && this.collection === collection) return;\n\n\t\tthis.unbindCollectionEvents();\n\n\t\tthis.collection = collection;\n\t\t_.invoke(this.menuViews, 'setCollection', collection);\n\n\t\tthis.bindCollectionEvents();\n\t\tthis.addLoadingClasses_internal();\n\t\tthis.checkHasResults();\n\n\t\tif (this.renderOnSetCollection !== false && !opts.silent) {\n\t\t\tthis.render();\n\t\t}\n\t}\n\n\t/**\n\t * We want to maintain all class names when we set element\n\t * @override\n\t */\n\tsetElement(element, delegate) {\n\t\tlet className = this.el && this.el.classList ? this.el.className : [];\n\t\tclassName = `${className} ${this.className || ''}`;\n\n\t\tsuper.setElement(element, delegate);\n\n\t\tthis.$el.addClass(className);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Netx.View listens for 'setModel' events that pass a new model; these are routed to\n\t * a .setModel(model, options) function. Children of this class can add handling\n\t * for model changes by overriding that method. Ditto for 'setCollection'\n\t */\n\tsetModel(model, opts = {}) {\n\t\tif (this.model && this.model === model) return;\n\n\t\tthis.unbindModelEvents();\n\n\t\tthis.model = model;\n\t\t_.invoke(this.menuViews, 'setModel', model);\n\n\t\tthis.bindModelEvents();\n\t\tthis.addLoadingClasses_internal();\n\n\t\tif (this.renderOnSetModel !== false && !opts.silent) {\n\t\t\tthis.render();\n\t\t}\n\t}\n\n\t/**\n\t * Show the view; hide sibling views within the same viewCollection\n\t * @method\n\t * @fires Netx.View#showing\n\t * @fires Netx.View#shown\n\t * @see {@link Netx.View#hide|hide}\n\t * @see {@link Netx.View#toggle|toggle}\n\t */\n\tshow() {\n\t\t// Do nothing if we are in the midst of being removed\n\t\tif (this.removing) return this;\n\n\t\t// We are no longer planning on hiding (or at least remaining hidden if a hide is in progress)\n\t\tthis.preparingToHide = false;\n\n\t\t// In case hide was called while we were still in the middle of hiding\n\t\t// Let hide finish and then we can show, this way nothing is jerky in and out of the app\n\t\t// Also, make sure we are not removing when hide is over\n\t\t$.when(\n\t\t\tthis.hiding && (this._simpleHide || !this.removeOnHide)\n\t\t\t\t? this.whenHidden\n\t\t\t\t: true,\n\t\t)\n\t\t\t.then(() => {\n\t\t\t\tthis.shownByProxy = false;\n\t\t\t\tlet hidePromise;\n\t\t\t\t// Hide any other visible siblings\n\t\t\t\t// Do this before showing the newly active view so we do not end up with uneven animations in/out\n\t\t\t\t// This will be firing off at almost the same time as `this.beforeShown`\n\t\t\t\t// This should happen regardless of if the view was already shown\n\t\t\t\tif (\n\t\t\t\t\tthis.viewSpec &&\n\t\t\t\t\t(this.viewSpec.currentCollection || this.viewSpec.collection)\n\t\t\t\t) {\n\t\t\t\t\t// We want to toglle views in the right `viewCollection` context\n\t\t\t\t\t(this.viewSpec.currentCollection || this.viewSpec.collection).each(\n\t\t\t\t\t\t(viewSpec) => {\n\t\t\t\t\t\t\t// Sometimes - due to timing - we get into a position where we are looping\n\t\t\t\t\t\t\t// while a view is being removed (like a removeOnHide situation) - so just check\n\t\t\t\t\t\t\t// that the model is still defined\n\t\t\t\t\t\t\tif (viewSpec != null) {\n\t\t\t\t\t\t\t\tconst _view = viewSpec.get('view');\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t_view &&\n\t\t\t\t\t\t\t\t\t_view.cid !== this.cid &&\n\t\t\t\t\t\t\t\t\t(viewSpec.get('active') || _view.isShown)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t// Be sure to pass true as this was not caused by any actual events\n\t\t\t\t\t\t\t\t\t_view.hide(true);\n\t\t\t\t\t\t\t\t\thidePromise = _view.whenHidden;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// Not already showing and is not shown\n\t\t\t\tif (!this.showing && !this.isShown) {\n\t\t\t\t\treturn $.when(hidePromise || true).then(() => {\n\t\t\t\t\t\t// We are now officially starting to show\n\t\t\t\t\t\tthis.trigger('showing', this);\n\t\t\t\t\t\t// Wait for view to be considered shown\n\t\t\t\t\t\tthis.beforeShown(() => {\n\t\t\t\t\t\t\t// We are now officially shown\n\t\t\t\t\t\t\tthis.trigger('shown', this);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((ex) => {\n\t\t\t\tconsole.error(`Error showing view`, this, '\\n', ex);\n\t\t\t});\n\t\treturn this;\n\t}\n\n\t/**\n\t * showLoaded expects the same event signature as a Backbone.Sync event\n\t * @method\n\t * @param {Netx.Collection|Netx.Model} thing Instance of Netx.Collection or Netx.Model\n\t * @param {mixed} resp Response\n\t * @param {object} opts Request options\n\t */\n\tshowLoaded(thing, resp, opts = {}) {\n\t\t// PSEUDO PROGRESS\n\t\tthis.endProgressSimulation();\n\n\t\t// If this is part of an app view collection - let the view model know\n\t\t// All loading events will bubble up to the app view collection and the main view can make decisions on how to handle it\n\t\tif (\n\t\t\tthis.viewSpec != null &&\n\t\t\tthing != null &&\n\t\t\t!(thing instanceof this.constructor)\n\t\t) {\n\t\t\tthis.viewSpec.trigger('loaded', thing, this);\n\t\t}\n\n\t\tconst el = this.el;\n\n\t\t// Whether we use loading classes or not - we ought to remove this - because we do not check\n\t\t// for loading classes when we call this.showNotLoaded()\n\t\tel.removeAttribute('data-nx-not-loaded');\n\n\t\tthis.checkHasResults();\n\n\t\t// Just because loading is done on the model/collection doesn't mean we have had enough time to deal with the render\n\t\t// You wind up seeing old data for a split second in a lot of places where we utilize .loading to hide information\n\t\tif (opts.loadingClasses !== false) {\n\t\t\tel.removeAttribute('data-nx-loading');\n\t\t\tel.classList.remove('loading-chunk');\n\t\t}\n\n\t\tthis._loadedOnce = true;\n\t}\n\n\t/**\n\t * showLoading expects the same event signature as a Backbone.Request event\n\t * @method\n\t * @param {Netx.Collection|Netx.Model} thing Instance of Netx.Collection or Netx.Model\n\t * @param {object} xhr XHR object\n\t * @param {object} opts Request options\n\t */\n\tshowLoading(thing, xhr, opts = {}) {\n\t\tif (this.showLoadingOnce && this._loadedOnce) {\n\t\t\treturn;\n\t\t}\n\n\t\t// PSEUDO PROGRESS\n\t\tthis.simulateProgress();\n\n\t\tconst el = this.el;\n\n\t\tel.removeAttribute('data-nx-no-assets');\n\t\tel.removeAttribute('data-nx-no-results');\n\n\t\t// TODO: convert over to the pseudo progress?\n\t\t// Just in case - we also monitor this cleanup in remove - do not want a rogue interval out there\n\t\tthis.listenToOnce(dispatcher, 'cart:removed', (assetIds, cartId) => {\n\t\t\tif (this.interval) clearInterval(this.interval);\n\t\t});\n\n\t\t// If this is part of an app view collection - let the view model know\n\t\t// All loading events will bubble up to the app view collection and the main view can make decisions on how to handle it\n\t\t// The only time `thing` is a view is when this is called from the `addedChildView` listener in `addLoadingClasses_internal` method\n\t\tif (\n\t\t\tthis.viewSpec != null &&\n\t\t\tthing != null &&\n\t\t\t!(thing instanceof this.constructor)\n\t\t) {\n\t\t\tthis.viewSpec.trigger('loading', thing, this);\n\t\t}\n\n\t\t// Whether we use loading classes or not - we ought to remove this - because we do not check\n\t\t// for loading classes when we call this.showNotLoaded() - because mainly, we do not have those options\n\t\t// at that time\n\t\tel.removeAttribute('data-nx-not-loaded');\n\n\t\t// Cant test thing here because of inconsistencies in thing\n\t\tif (opts.loadingClasses !== false) {\n\t\t\t(this.collection && this.collection.loadingChunk) ||\n\t\t\t(thing && thing.loadingChunk)\n\t\t\t\t? el.classList.add('loading-chunk')\n\t\t\t\t: el.setAttribute('data-nx-loading', true);\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * Adds `not-loaded` attribute to view's el\n\t * @method\n\t */\n\tshowNotLoaded() {\n\t\tconst el = this.el;\n\t\tif (!el) return;\n\n\t\tel.setAttribute('data-nx-not-loaded', true);\n\t}\n\n\t/**\n\t * Simulates progress on this.$pseudoProgressBar until this.endProgressSimulation is called\n\t * @method\n\t */\n\tsimulateProgress() {\n\t\tif (\n\t\t\tthis.simulatingProgress ||\n\t\t\t!this.$pseudoProgressBar ||\n\t\t\t!this.$pseudoProgressBar.length\n\t\t)\n\t\t\treturn;\n\n\t\t// Simulation start\n\t\tthis.simulatingProgress = true;\n\n\t\tconst min = Math.min;\n\t\tconst $pseudoProgressBar = this.$pseudoProgressBar;\n\t\tlet pseudoProgressWidth = 0;\n\n\t\t$pseudoProgressBar.width('0%').attr('aria-valuenow', 0);\n\n\t\tthis.el.setAttribute('data-nx-simulating-progress', true);\n\t\tthis.$pseudoProgress.addClass('active');\n\n\t\tconst draw = () => {\n\t\t\tpseudoProgressWidth = min(\n\t\t\t\tpseudoProgressWidth + (100 - pseudoProgressWidth) * 0.025,\n\t\t\t\t100,\n\t\t\t);\n\n\t\t\t$pseudoProgressBar\n\t\t\t\t.width(pseudoProgressWidth + '%')\n\t\t\t\t.attr('aria-valuenow', pseudoProgressWidth);\n\n\t\t\tthis.simulatingProgress && window.requestAnimationFrame(draw);\n\t\t};\n\t\tdraw();\n\t}\n\n\t/**\n\t * Stop event propagation\n\t * @method\n\t */\n\tstopPropagation(e) {\n\t\te && e.stopPropagation();\n\t}\n\n\t/**\n\t * this.toggle() calls show() if currently hidden, or hide() if currently shown.\n\t * @see {@link Netx.View#show|show}\n\t * @see {@link Netx.View#hide|hide}\n\t * @fires 'shown' on View object\n\t */\n\ttoggle() {\n\t\treturn this.isShown ? this.hide(true) : this.show();\n\t}\n\n\t/**\n\t * @method\n\t */\n\tunbindCollectionEvents() {\n\t\tconst collection = this.listenToCollection || this.collection;\n\t\tif (!collection) return this;\n\n\t\tthis.trigger('unbindCollectionEventsHook', this);\n\n\t\treturn this.stopListening(collection);\n\t}\n\n\t/**\n\t * @method\n\t */\n\tunbindEvents() {\n\t\tthis.hammer && this.hammer.destroy();\n\t\tdelete this.hammer;\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * @method\n\t */\n\tunbindModelEvents() {\n\t\tif (!this.model) return this;\n\n\t\tthis.trigger('unbindModelEventsHook', this);\n\n\t\treturn this.stopListening(this.model);\n\t}\n\n\t/**\n\t * @method\n\t */\n\tupdateCount(count) {\n\t\t// Might not have rendered yet\n\t\tif (!this.$count) return;\n\n\t\tif (count == null) {\n\t\t\tconst collection = this.listenToCollection || this.collection;\n\t\t\tif (\n\t\t\t\t!collection ||\n\t\t\t\t!this.$count ||\n\t\t\t\t!this.$count.length ||\n\t\t\t\t(this.requireSync && !collection.syncedOnce)\n\t\t\t)\n\t\t\t\treturn;\n\n\t\t\tcount = collection.getTotal();\n\t\t}\n\n\t\tthis.$count.attr('data-count', count);\n\n\t\tthis.i18nCountStr\n\t\t\t? this.$count.html(\n\t\t\t\t\ti18n.t(this.i18nCountStr, {\n\t\t\t\t\t\tcount: count,\n\t\t\t\t\t\tdefaultValue: '__count__ items',\n\t\t\t\t\t}),\n\t\t\t )\n\t\t\t: this.$count.html(count);\n\n\t\tthis.$count.attr(\n\t\t\t'aria-label',\n\t\t\ti18n.t('i18n.nItems', {\n\t\t\t\tcount: count,\n\t\t\t}),\n\t\t);\n\t}\n\n\t/**\n\t * Add functions to execute at instance initialization\n\t * @method\n\t * @param {function} cb Callback\n\t * @param {string} functionalityName Functionality name\n\t */\n\tstatic addInitializer(cb, functionalityName) {\n\t\t// We must recreate these as a parent class may have already had functionality extended to it,\n\t\t// which means it would have already had an array on the class\n\t\t// The next view that adds functionality would push it into the parent class' array\n\t\t// polluting all children that extended that parent class with another extended class' functionality\n\t\tconst proto = Object.getPrototypeOf(this.prototype);\n\n\t\t// Super already has some functionality\n\t\tif (proto.constructor.__functionality__) {\n\t\t\tthis.__functionality__ = _.unique(\n\t\t\t\tproto.constructor.__functionality__.concat(\n\t\t\t\t\tthis.__functionality__ || [],\n\t\t\t\t),\n\t\t\t).concat([functionalityName]);\n\t\t} else {\n\t\t\tthis.__functionality__ = (this.__functionality__ || []).concat([\n\t\t\t\tfunctionalityName,\n\t\t\t]);\n\t\t}\n\n\t\t// Super already has some functionality\n\t\tif (proto.constructor.__initializers__) {\n\t\t\tthis.__initializers__ = _.unique(\n\t\t\t\tproto.constructor.__initializers__.concat(this.__initializers__ || []),\n\t\t\t).concat([cb]);\n\t\t} else {\n\t\t\tthis.__initializers__ = (this.__initializers__ || []).concat([cb]);\n\t\t}\n\t}\n\n\t/**\n\t * Extend functionality on the view's super\n\t * @method\n\t * @param {object} functionality Functionality to extend\n\t */\n\tstatic extendFunctionality(functionality) {\n\t\tconst proto = Object.getPrototypeOf(this.prototype);\n\t\tconst myProto = Object.getPrototypeOf(this);\n\t\tfor (let prop in functionality) {\n\t\t\tif (functionality.hasOwnProperty(prop)) {\n\t\t\t\tif (!proto[prop]) {\n\t\t\t\t\tproto[prop] = functionality[prop];\n\t\t\t\t} else {\n\t\t\t\t\tmyProto[prop] = functionality[prop];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn proto;\n\t}\n\n\t/**\n\t * Extend functionality on the view's super\n\t * @method\n\t * @param {string} functionalityName Functionality name\n\t * @return {boolean}\n\t */\n\tstatic hasFunctionality(functionalityName) {\n\t\tconst functionality = this.__functionality__ || [];\n\t\treturn functionality.includes(functionalityName);\n\t}\n\n\t/**\n\t * Wrap a method on base view (functionality should not know anything about views extending base)\n\t * @method\n\t * @param {string} methodName Name of method to wrap\n\t * @param {function} cb Callback\n\t */\n\tstatic wrapMethod(methodName, cb) {\n\t\tconst proto = Object.getPrototypeOf(this.prototype);\n\t\tif (!proto[methodName]) return proto;\n\t\tproto[methodName] = _.wrap(proto[methodName], cb);\n\t\treturn proto;\n\t}\n\n\t/** @type {boolean} */\n\tstatic get __isView__() {\n\t\treturn true;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'View';\n\t}\n}\n\nexport default View;\n","/**\n * @class\n */\nimport Base from 'netxcore@netx/core/lib/netx-view';\n\nimport {icon} from '@fortawesome/fontawesome-svg-core';\n\nimport CartBarActionsTemplate from '@netx/core-app/templates/menuView-cartBarActions.html';\nimport ContextTemplate from '@netx/core-app/templates/menuView-context.html';\nimport {Menus} from '@netx/core/legacyMenuManager';\n\n// currently these are the only menu views that can be used\n// but themes can override the templates\nconst MenuTemplates = {\n\tcontext: ContextTemplate,\n\tcartBarActions: CartBarActionsTemplate,\n};\n\nclass View extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\tsuper(opts);\n\n\t\tthis.icons = opts.icons || {};\n\t}\n\n\t/** @override */\n\tpreRender() {\n\t\tObject.assign(this.templateVars, {icons: this.icons});\n\n\t\tsuper.preRender();\n\t}\n\n\t/** @method */\n\tinitializedIcons() {\n\t\t// All icons in this view have been installed\n\t}\n\n\t/**\n\t * Material menus\n\t * @override\n\t */\n\tinsertContextMenu(menuName, e) {\n\t\tconst menuOptions = {\n\t\t\tclassName: 'context-menu mdc-menu-surface--anchor',\n\t\t\tmodel: this.model,\n\t\t\tcollection: this.menuCollection || this.collection,\n\t\t\tcontext: true,\n\t\t\tmenu: Menus[menuName],\n\t\t\tremoveOnHide: true,\n\t\t\tmaterialMenus: {\n\t\t\t\tautoOpen: true,\n\t\t\t},\n\t\t};\n\n\t\t// Look for custom template\n\t\tconst templateName = (this.$el.attr('data-nx-template') || '').replace(\n\t\t\t'menuView-',\n\t\t\t'',\n\t\t);\n\t\tif (templateName != null) {\n\t\t\tmenuOptions.template = MenuTemplates[templateName];\n\t\t}\n\n\t\t// Menu view type\n\t\tconst menuView = (this.menuView = new Netx.Views.MenuView(menuOptions));\n\t\tmenuView.el.style.top = e.pageY + 'px';\n\t\tmenuView.el.style.left = e.pageX + 'px';\n\t\tdocument.body.appendChild(menuView.el);\n\t\tmenuView.render();\n\n\t\t// iOS safari has some real issues\n\t\t// if we do not do something here the menu will either hide immediately\n\t\t// or an action that is now beneath your finger will fire\n\t\tif (/iphone|ipad|ipod/i.test(navigator.userAgent)) {\n\t\t\tdocument.body.style.pointerEvents = 'none';\n\t\t\t_.delay(() => {\n\t\t\t\tdocument.body.style.pointerEvents = 'initial';\n\t\t\t}, 300);\n\t\t}\n\t}\n\n\t/** @override */\n\tremove() {\n\t\tdelete this.icons;\n\t\tsuper.remove();\n\t}\n\n\t/**\n\t * @method\n\t * @static\n\t */\n\tstatic initializeIcons(icons, opts) {\n\t\tconst iconOpts = {classes: ['fa-fw'], ...opts};\n\t\tObject.entries(icons).map(([name, faIcon]) => {\n\t\t\ticons[name] = icon(faIcon, iconOpts).html;\n\t\t});\n\t\treturn icons;\n\t}\n}\n\nexport default View;\n","import {UserLevel} from '@netx/core-user/constants';\n\nexport const AD_BUILDER_MINIMUM_USER_LEVEL = UserLevel.ADMIN;\n\nexport enum AdBuilderPref {\n\tENABLED = 'adbuilder.enabled',\n}\n","import {getPreference} from '@netx/core-user-next/utils/getPreference';\nimport {currentUserMeetsUserLevel} from '@netx/core-user-next/utils/currentUserMeetsUserLevel';\nimport {AdBuilderPref, AD_BUILDER_MINIMUM_USER_LEVEL} from './constants';\n\nexport const adBuilderEnabled = () =>\n\tgetPreference(AdBuilderPref.ENABLED, true);\n\nexport const canManageAdBuilder = () =>\n\tcurrentUserMeetsUserLevel(AD_BUILDER_MINIMUM_USER_LEVEL);\n","/**\n * A collection of appView models.\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/appView';\n\nclass AppViews extends Base {\n\t/**\n\t * @override\n\t * @listens {@link Netx.Collections.AppViews#add}\n\t * @listens {@link Netx.Collections.AppViews#destroyed}\n\t * @listens {@link Netx.Collections.AppViews#switched}\n\t * @listens {@link Netx.Collections.AppViews#switchedBack}\n\t * @listens {@link Netx.Collections.AppViews#remove}\n\t */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\n\t\tsuper(models, opts);\n\n\t\tthis.view = opts.view;\n\n\t\t// Hey, listen!\n\t\t// A model has been destroyed or returned to its original `viewCollection`\n\t\t// This will cleanup any other collection the model may have lived in (other than home - that must be done explicitly)\n\t\tthis.listenTo(this, 'destroyed switchedBack', (model, collection) => {\n\t\t\t// The model has a `viewCollection` and the model's `viewCollection` is not us\n\t\t\tif (model.collection && model.collection._listenId !== this._listenId) {\n\t\t\t\t// Make sure it is removed from all collections that are not the model's `viewCollection`\n\t\t\t\tcollection._listenId !== this._listenId && this.remove(model);\n\t\t\t}\n\t\t})\n\t\t\t// A model switched `viewCollections`\n\t\t\t.listenTo(this, 'switched', (model, collection) => {\n\t\t\t\t// Not the original `viewCollection` and `viewCollection` switched to is not us\n\t\t\t\tif (\n\t\t\t\t\tmodel.collection &&\n\t\t\t\t\tmodel.collection._listenId !== this._listenId &&\n\t\t\t\t\tcollection._listenId !== this._listenId\n\t\t\t\t) {\n\t\t\t\t\t// Models can only live in two places at a time, and we are not one of those two places\n\t\t\t\t\tthis.remove(model);\n\t\t\t\t}\n\t\t\t});\n\t\t// Are we a view queue\n\t\t// If so, manage setting and unsetting the `queued` attribute on the model when added/removed\n\t\tif (this.isQueue) {\n\t\t\tthis.listenTo(this, 'add', (model, collection) => {\n\t\t\t\tthis._listenId === collection._listenId && model.set('queued', true);\n\t\t\t}).listenTo(this, 'remove', (model, collection) => {\n\t\t\t\tthis._listenId === collection._listenId && model.set('queued', false);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * @override\n\t * @param {array} models Models\n\t * @param {object} opts Options\n\t */\n\tparse(models, opts) {\n\t\tif (!_.isArray(models)) models = [models];\n\n\t\t_.each(models, (model) => {\n\t\t\tif (model instanceof Model) return;\n\n\t\t\tif (model.id == null) {\n\t\t\t\tconst viewClass = model.viewClass;\n\t\t\t\tmodel.id = viewClass.__name__;\n\t\t\t}\n\t\t});\n\t\treturn models;\n\t}\n\n\t/** @override */\n\tadd(models, opts) {\n\t\topts = opts || {};\n\n\t\t// We always merge\n\t\t// but... if by chance we have explicitly opted not to... whelp.\n\t\tif (opts.merge !== false) {\n\t\t\topts.merge = true;\n\t\t}\n\t\t// Ditto\n\t\tif (opts.parse !== false) {\n\t\t\topts.parse = true;\n\t\t}\n\n\t\treturn super.add(models, opts);\n\t}\n\n\t/**\n\t * This is a helper method meant for only use in the console while trying to debug a particular view\n\t * Use in code is neither admirable or wise.\n\t * @method\n\t * @param {string} templateKey Template key\n\t * @return {module:core/lib/netx-view} Instance of netx-view\n\t */\n\tfindByTemplateKey(templateKey) {\n\t\tconsole.warn(\n\t\t\t'Do not use the `findByTemplateKey` method in production! The method `findByTemplateKey` is not supported',\n\t\t);\n\n\t\t/**\n\t\t * @function\n\t\t * @param {module:core/lib/netx-view} view View\n\t\t * @return {module:core/lib/netx-view} Instance of netx-view\n\t\t */\n\t\tconst findView = (view) => {\n\t\t\tif (view.templateKey === templateKey) {\n\t\t\t\treturn view;\n\t\t\t}\n\n\t\t\tlet found = false;\n\t\t\tif (view.viewCollection) {\n\t\t\t\tfound = findInViews(view.viewCollection.pluck('view'));\n\t\t\t\tif (found) return found;\n\t\t\t}\n\t\t\tif (view.childViews) {\n\t\t\t\tfound = findInViews(_.values(view.childViews));\n\t\t\t\tif (found) return found;\n\t\t\t}\n\t\t\tif (view.subViews) {\n\t\t\t\tfound = findInViews(_.values(view.subViews));\n\t\t\t\tif (found) return found;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t};\n\n\t\t/**\n\t\t * @function\n\t\t * @param {array} views Views\n\t\t * @return {module:core/lib/netx-view} Instance of netx-view\n\t\t */\n\t\tconst findInViews = (views) => {\n\t\t\tfor (let i = 0, c = views.length, view, found; i < c; i++) {\n\t\t\t\tview = views[i];\n\t\t\t\tfound = findView(view);\n\t\t\t\tif (found) return found;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\treturn findInViews(this.pluck('view'));\n\t}\n\n\t/**\n\t * Get transient view (if there is one)\n\t * @method\n\t * @return {boolean|Netx.Models.AppView}\n\t */\n\tgetTransient() {\n\t\tvar transient = false;\n\t\tfor (var i = 0, c = this.length; i < c; i++) {\n\t\t\ttransient = !this.at(i).isMyOriginalCollection(this) ? this.at(i) : false;\n\t\t\tif (transient) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn transient;\n\t}\n\n\t/**\n\t * Overriding to document this: Never use reset on this collection after it has been populated with models - always use\n\t * `set([])` if you are looking to clear it out properly. We will get all the proper events rather than a single `reset` event.\n\t * Nothing about how this event works is overriden.\n\t * @override\n\t */\n\treset(models, opts) {\n\t\t// I would like to warn you about using reset manually on this - but backbone sends a reset call off the bat\n\t\t// to new collections. Do not want to throw up bad warnings.\n\t\treturn super.reset(models, opts);\n\t}\n\n\t/** @override */\n\tset(models, opts = {}) {\n\t\t// Always parse unless explicitly told not to\n\t\topts.parse = opts.parse !== false;\n\t\treturn super.set(models, opts);\n\t}\n\n\t/**\n\t * @method\n\t * @param {Netx.Models.AppView} model App view model\n\t * @param {Netx.Collections.AppViews} collection The new `viewCollection`\n\t * @param {object} opts Add to collection options\n\t */\n\tswitchTo(model, collection, opts = {}) {\n\t\t// You should never be trying to `switchTo` the original `viewCollection`\n\t\tif (collection !== this) {\n\t\t\t// Store this so that we can know the current context of the `viewCollection`\n\t\t\tmodel.currentCollection = collection;\n\t\t\tcollection.add(model, opts);\n\t\t\t// Let the model know it has switched `viewCollections`\n\t\t\tmodel.trigger('switched', model, collection);\n\t\t}\n\t\t// But in the event you are - just remove it from the `currentCollection` and let events do the rest\n\t\telse {\n\t\t\tmodel.switchBack();\n\t\t}\n\n\t\treturn this;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AppViews';\n\t}\n}\n\nexport default AppViews;\n","/**\n * CustomFormElement model\n *\n * @class\n */\nimport Base from '@netx/core/lib/netx-model';\n\nclass CustomFormElement extends Base {\n\t/**\n\t * @property {object} defaults - Model defaults\n\t * @property {string} defaults.type - element type, (text, textarea, number, date, select, radios, checkboxes, multiselect)\n\t * @property {string} defaults.label - display label\n\t * @property {string} defaults.value - element options\n\t * @property {string} defaults.name - nice name\n\t * @property {string} defaults.required - required string\n\t * @property {boolean} defaults.disabled - if the form is read only\n\t * @property {string} defaults.userValue - data, if any, associated with this element\n\t * @property {string} defaults.userValue - checkbox data, if any, associated with this element\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\ttype: '',\n\t\t\tlabel: '',\n\t\t\tvalue: '',\n\t\t\tname: '',\n\t\t\trequired: '',\n\t\t\tdisabled: false,\n\t\t\tuserValue: '',\n\t\t\tuserValues: [],\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(attrs, opts) {\n\t\tsuper(attrs, opts);\n\n\t\tlet label = this.get('label');\n\t\tif (!label) return;\n\n\t\tconst toSet = {};\n\t\tconst value = this.get('value');\n\n\t\tlet lang = i18n.language.slice(0, 2);\n\t\tif (label[lang] == null) {\n\t\t\tlang = 'en';\n\t\t}\n\n\t\tif (typeof label === 'object') {\n\t\t\ttoSet.label = label[lang];\n\n\t\t\t// key should be mandatory, but it's left off sections in the wild\n\t\t\tif (!label.key && this.get('type') === 'section') {\n\t\t\t\tlabel.key = 'section' + this.cid;\n\t\t\t}\n\t\t} else if (typeof label === 'string') {\n\t\t\t// just incase\n\t\t\ttoSet.label = label;\n\t\t}\n\n\t\ttoSet.name = label.key ? label.key : this.makeName(toSet.label);\n\n\t\tif (_.isArray(value)) {\n\t\t\t_.each(value, (opt, idx, all) => {\n\t\t\t\tif (typeof opt === 'object') {\n\t\t\t\t\tall[idx] = {\n\t\t\t\t\t\tkey: opt.key,\n\t\t\t\t\t\tvalue: opt[lang],\n\t\t\t\t\t\tdisabled: opt.disabled,\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\tall[idx] = {\n\t\t\t\t\t\tkey: this.makeName(opt),\n\t\t\t\t\t\tvalue: opt,\n\t\t\t\t\t\tdisabled: opt.disabled,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this.collection.readOnly) {\n\t\t\ttoSet.disabled = true;\n\t\t}\n\n\t\tthis.set(toSet);\n\t}\n\t/** @method */\n\tmakeName(elementLabel) {\n\t\treturn this.constructor.makeName(elementLabel);\n\t}\n\t/**\n\t * @method\n\t * @return parsed element label\n\t */\n\tgetDisplayLabel() {\n\t\tconst label = this.get('label');\n\t\t// remove :\n\t\treturn label.replace(/:\\s*$/, '');\n\t}\n\t/**\n\t * @method\n\t * @return parsed element value\n\t */\n\tgetDisplayValue(value) {\n\t\tswitch (this.get('type')) {\n\t\t\tcase 'checkboxes':\n\t\t\tcase 'multiselect':\n\t\t\t\treturn value.replace(/\",\"/g, ', ');\n\t\t}\n\t\treturn value;\n\t}\n\n\t/**\n\t * @method\n\t * @static\n\t * @param {string} elementLabel Element label\n\t * @return {string} Name\n\t */\n\tstatic makeName(elementLabel) {\n\t\tif (elementLabel) {\n\t\t\treturn elementLabel\n\t\t\t\t.toLowerCase() // make everything lowercase\n\t\t\t\t.replace(/[-\\W]+/g, '-') // convert pattersn of multiple dashes or non-word characters -> a single dash\n\t\t\t\t.replace(/^-/, '') // strip any dash from front of slug\n\t\t\t\t.replace(/-$/, '');\n\t\t} else {\n\t\t\tconsole.warn('form element name error');\n\t\t\treturn '';\n\t\t}\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'CustomFormElement';\n\t}\n}\n\nexport default CustomFormElement;\n","/**\n * CustomForm collection\n * Represents a single form\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/customFormElement';\n\nclass CustomForm extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @property {object} methods - Collection RPC methods\n\t * @property {method} methods.read - Fetch custom form fields\n\t *\n\t * @property {method} methods.deleteCustomForm - Delete custom form\n\t * @property {method} methods.setCustomForm - Update custom form fields\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\treturn ['getCustomFormByName', this.customForm.formName];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tdeleteCustomForm(opts) {\n\t\t\t\treturn ['deleteCustomForm', this.customForm.formName];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tsetCustomForm(opts) {\n\t\t\t\treturn ['setCustomForm', this.customForm];\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - Collection parsers\n\t * @property {function} parsers.read - Parses result of fetched form\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {object} data Form data\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(data, opts) {\n\t\t\t\tif (!data) return null;\n\n\t\t\t\t// taking the raw form data and parsing it so customFormElementView can deal\n\t\t\t\t/* eslint-disable */\n\t\t\t\tconst elements = JSON.parse(data.formData.replace(/\\\\\\\"/g, '\"'));\n\t\t\t\ttry {\n\t\t\t\t\tconst userVals = this.customForm.userValues;\n\t\t\t\t\t_.each(elements, (element, idx, all) => {\n\t\t\t\t\t\tif (this.duplicateKeys.indexOf(element.label.key) !== -1) {\n\t\t\t\t\t\t\tdelete all[idx];\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst name = element.label.key\n\t\t\t\t\t\t\t? element.label.key\n\t\t\t\t\t\t\t: this.model.makeName(element.label.en);\n\n\t\t\t\t\t\tif (element.type === 'checkboxes') {\n\t\t\t\t\t\t\t// if we have user values, loop though and create userValues array\n\t\t\t\t\t\t\tif (_.isEmpty(userVals)) return;\n\n\t\t\t\t\t\t\t_.each(element.value, (elem, idx, all) => {\n\t\t\t\t\t\t\t\tconst userVal = userVals[`${name}-${elem.key}`];\n\t\t\t\t\t\t\t\tif (!userVal) return;\n\n\t\t\t\t\t\t\t\tif (!element.userValues) {\n\t\t\t\t\t\t\t\t\telement.userValues = [];\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\telement.userValues.push(userVal);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if (userVals[name]) {\n\t\t\t\t\t\t\telement.userValue = userVals[name];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treturn elements;\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.warn('could not parse fetched elements, err: %o', e);\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * @type {object}\n\t\t */\n\t\tconst customForm = (this.customForm = {\n\t\t\tformName: '',\n\t\t\tformData: '',\n\t\t\tuserValues: {},\n\t\t\tduplicateKeys: [],\n\t\t\treadOnly: false,\n\t\t});\n\n\t\tif (opts.formName) {\n\t\t\tcustomForm.formName = opts.formName;\n\t\t\tcustomForm.userValues = opts.userValues || {};\n\t\t\tthis.readOnly = opts.readOnly || false;\n\t\t\tthis.duplicateKeys = opts.duplicateKeys || [];\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} formData Form data\n\t * @return {object} Form data\n\t */\n\tgetDisplayByData(formData) {\n\t\tif (this.length <= 1) return formData;\n\n\t\t// take the form data and return it with actual labels\n\t\t_.each(formData, (detail, idx, all) => {\n\t\t\tconst idxAr = idx.split('cfe-');\n\t\t\tif (idxAr.length <= 1) return;\n\n\t\t\tconst element = this.find({name: idxAr[1]});\n\t\t\tif (element) {\n\t\t\t\t// this data is in the form, use the label\n\t\t\t\tconst label = element.getDisplayLabel();\n\t\t\t\tall[label] = element.getDisplayValue(detail);\n\t\t\t} else {\n\t\t\t\t// not in the form, just trim the 'cfe-', likely the form has changed\n\t\t\t\tall[idxAr[1]] = detail;\n\t\t\t}\n\t\t\tdelete all[idx];\n\t\t});\n\n\t\treturn formData;\n\t}\n\n\t/**\n\t * Cleans form data, removes cfe-\n\t * @method\n\t * @param {object} formData Form data\n\t * @return {object} Form data\n\t */\n\tsubmitArgs(formData) {\n\t\t_.each(formData, (dataValue, dataKey, all) => {\n\t\t\tif (dataKey.slice(0, 4) !== 'cfe-') return;\n\n\t\t\tall[dataKey.slice(4)] = dataValue.toString().replace(/\"/g, '');\n\t\t\tdelete all[dataKey];\n\t\t});\n\t\treturn formData;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'CustomForm';\n\t}\n}\n\nexport default CustomForm;\n\nNetx.CustomForm = CustomForm;\n","/**\n * @class\n * @extends Netx.Model\n * @see Netx.Collections.StorageLocations\n */\nimport Base from '@netx/core/lib/netx-model';\n\nclass StorageLocation extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * Set the attribute backbone will look to as the id\n\t * @type {string}\n\t */\n\tget idAttribute() {\n\t\treturn 'locationId';\n\t}\n\n\t/**\n\t * @property {object} defaults - The default attribute values\n\t * @property {number} defaults.active - The default system location active (pseudo boolean 0/1)\n\t * @property {string} defaults.basePath - The default system location base path\n\t * @property {number} defaults.capacitySize - The defualt system location capacity size\n\t * @property {string} defaults.creationdate - The defualt system location creation date\n\t * @property {number} defaults.currentSize - The defualt system location current size\n\t * @property {number} defaults.defaultLocation - The defualt system location default (pseudo boolean 0/1)\n\t * @property {string} defaults.key1 - The default system location key1\n\t * @property {string} defaults.key2 - The default system location key2\n\t * @property {string} defaults.locationTypeName - The defualt system location type name\n\t * @property {number} defaults.locationTypeStatus - The defualt system location type status\n\t * @property {number} defaults.locationTypeId - The default system location type id - ( File url - 1, HTTP URL - 3, offline - 8, Amazon - 9, Microsoft - 10, box - 101, Not implemented [database - 2, dvd - 4, cd - 5, jazz - 6, zip - 7])\n\t * @property {number} defaults.locationId - The defualt system location id\n\t * @property {number} defaults.members - The defualt system location members\n\t * @property {string} defaults.name - The defualt system location name\n\t * @property {string} defaults.notes - The defualt system location notes\n\t * @property {number} defaults.sync - The defualt system location sync (pseudo boolean 0/1)\n\t * @property {string} defaults.userEmail - The defualt system location user email\n\t * @property {number} defaults.userid - The defualt system location user id\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\tactive: 0,\n\t\t\tbasePath: '',\n\t\t\tcapacitySize: 0,\n\t\t\tcreationdate: '',\n\t\t\tcurrentSize: 0,\n\t\t\tdefaultLocation: 0,\n\t\t\tkey1: '',\n\t\t\tkey2: '',\n\t\t\tlocationTypeName: '',\n\t\t\tlocationTypeStatus: 0,\n\t\t\tlocationTypeId: 0,\n\t\t\t// locationId : 0,\n\t\t\tmembers: 0,\n\t\t\tname: '',\n\t\t\tnotes: '',\n\t\t\tsync: 0,\n\t\t\tuserEmail: '',\n\t\t\tuserid: 0,\n\t\t};\n\t}\n\n\t/** @type {array} */\n\tget clientAttrs() {\n\t\treturn ['label', 'locationTypeLabel'];\n\t}\n\n\t/**\n\t * RPC methods:\n\t * @rpcs\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\treturn ['getLocationObjects', [this.id], false];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tcreate(opts) {\n\t\t\t\treturn ['setLocationObject', this.self()];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tupdate(opts) {\n\t\t\t\treturn ['setLocationObject', this.self()];\n\t\t\t},\n\t\t\t/** @method */\n\t\t\tremove: ['deleteLocation', 'locationId'],\n\t\t};\n\t}\n\n\t/**\n\t * Parsers for this model\n\t * @type {object}\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} data Data\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(data, opts) {\n\t\t\t\tif (!data.length) return null;\n\n\t\t\t\tdata = data[0];\n\t\t\t\treturn _.extend(data, {\n\t\t\t\t\tlabel: i18n.t('i18n.' + _.toCamelCase(data.name), {\n\t\t\t\t\t\tdefaultValue: data.name,\n\t\t\t\t\t}),\n\t\t\t\t\tlocationTypeLabel: i18n.t(\n\t\t\t\t\t\t'i18n.' + _.toCamelCase(data.locationTypeName),\n\t\t\t\t\t\t{defaultValue: data.locationTypeName},\n\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(attrs, opts) {\n\t\tsuper(attrs, opts);\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(\n\t\t\tthis,\n\t\t\t'change:locationTypeName',\n\t\t\t(model, locationTypeName) => {\n\t\t\t\tthis.set(\n\t\t\t\t\t'locationTypeLabel',\n\t\t\t\t\ti18n.t('i18n.' + _.toCamelCase(locationTypeName), {\n\t\t\t\t\t\tdefaultValue: locationTypeName,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t},\n\t\t).listenTo(this, 'change:name', (model, name) => {\n\t\t\tthis.set(\n\t\t\t\t'label',\n\t\t\t\ti18n.t('i18n.' + _.toCamelCase(name), {defaultValue: name}),\n\t\t\t);\n\t\t});\n\t}\n\n\t/**\n\t * @param {object} data Data\n\t * @param {object} opts Options\n\t */\n\tparseAndSave(data, opts) {\n\t\t// Collect needed data\n\t\tconst updatedData = _.extend(\n\t\t\t_.pick.apply(_, [data].concat(_.keys(this.constructor.GetDefaults()))),\n\t\t\t{\n\t\t\t\tactive: data.active || data.defaultLocation ? 1 : 0,\n\t\t\t\tdefaultLocation: data.defaultLocation ? 1 : 0,\n\t\t\t\tsync: data.sync ? 1 : 0,\n\t\t\t\tlocationTypeId: parseInt(data.locationTypeId),\n\t\t\t},\n\t\t);\n\n\t\t// Save changes\n\t\treturn this.save(updatedData, _.extend({wait: true}, opts));\n\t}\n\n\t/**\n\t * @method\n\t * @param {boolean} active Active\n\t * @param {object} opts Options\n\t */\n\tsetActive(active, opts) {\n\t\treturn this.save(\n\t\t\t{\n\t\t\t\tsync: active ? 1 : 0,\n\t\t\t},\n\t\t\t_.extend({wait: true}, opts),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Options\n\t */\n\tsetAsDefault(opts) {\n\t\treturn this.save(\n\t\t\t{\n\t\t\t\tactive: 1,\n\t\t\t\tdefaultLocation: 1,\n\t\t\t},\n\t\t\t_.extend({wait: true}, opts),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {boolean} sync Sync\n\t * @param {object} opts Options\n\t */\n\tsetSync(sync, opts) {\n\t\treturn this.save(\n\t\t\t{\n\t\t\t\tsync: sync ? 1 : 0,\n\t\t\t},\n\t\t\t_.extend({wait: true}, opts),\n\t\t);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'StorageLocation';\n\t}\n}\n\nexport default StorageLocation;\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/storageLocation';\n\nimport properties from '../properties/locations';\n\nclass StorageLocations extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget xhrTrackProgress() {\n\t\treturn {\n\t\t\tgetLocations: true,\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetLocations: 'Fetching storage locations',\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetLocations: 'Fetched storage locations',\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} methods - The methods available on this model\n\t * @property {function|array} methods.read - The read method (get)\n\t * @property {function|array} methods.getLocationTypes - Get location types (when called will update app/properties/locations)\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\treturn ['getLocations', '', false];\n\t\t\t},\n\t\t\tgetLocationTypes: ['getLocationTypes'],\n\t\t};\n\t}\n\n\t/**\n\t * Parsers for this model\n\t * @type {object}\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} data Data\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(data, opts) {\n\t\t\t\treturn _.map(data, (loc) =>\n\t\t\t\t\t_.extend(loc, {\n\t\t\t\t\t\tlabel: i18n.t('i18n.' + _.toCamelCase(loc.name), {\n\t\t\t\t\t\t\tdefaultValue: loc.name,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tlocationTypeLabel: i18n.t(\n\t\t\t\t\t\t\t'i18n.' + _.toCamelCase(loc.locationTypeName),\n\t\t\t\t\t\t\t{defaultValue: loc.locationTypeName},\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t},\n\t\t\t/**\n\t\t\t * Sets the properties file location type data app/properties/locations\n\t\t\t * @function\n\t\t\t * @param {array} data\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetLocationTypes(data, opts) {\n\t\t\t\tconst typeIds = properties.typeIds;\n\t\t\t\tconst typeLabels = properties.typeLabels;\n\t\t\t\t_.each(data, (locationType, idx) => {\n\t\t\t\t\tconst id = locationType.id;\n\t\t\t\t\tconst name = _.toCamelCase(locationType.name);\n\t\t\t\t\ttypeIds[name] = id;\n\t\t\t\t\ttypeLabels[id] = i18n.t(`i18n.${name}`);\n\t\t\t\t});\n\t\t\t\tproperties.types = _.invert(typeIds);\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\t\tsuper(models, opts);\n\t}\n\n\t/**\n\t * @method\n\t * @return {Netx.Models.StorageLocation}\n\t */\n\tgetDefaultLocation() {\n\t\treturn this.findWhere({defaultLocation: 1});\n\t}\n\n\t/**\n\t * Get an object indexed by id with label values by locationTypeId\n\t * Used a lot for select element options\n\t * @method\n\t * @param {number} locationTypeId Location type\n\t * @return {object} Labels\n\t */\n\tgetLocationLabelsForType(locationTypeId) {\n\t\tlocationTypeId = parseInt(locationTypeId);\n\n\t\tconst locations = this.where({locationTypeId: locationTypeId});\n\t\tconst list = {};\n\n\t\t_.each(locations, (locModel, idx) => {\n\t\t\tlist[locModel.id] = locModel.get('name');\n\t\t});\n\n\t\treturn list;\n\t}\n\n\t/**\n\t * Returns locations that are available to be uploaded to.\n\t * @method\n\t * @return {Netx.Collection} Collection of active location models\n\t */\n\tgetLocationsForUpload() {\n\t\treturn new Base(this.where({active: 1}));\n\t}\n\n\t/**\n\t * Set the default storage location\n\t * @method\n\t * @param {Netx.Models.StorageLocation} model Sotrage location\n\t * @param {object} opts Options\n\t */\n\tsetDefaultLocation(model, opts) {\n\t\t// Get current default\n\t\tconst currentDefaultLocation = this.findWhere({defaultLocation: 1});\n\n\t\t// If not already default\n\t\tif (currentDefaultLocation === model) {\n\t\t\treturn new $.Deferred().resolve();\n\t\t}\n\n\t\t// Set the new default location\n\t\treturn model\n\t\t\t.save(\n\t\t\t\t{\n\t\t\t\t\tdefaultLocation: 1,\n\t\t\t\t\tactive: 1,\n\t\t\t\t},\n\t\t\t\t_.extend({wait: true}, opts),\n\t\t\t)\n\t\t\t.then(() => {\n\t\t\t\tcurrentDefaultLocation.set({defaultLocation: 0});\n\t\t\t\t// Trigger custom event since we will be changing the values of `defaultLocation` quite a bit here\n\t\t\t\tthis.trigger('nx:change:defaultLocation', this, model);\n\t\t\t});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'StorageLocations';\n\t}\n}\n\nexport default StorageLocations;\n","import {getPreference} from '@netx/core-user-next/utils/getPreference';\n\n/**\n * @return Can contact\n */\nexport const canContact = () => getPreference('email.mailto.rcpt_to') != null;\n","/**\n * @class\n * @example\n * {\n * viewClass : FooView, // Just like `childView`, the view constructor\n * deferredModules : ['foo'], // If you need to initialize any deferred modules before showing the corresponding view\n * label : i18n.t('i18n.fooViewLabel'), // The `label` to show for the view (if ommitted we will look for `headerTitle` within the view's prototype)\n * name : 'foo', // If you would like specify your own name to reference the view (otherwise the `viewClass` will be used in camelcase form)\n * showActions : ['module:foo:bar'], // If you want other actions to trigger the showing of the corresponding view\n * uniqueShowAction : 'module:foo:route', // If you want to decide what happens when a tab is clicked (`appView:[view.cid]:show` will be registered and used)\n * viewOptions : {...}, // Anything that should be passed to the view at creation\n * }\n */\nimport Base from '@netx/core/lib/netx-model';\n\nimport {getEnabledActions} from '@netx/core-permissions/properties/actions';\nimport {\n\tFindLegacyAction,\n\tRegisterLegacyAction,\n} from '@netx/core/legacyActionManager';\n\nclass AppView extends Base {\n\t/** @type {boolean} */\n\tget isAppView() {\n\t\treturn true;\n\t}\n\n\t/** @type {ES6Model} */\n\tget viewModel() {\n\t\tconst view = this.get('view');\n\t\tif (view) {\n\t\t\treturn view.model;\n\t\t}\n\t\tconst viewOptions = this.get('viewOptions') || {};\n\t\treturn viewOptions.model;\n\t}\n\n\t/**\n\t * @property {object} defaults - Defaults\n\t * @property {string} defaults.id - Unique `id` - the class name of the view if not provided\n\t * @property {module:core/lib/netx-view} defaults.viewClass - View constructor\n\t * @property {boolean} defaults.active - Is the view `model` currently active\n\t * @property {array} defaults.deferredModules - Deferred modules that must be loaded before the view can be `shown`/`rendered`\n\t * @property {array} defaults.showAction - An array of `actions` the view will listen for and show itself on\n\t * @property {string} defaults.label - If you want set a sepcific `label` for this view (will be used by tabs and crumbs)\n\t * @property {string} defaults.name - If you want set a sepcific `name` for this view (will be used by tabs)\n\t * @property {boolean} defaults.queued - Is the view `queued` (this should not be set manually)\n\t * @property {boolean} defaults.switched - Is the view `switched` out (this should not be set manually)\n\t * @property {string} defaults.uniqueShowAction - This will be used as the primary unique `action` for showing the view. If not set, a unique one will be created for it\n\t * @property {object} defaults.viewOptions - The `options` that will be passed to the view at creation\n\t * @property {module:core/lib/netx-ollection} defaults.viewOptions.collection - The `collection` for the view\n\t * @property {module:core/lib/netx-model} defaults.viewOptions.model - The `model` for the view\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\t// id : \"\",\n\t\t\tviewClass: null,\n\t\t\tactive: false,\n\t\t\tdeferredModules: undefined,\n\t\t\tshowActions: [],\n\t\t\tlabel: undefined,\n\t\t\tname: undefined,\n\t\t\tqueued: false,\n\t\t\tswitched: false,\n\t\t\tuniqueShowAction: undefined,\n\t\t\tviewOptions: {\n\t\t\t\tcollection: undefined,\n\t\t\t\tmodel: undefined,\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @override\n\t * @param {object} attrs Model attributes\n\t * @param {object} opts Model options\n\t * @fires {@link Netx.Models.AppView#destroy}\n\t * @fires {@link Netx.Models.AppView#switchedBack}\n\t * @listens {@link Netx.Models.AppView#remove}\n\t * @listens {@link Netx.Models.AppView#change:view}\n\t * @listens {@link Netx.Models.AppView#change:viewOptions:model}\n\t * @listens {@link Netx.Models.AppView#change:viewOptions:collection}\n\t */\n\tconstructor(attrs = {}, opts = {}) {\n\t\tif (attrs.id == null) {\n\t\t\tconst viewClass = attrs.viewClass;\n\t\t\tattrs.id = viewClass.__name__;\n\t\t}\n\n\t\tsuper(attrs, opts);\n\n\t\t// If a name was not set - add one\n\t\t!this.has('name') &&\n\t\t\tthis.set('name', _.camelCaseToDash(_.toCamelCase(this.id)));\n\n\t\t// Hey, listen!\n\t\t// We deal with the nested object `viewOptions` in the set method.\n\t\t// Backbone will only tell you about the change, to a key, in an object,\n\t\t// on a model, once (at least until that model has `synced\tsince the last chnage).\n\t\t// But regardless of syncing (which we do not do) that still would not get us\n\t\t// deep change event namespacing\n\n\t\t// If a unique show action was not provided, make one. This ensures\n\t\t// that the simple action of showing a view does not require accidentally\n\t\t// firing off a conflicting event name. Also, you do not absolutely\n\t\t// have to define any `showActions` if you do not need anything special\n\t\t// and are really just using a viewCollection to create a tab interface.\n\t\tlet uniqueShowAction = this.get('uniqueShowAction');\n\t\tif (this.get('uniqueShowAction') == null) {\n\t\t\tuniqueShowAction = `appView:${this.cid}:show`;\n\t\t\tthis.set('uniqueShowAction', uniqueShowAction);\n\t\t\tRegisterLegacyAction([\n\t\t\t\t{\n\t\t\t\t\tevent: uniqueShowAction,\n\t\t\t\t\tlabel: i18n.t('i18n.show'),\n\t\t\t\t},\n\t\t\t]);\n\t\t}\n\t\t// Check that the action provided has been registered, if not throw warning\n\t\telse {\n\t\t\tconst action = FindLegacyAction(uniqueShowAction);\n\t\t\tif (!action) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'The action `' +\n\t\t\t\t\t\tthis.get('uniqueShowAction') +\n\t\t\t\t\t\t'` provided for multiView childView has not been registered. This will result in an error in `performAction`.',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Hey, listen!\n\t\tthis\n\t\t\t////////////////////////////////\n\t\t\t// MODEL\n\t\t\t////////////////////////////////\n\t\t\t// Update model\n\t\t\t.listenTo(this, 'change:viewOptions:model', (model) => {\n\t\t\t\tif (model !== this || !this.get('view')) return;\n\t\t\t\t// Since we are piping below\n\t\t\t\tconst _model = this.get('viewOptions').model;\n\t\t\t\t_model != null && this.get('view').setModel(_model);\n\t\t\t})\n\t\t\t////////////////////////////////\n\t\t\t// !MODEL\n\t\t\t////////////////////////////////\n\n\t\t\t////////////////////////////////\n\t\t\t// COLLECTION\n\t\t\t////////////////////////////////\n\t\t\t// Update collection\n\t\t\t.listenTo(this, 'change:viewOptions:collection', (model) => {\n\t\t\t\tif (model !== this || !this.get('view')) return;\n\t\t\t\t// Since we are piping below\n\t\t\t\tconst collection = this.get('viewOptions').collection;\n\t\t\t\tcollection != null && this.get('view').setCollection(collection);\n\t\t\t})\n\t\t\t////////////////////////////////\n\t\t\t// !COLLECTION\n\t\t\t////////////////////////////////\n\n\t\t\t// Cleanup\n\t\t\t.listenTo(this, 'remove', (model, collection, options = {}) => {\n\t\t\t\t// Using `options`, spelled out, to not conflict with the `opts` passed to `initialize`\n\t\t\t\t// In the current artchitecture it would not make much sense to remove a model entirely from a viewCollection and add it to another\n\t\t\t\t// We can offer an option to pop the view from one place to the next but in the end always returns home and can only live in 1 other\n\t\t\t\t// `viewCollection` at a time:\n\t\t\t\t// app -> fullScreen || modal -> app || app -> modal\n\t\t\t\t// And even:\n\t\t\t\t// app -> fullScreen -> modal || app -> modal -> fullScreen\n\t\t\t\t// And by just adding the same instance of the model you do not loose any data inputed in the view. If we were trully removed from\n\t\t\t\t// our original `viewCollection` then we fire off a destroy event which in turn cleans it up from other `viewCollections` it may be in.\n\t\t\t\tif (model !== this) return;\n\n\t\t\t\tif (this.collection === collection) {\n\t\t\t\t\t// TODO: remove any created uniqueShowActions - but first discuss if simply removing\n\t\t\t\t\t// an action from the Action array is enough to be considered \"cleaned up\"\n\t\t\t\t\tthis.stopListening();\n\t\t\t\t\t// Let it known, for all intents and purposes, we were destroyed\n\t\t\t\t\t// There is no coming back from this kind of removal\n\t\t\t\t\tthis.trigger('destroy', this, this.collection);\n\t\t\t\t}\n\t\t\t\t// We were in another `viewCollection` and our `viewCollection` is not the collection we were removed from\n\t\t\t\telse if (\n\t\t\t\t\tthis.currentCollection &&\n\t\t\t\t\tthis.currentCollection._listenId === collection._listenId\n\t\t\t\t) {\n\t\t\t\t\t// When removed from a `viewCollection`, check to see if we should be switching back to our original `viewCollection`\n\t\t\t\t\t// Switch back - the switch isn't really anything more than an event - the other collections this may still be in will\n\t\t\t\t\t// be listening for this event to remove us from there as well\n\t\t\t\t\tthis.trigger('switchedBack', this, this.collection);\n\t\t\t\t\t// Be sure to delete this so that we only fire `switchedBack` on the first removal from not our original `viewCollection`\n\t\t\t\t\tdelete this.currentCollection;\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t////////////////////////////////\n\t\t\t// EVENT PIPING\n\t\t\t////////////////////////////////\n\t\t\t// Pipe view events - only once\n\t\t\t// If the view is removed so is the model and vice versa\n\t\t\t.listenToOnce(this, 'change:view', (model) => {\n\t\t\t\tif (model !== this) return;\n\n\t\t\t\t// The view gets set in Netx.View.prototype.addChildView\n\t\t\t\tconst view = this.get('view');\n\n\t\t\t\t// Pipe them all - if this turns out to be too costly we can get specific\n\t\t\t\t// to events that we know we want\n\t\t\t\tthis.listenTo(view, 'all', (...args) => {\n\t\t\t\t\t// Make `arguments` an array\n\t\t\t\t\targs = [...args];\n\t\t\t\t\tconst length = args.length;\n\t\t\t\t\t// We are not consistent in sending the view with the event trigger\n\t\t\t\t\t// Like: this.trigger('rendered'); -> this.trigger('rendered', this);\n\t\t\t\t\t// Because really we have never needed to pipe anything and always knew\n\t\t\t\t\t// if we were explicitly listening to a view's events within another\n\t\t\t\t\t// view - this abstracts it so any view which has access to this model's\n\t\t\t\t\t// collection can listen for all events that occur on the child views\n\t\t\t\t\t// within.\n\t\t\t\t\t// Prepend event with \"view:\"\n\t\t\t\t\targs[0] = `view:${args[0]}`;\n\t\t\t\t\tif (length === 1 || (length > 1 && args[1] !== view)) {\n\t\t\t\t\t\targs.splice(1, 0, view);\n\t\t\t\t\t}\n\t\t\t\t\tthis.trigger.apply(this, args);\n\t\t\t\t});\n\t\t\t});\n\t\t////////////////////////////////\n\t\t// !EVENT PIPING\n\t\t////////////////////////////////\n\n\t\t// A very slight pause before being considered \"synced\"\n\t\t_.defer(() => {\n\t\t\tthis.trigger('sync', this);\n\t\t});\n\t}\n\t/**\n\t * We only care about `viewOptions`\n\t * @override\n\t * @param {object|string} key Either the key or an object of key values\n\t * @param {mixed} value Either a value or, if the key is an object, it is the options object\n\t * @param {object} opts If key is not an object this the options object, otherwise `null`\n\t */\n\tset(key, value, opts) {\n\t\tlet newViewAttrs;\n\n\t\tconst changes = [];\n\t\tconst attrsToRemove = {};\n\t\tconst attrsToChange = {};\n\n\t\tlet attrs = {};\n\t\tlet _opts;\n\t\t// If the key is an object then we have only two args and the second one is the opts\n\t\tif (_.isObject(key)) {\n\t\t\t_opts = value || {};\n\t\t\tattrs = key;\n\t\t} else {\n\t\t\tattrs[key] = value;\n\t\t}\n\n\t\t// Updating `viewOptions`\n\t\tif (attrs.viewOptions != null) {\n\t\t\t// Protect `viewOptions` as an object\n\t\t\tif (!_.isObject(attrs.viewOptions)) {\n\t\t\t\tattrs.viewOptions = {};\n\t\t\t}\n\t\t\tnewViewAttrs = attrs.viewOptions;\n\t\t}\n\n\t\t// Deal with changes to `viewOptions`\n\t\tif (newViewAttrs && this.attributes.viewOptions) {\n\t\t\t// Clone a copy of old options\n\t\t\tconst oldViewAttrs = _.clone(this.attributes.viewOptions);\n\t\t\tif (newViewAttrs) {\n\t\t\t\t// Loop over new values\n\t\t\t\t_.each(newViewAttrs, (attr, k) => {\n\t\t\t\t\tif (_.isUndefined(oldViewAttrs[k])) {\n\t\t\t\t\t\t// Add to changes\n\t\t\t\t\t\tchanges.push({key: k, change: 'added'});\n\t\t\t\t\t\tattrsToChange[k] = attr;\n\t\t\t\t\t}\n\t\t\t\t\t// _.isEqual does not work for comparing models/collections\n\t\t\t\t\telse if (oldViewAttrs[k] !== attr) {\n\t\t\t\t\t\t// Add to changes\n\t\t\t\t\t\tchanges.push({key: k, change: 'changed'});\n\t\t\t\t\t\tattrsToChange[k] = attr;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// Loop over old values\n\t\t\t\t_.each(oldViewAttrs, (attr, k) => {\n\t\t\t\t\tif (newViewAttrs[k] == null) {\n\t\t\t\t\t\t// Add to changes\n\t\t\t\t\t\tchanges.push({key: k, change: 'removed'});\n\t\t\t\t\t\tattrsToRemove[k] = attr;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// We want default backbone behavior here - see override in netx.js\n\t\t// This is because we do not care about all the stuff set being tracked in subCollections/subModels\n\t\t// We know that when this model is removed it just stops listening - if you are removing this model\n\t\t// from a viewCollection to put somewhere else - you would be [currently] doing it wrong\n\t\tconst ret = Backbone.Model.prototype.set.call(this, attrs, _opts);\n\n\t\t// Loop over changes and emit named change events\n\t\tif (changes.length) {\n\t\t\t// Unless silent was passed in opts\n\t\t\tif (_opts?.silent !== true) {\n\t\t\t\t// Loop and emit\n\t\t\t\t_.each(changes, (change) => {\n\t\t\t\t\t// The arguments are the same as any other Backbone.Model change event\n\t\t\t\t\tthis.trigger(\n\t\t\t\t\t\t'change:viewOptions:' + change.key,\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\tnewViewAttrs[change.key],\n\t\t\t\t\t\t_opts,\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t\t// Update view's options (except model/collection that is a special case and handled in the\n\t\t\t\t// listeners of this initialize)\n\t\t\t\tconst view = this.get('view');\n\t\t\t\tif (view) {\n\t\t\t\t\t// Set any changed attrs on the view\n\t\t\t\t\t_.extend(view, _.omit(attrsToChange, 'model', 'collection'));\n\t\t\t\t\t// Remove any values not present in the newViewAttrs from the view\n\t\t\t\t\t// save the model and/or collection\n\t\t\t\t\t_.each(_.omit(attrsToRemove, 'model', 'collection'), (opt, k) => {\n\t\t\t\t\t\tdelete view[k];\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Backbone.Model.protoype.set return\n\t\treturn ret;\n\t}\n\n\t/**\n\t * Is the provided `viewCollection` our original `viewCollection`?\n\t * @method\n\t * @param {Netx.Collections.AppViews} collection Our `viewCollecton`\n\t * @return {boolean}\n\t */\n\tisMyOriginalCollection(collection) {\n\t\treturn !this.collection ||\n\t\t\t!collection ||\n\t\t\t(this.get('queued') &&\n\t\t\t\tthis.collection.queueFor &&\n\t\t\t\tthis.collection.queueFor._listenId === collection._listenId) ||\n\t\t\tthis.collection._listenId === collection._listenId\n\t\t\t? true\n\t\t\t: false;\n\t}\n\t/**\n\t * @method\n\t * @param {object|string} key Either the key or an object of key values\n\t * @param {mixed} value Either a value or, if the key is an object, it is the options object\n\t * @param {object} opts If key is not an object this the options object, otherwise `null`\n\t */\n\tsetViewOption(key, value, opts) {\n\t\tconst newViewOptions = _.clone(this.get('viewOptions') || {});\n\t\tif (_.isObject(key)) {\n\t\t\t_.extend(newViewOptions, key);\n\t\t} else {\n\t\t\tnewViewOptions[key] = value;\n\t\t}\n\t\treturn this.set('viewOptions', newViewOptions, opts);\n\t}\n\t/**\n\t * Switch back to original `viewCollection`\n\t * @method\n\t */\n\tswitchBack() {\n\t\tthis.currentCollection && this.currentCollection.remove(this);\n\t\treturn this;\n\t}\n\t/**\n\t * Switch to another `viewCollection`\n\t * @method\n\t * @param {Netx.Collections.AppViews} collection Our `viewCollecton`\n\t */\n\tswitchTo(collection) {\n\t\tthis.collection.switchTo(this, collection);\n\t\treturn this;\n\t}\n\n\t/**\n\t * @method\n\t * @return {boolean} Valid\n\t */\n\tisViewActionValid() {\n\t\tconst view = this.get('view');\n\t\tif (!view) return true;\n\n\t\tconst uniqueShowAction = this.get('uniqueShowAction');\n\t\tconst actions = getEnabledActions(\n\t\t\t[FindLegacyAction(uniqueShowAction)],\n\t\t\tview,\n\t\t);\n\n\t\treturn actions.length > 0;\n\t}\n\n\t/** @type {boolean} */\n\tstatic get __isAppView__() {\n\t\treturn true;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AppView';\n\t}\n}\n\nexport default AppView;\n","/**\n * @class\n * @extends Netx.Model\n */\nimport Base from '@netx/core/lib/netx-model';\n\nimport Menu from '@netx/core/lib/netx-menu';\nimport {currentUserMeetsUserLevel} from '@netx/core-user-next/utils/currentUserMeetsUserLevel';\nimport {FindLegacyAction} from '@netx/core/legacyActionManager';\n\nclass OptionTile extends Base {\n\t/**\n\t * @property {object} defaults - The default attribute values\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\taction: '',\n\t\t\tevent: '',\n\t\t\ticon: null,\n\t\t\tlabel: '',\n\t\t\tmenu: null,\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(attr = {}, opts = {}) {\n\t\tsuper(attr, opts);\n\n\t\t// Action string\n\t\tif (_.isString(attr.action)) {\n\t\t\t// Innocent until proven guilty in a court of law\n\t\t\tlet valid = true;\n\t\t\t// Get action object\n\t\t\tlet action = FindLegacyAction(attr.action);\n\n\t\t\t// Unregistered action\n\t\t\tif (!action) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'Could not locate an action for \"' +\n\t\t\t\t\t\tattr.action +\n\t\t\t\t\t\t'\". Ensure it has been registered view Netx.Action.Register.',\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Run through enabler test(s)\n\t\t\tif (action.enableTest) {\n\t\t\t\t// We have multiple enabler tests\n\t\t\t\tif (_.isArray(action.enableTest)) {\n\t\t\t\t\t_.each(action.enableTest, (et) => {\n\t\t\t\t\t\t// If still valid\n\t\t\t\t\t\tif (valid && _.isFunction(et)) {\n\t\t\t\t\t\t\t// Hopefully you passed an object containing something that can be tested\n\t\t\t\t\t\t\t// TODO: update after DAM-6168 is fixed.\n\t\t\t\t\t\t\tvalid = et(opts);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\t// Just a single enabler test\n\t\t\t\telse if (_.isFunction(action.enableTest)) {\n\t\t\t\t\t//valid = action.enableTest( opts );\n\t\t\t\t\t//\n\t\t\t\t\t// DAM-6168: this generally won't work. EnableTests expect a view and an event as args.\n\t\t\t\t\t// Here's a hacking option for 8.5: see cart:relationships handler for the other end of the snake.\n\t\t\t\t\tif (opts.data && opts.data.view) {\n\t\t\t\t\t\tvalid = action.enableTest(opts.data.view);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalid = action.enableTest(opts);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check user level\n\t\t\tif (action.userLevel && !currentUserMeetsUserLevel(action.userLevel)) {\n\t\t\t\tvalid = false;\n\t\t\t}\n\n\t\t\t// All is good\n\t\t\tif (valid) {\n\t\t\t\tthis.attributes = _.extend({}, this.attributes, action);\n\t\t\t\t// Additional 'payload' data\n\t\t\t\t// Useful for enablerTests and permissions checks\n\t\t\t\tthis.attributes.data = opts.data;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (!(attr.action instanceof Menu)) {\n\t\t\tconsole.warn('Unknown action: ' + attr.action);\n\t\t\treturn;\n\t\t}\n\n\t\t// Action menu\n\t\tthis.attributes = _.extend({}, this.attributes, {\n\t\t\t// We just point the action back at 'app:optionTiles' which will take this model's menu object and keep going\n\t\t\taction: 'app:showOptions',\n\t\t\tevent: 'app:showOptions',\n\t\t\tmenu: attr.action,\n\t\t\ticon: attr.action.get('icon'),\n\t\t\tlabel: attr.action.get('label'),\n\t\t});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'OptionTile';\n\t}\n}\n\nexport default OptionTile;\n","// See Netx.Collections.StorageLocations `getLocationTypes` parser for how typeIds/labels/types get set\nexport let typeIds = {};\nexport let typeLabels = {};\n\nexport default {typeIds, typeLabels};\n","import {setGlobal} from '@netx/core-next/utils/setGlobal';\nimport AppViewsCollection from '../collections/appViews';\n\nexport const appViews = new AppViewsCollection([]);\n\nexport default appViews;\n\nsetGlobal({appViews});\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-multiView';\nimport Template from '../templates/appBodyView.html';\n\nclass AppBodyView extends Base {\n\t/** @override */\n\tconstructor(opts = {}) {\n\t\topts.additionalViewClasses = opts.additionalViewClasses || 'body-view';\n\t\topts.childView = {\n\t\t\tviewClass(model) {\n\t\t\t\treturn model.get('viewClass');\n\t\t\t},\n\t\t\t...opts.childView,\n\t\t};\n\t\topts.id = opts.id || 'body-view';\n\t\topts.template = opts.template || Template;\n\t\tsuper(opts);\n\t}\n\n\t/**\n\t * @static\n\t * @type {string}\n\t */\n\tstatic get __name__() {\n\t\treturn 'AppBodyView';\n\t}\n}\n\nexport default AppBodyView;\n","import AppViewsCollection from '../collections/appViews';\nimport AppBodyView from '../views/appBodyView';\n\nexport const bodyViews = new AppViewsCollection([]);\n\nexport const bodyView = new AppBodyView({\n\tviewCollection: bodyViews,\n});\n\nexport default bodyViews;\n\nimport {setGlobal} from '@netx/core-next/utils/setGlobal';\nif (process.env.NODE_ENV !== 'production') {\n\tsetGlobal({bodyViews});\n}\n","import {dispatcher} from '@netx/core-next/instance/dispatcher';\nimport {RegisterLegacyAction} from '@netx/core/legacyActionManager';\nimport AppViewsCollection from '../collections/appViews';\n\nexport const fsViews = new AppViewsCollection([]);\n\nRegisterLegacyAction([\n\t{\n\t\tevent: 'app:remove:fsView',\n\t\tlabel: '',\n\t\twrapper: function (v: any) {\n\t\t\treturn [v.model];\n\t\t},\n\t},\n]);\n\n/**\n * Removes all fullscreen views (and in turn closes the fullscreen view if open)\n * @event module:app#app:reset:fsViews\n */\ndispatcher.on('app:reset:fsViews', function () {\n\tfsViews.set([]);\n});\n\n/**\n * @event module:app#app:remove:fsView\n * @param {Netx.Models.AppView} appView App view model\n */\ndispatcher.on('app:remove:fsView', function (appView: any) {\n\tconst view = appView.get('view');\n\tif (!view) return;\n\n\t// TODO: set property that tells us if this is a form view - no need to be doing this instance of stuff\n\t// in the current state it would be something like: `isFormView: true`\n\t// when we start extending functionality and not whole views we can keep an array of the funstionality\n\t// that has been extended - `functionality: ['form', 'table']`\n\n\t// Let the view know it has been `cancelled`\n\t// Allows us to utlize the standard event system\n\tif (view.hasFunctionality('form') && typeof view.cancel === 'function') {\n\t\tappView.collection._listenId === fsViews._listenId && view.cancel();\n\t\treturn;\n\t}\n\t// Will remove from fs childViews\n\tfsViews.remove(appView.id);\n\t// Let the hide stuff run so we do not get jerky results\n\t// all fs views are set to remove on hidden so long as the simple param is not passed\n\t// view.hide();\n});\n\nexport default fsViews;\n\nimport {setGlobal} from '@netx/core-next/utils/setGlobal';\nsetGlobal({fsViews});\n","import {RegisterLegacyAction} from '@netx/core/legacyActionManager';\nimport AppViewsCollection from '../collections/appViews';\nimport AppModalView from '../views/appModalView';\n\nexport const modalViews = new AppViewsCollection([]);\n\nexport const modalView = new AppModalView({\n\tviewCollection: modalViews,\n});\n\nRegisterLegacyAction([\n\t{\n\t\tevent: 'app:remove:modalView',\n\t\tlabel: '',\n\t\twrapper: (v: any) => {\n\t\t\treturn [v.model];\n\t\t},\n\t},\n]);\n\n/**\n * @event module:app#app:remove:modalView\n * @param {Netx.Models.AppView} appView App view model\n */\ndispatcher.on('app:remove:modalView', function (appView: any) {\n\tconst view = appView.get('view');\n\tif (!view) return;\n\n\t// Vars\n\tconst modalOpts = view.modalOptions || {};\n\tconst activeView = modalViews.findWhere({active: true}) as any;\n\tconst activeViewModalOpts =\n\t\tactiveView && activeView.modalOptions ? activeView.modalOptions : {};\n\n\t// Can't do that while blocking\n\tif (modalOpts.blocking === true || activeViewModalOpts.blocking === true) {\n\t\treturn;\n\t}\n\t// Let the view know it has been `cancelled`\n\t// Allows us to utlize the standard event system\n\tif (view.hasFunctionality('form') && typeof view.cancel === 'function') {\n\t\tappView.collection._listenId === modalViews._listenId && view.cancel();\n\t\treturn;\n\t} else {\n\t\t// Will remove from modal childViews\n\t\tmodalViews.remove(appView.id);\n\t\t// Let the hide stuff run so we do not get jerky results\n\t\t// all modal views are set to remove on hidden so long as the simple param is not passed\n\t\t// view.hide();\n\t}\n});\n/**\n * Removes all modal views (and in turn closes modal if open)\n * @event module:app#app:reset:modalViews\n */\ndispatcher.on('app:reset:modalViews', function () {\n\tmodalViews.set([]);\n});\n\nexport default modalViews;\n","import {i18n} from '@netx/core/i18n';\n\nexport const AssetVideoLabels = {\n\tCAPTION: i18n.t('i18n.caption'),\n};\n","import {\n\tgenerateUtilityClass,\n\tgenerateUtilityClasses,\n} from '@netx/core-components/Theme';\n\nexport const ASSET_VIDEO_CLASS_NAME = 'AssetVideo';\nexport const ASSET_VIDEO_CLASS_SLOTS = ['root'] as const;\n\nexport type AssetVideoClassSlot = typeof ASSET_VIDEO_CLASS_SLOTS[number];\n\nexport interface AssetVideoClasses {\n\troot: string;\n\tshowWatermark: string;\n}\n\nexport type AssetVideoClassKey = keyof AssetVideoClasses;\n\nexport const getAssetVideoUtilityClass = (slot: string) =>\n\tgenerateUtilityClass(ASSET_VIDEO_CLASS_NAME, slot);\n\nexport const assetVideoClasses: AssetVideoClasses = generateUtilityClasses(\n\tASSET_VIDEO_CLASS_NAME,\n\t['root', 'showWatermark'],\n);\n\nexport default assetVideoClasses;\n","import React, {Suspense, useEffect, useState} from 'react';\nimport clsx from 'clsx';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {faVideo, faVideoSlash} from '@fortawesome/pro-regular-svg-icons';\nimport {keyframes, css} from '@mui/system';\nimport {URL} from '@netx/core-next/url';\nimport {withQueryClient} from '@netx/core-next/lib';\nimport {type IAsset} from '@netx/core-asset-next/schema';\nimport useImageLoader from '@netx/core-components/hooks/useImageLoader';\nimport {composeClasses, styled, WithClasses} from '@netx/core-components/Theme';\nimport {currentUserMeetsUserLevel, UserLevel} from '@netx/core-user-next/utils';\nimport type {VideoPlayerProps} from '@netx/core-video';\nimport {useAssetVideo} from '../hooks';\nimport {AssetVideoLabels} from '../locales';\nimport {\n\tassetVideoClasses,\n\tgetAssetVideoUtilityClass,\n\tAssetVideoClasses,\n\tASSET_VIDEO_CLASS_NAME,\n} from './assetVideoClasses';\n\nconst VideoPlayer = React.lazy(\n\t() => import('@netx/core-video/components/VideoPlayer/VideoPlayer'),\n);\n\ntype AssetVideoUtiltiyClassProps = WithClasses<\n\tAssetVideoClasses,\n\t{\n\t\tshowWatermark?: boolean;\n\t}\n>;\n\nconst useUtilityClasses = (ownerState: AssetVideoUtiltiyClassProps) => {\n\tconst {classes, showWatermark} = ownerState;\n\tconst slots = {\n\t\troot: ['root', showWatermark && 'showWatermark'],\n\t};\n\treturn composeClasses(slots, getAssetVideoUtilityClass, classes);\n};\n\nconst AssetVideoRoot = styled('div', {\n\tname: ASSET_VIDEO_CLASS_NAME,\n\tslot: 'Root',\n})(({theme}) => ({\n\tdisplay: 'flex',\n\tflex: '1 1 auto',\n\toverflow: 'hidden',\n\talignItems: 'center',\n\tjustifyContent: 'center',\n\tflexDirection: 'column',\n\tminHeight: 0,\n\t[`&.${assetVideoClasses.showWatermark}`]: {\n\t\t'.video-js': {\n\t\t\t'&::after': {\n\t\t\t\tcontent: '\"\"',\n\t\t\t\t...theme.mixins.watermark(),\n\t\t\t\tzIndex: 0,\n\t\t\t},\n\t\t\t'& .vjs-text-track-display, .vjs-control-bar': {\n\t\t\t\tzIndex: 2,\n\t\t\t},\n\t\t},\n\t},\n}));\n\nconst pulseKeyframe = keyframes`\n 0% {\n opacity: 1;\n }\n 50% {\n opacity: 0.4;\n }\n 100% {\n opacity: 1;\n }\n`;\n\nconst AssetVideoLoading = styled(FontAwesomeIcon, {\n\tname: ASSET_VIDEO_CLASS_NAME,\n\tslot: 'Loading',\n})(({theme}) => ({\n\t...css`\n\t\tanimation: ${pulseKeyframe} 1.5s ease-in-out infinite;\n\t`,\n}));\n\nconst AssetVideoError = styled(FontAwesomeIcon, {\n\tname: ASSET_VIDEO_CLASS_NAME,\n\tslot: 'Error',\n})(({theme}) => ({\n\tcolor: theme.palette.text.secondary,\n}));\n\nexport interface AssetVideoProps\n\textends Omit, 'classes' | 'duration' | 'options'>,\n\t\tWithClasses {\n\t// Normalized\n\tautoPlay?: boolean;\n\tasset: IAsset;\n\t// We control the sources, tracks, poster, etc.\n\toptions?: Omit<\n\t\tVideoPlayerProps['options'],\n\t\t'autoplay' | 'poster' | 'sources' | 'tracks'\n\t>;\n\tqueryParams?: Record;\n}\n\nexport const AssetVideoPrimitive = ({\n\tclasses: _classes,\n\tclassName,\n\tqueryParams,\n\tasset,\n\tautoPlay,\n\toptions,\n\t...props\n}: AssetVideoProps) => {\n\tconst [showWatermark, setShowWatermark] = useState(false);\n\tconst watermarkImageLoader = useImageLoader(true);\n\n\tconst {video: videoDetails, loading} = useAssetVideo({\n\t\tasset,\n\t\tqueryParams,\n\t});\n\n\tconst ownerState: AssetVideoUtiltiyClassProps = {\n\t\tclasses: _classes,\n\t\tshowWatermark,\n\t};\n\n\tconst classes = useUtilityClasses(ownerState);\n\n\tuseEffect(() => {\n\t\twatermarkImageLoader.load(URL.watermark);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tsetShowWatermark(!!watermarkImageLoader.src);\n\t}, [watermarkImageLoader.src]);\n\n\treturn (\n\t\t\n\t\t\t{loading ? : null}\n\n\t\t\t{!loading && videoDetails ? (\n\t\t\t\t}>\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) : null}\n\n\t\t\t{!loading && !videoDetails ? (\n\t\t\t\t\n\t\t\t) : null}\n\t\t\n\t);\n};\n\nexport const AssetVideo = withQueryClient(AssetVideoPrimitive);\n\nexport default AssetVideo;\n","export const VIDEO_VIEW_FILE_TYPE = 'video/mp4';\n","import {AssetViewName} from '@netx/core-asset-views';\nimport {URL} from '@netx/core-next/url';\nimport {VIDEO_VIEW_FILE_TYPE} from '../constants';\n\nexport const getViewPath = (assetId: number) =>\n\t`${URL.assetEndpoint}/${assetId}/view`;\n\nexport const getSource = (assetId: number, appendToSrc = '') => ({\n\tsrc: `${getViewPath(assetId)}/${\n\t\tAssetViewName.H264\n\t}/v_${assetId}.mp4${appendToSrc}`,\n\ttype: VIDEO_VIEW_FILE_TYPE,\n});\n\nexport const getVTTSrc = (assetId: number, appendToSrc = '') =>\n\t`${getViewPath(assetId)}/${AssetViewName.VTT}/v_${assetId}.vtt${appendToSrc}`;\n","import {useMemo} from 'react';\nimport {getURLQueryFromObject} from '@netx/core-next/utils/url';\nimport {type IAsset} from '@netx/core-asset-next/schema';\nimport {\n\tAssetViewName,\n\tuseGetViewObjectsForAssetReactQuery,\n} from '@netx/core-asset-views';\nimport {getSource, getVTTSrc} from '../utils';\n\nexport type VideoDetails = {\n\t/** duration in seconds */\n\tduration: number;\n\tsrc: string;\n\ttype: string;\n\twidth: number;\n\theight: number;\n\tposterUrl: string;\n\tposterWidth: number;\n\tposterHeight: number;\n\tVTTSrc: string;\n};\n\nexport type UseAssetVideoProps = {\n\tasset: IAsset;\n\tqueryParams?: Record;\n};\n\nexport const useAssetVideo = ({asset, queryParams}: UseAssetVideoProps) => {\n\tconst {assetId} = asset;\n\n\tconst query = useGetViewObjectsForAssetReactQuery({\n\t\tid: assetId,\n\t});\n\n\tconst videoDetails = useMemo(() => {\n\t\tif (!query.data) return;\n\n\t\tconst view = query.data.find((view) => view.name === AssetViewName.H264);\n\t\tconst vttView = query.data.find((view) => view.name === AssetViewName.VTT);\n\n\t\tif (!view) {\n\t\t\tconsole.warn(\n\t\t\t\t`${AssetViewName.H264} view not found for asset ${assetId}. using asset preview dimensions`,\n\t\t\t);\n\t\t}\n\t\tconst {previewHeight, previewWidth, previewUrl} = asset;\n\t\tconst appendToSrc = getURLQueryFromObject(queryParams);\n\t\treturn {\n\t\t\t...getSource(assetId, appendToSrc),\n\t\t\tduration: asset.duration / 1000,\n\t\t\theight: view?.fileHeight || previewHeight,\n\t\t\twidth: view?.fileWidth || previewWidth,\n\t\t\tposterUrl: `${previewUrl}${appendToSrc}`,\n\t\t\tposterHeight: previewHeight,\n\t\t\tposterWidth: previewWidth,\n\t\t\tVTTSrc: vttView ? getVTTSrc(assetId, appendToSrc) : '',\n\t\t};\n\t}, [query.data, query.dataUpdatedAt, queryParams]);\n\n\treturn {\n\t\tvideo: videoDetails,\n\t\tloading: query.isLoading || query.isFetching,\n\t};\n};\n\nexport default useAssetVideo;\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/assetAttributeSet';\n\nimport AttributesCollection from './attributes';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\nimport {assetAttributes} from '@netx/core-attribute/singletons';\nimport {getUserLevel} from '@netx/core-user-next/utils/getUserLevel';\nimport {setPreference} from '@netx/core-user-next/utils/setPreference';\n\nexport default class AssetAttributeSetsSelection extends Base {\n\t/** @type {function} */\n\tcomparator(a, b) {\n\t\t// Mandatory comes first\n\t\tif (a.id === 'mandatory') return -1;\n\t\tif (b.id === 'mandatory') return 1;\n\n\t\t// Default name comparison\n\t\treturn a.get('name').localeCompare(b.get('name'));\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\n\t\tsuper(models, opts);\n\n\t\t// We really should not be populating sets via this collection\n\t\t// this collections job should be to just manage what is selected\n\t\t// once we switch all attribute displays over to the new react stuff\n\t\t// this hack will not be neccessary and we can remove all code related\n\t\t// to populating sets from this collection\n\t\tthis.preventAutoPopulateOnSelectionChange =\n\t\t\topts.preventAutoPopulateOnSelectionChange === true;\n\n\t\t/**\n\t\t * Contains all avialable attribute templates\n\t\t * @memberOf Netx.Collections.AssetAttributeSetsSelection\n\t\t * @alias assetAttributes\n\t\t * @type {module:asset/collections/attributes}\n\t\t */\n\t\tthis.assetAttributes = opts.assetAttributes || assetAttributes;\n\n\t\t/**\n\t\t * Contains all avialable attribute sets\n\t\t * @memberOf Netx.Collections.AssetAttributeSetsSelection\n\t\t * @alias attributeSets\n\t\t * @type {Netx.Collections.AssetAttributeSets}\n\t\t */\n\t\tconst attributeSets = (this.attributeSets =\n\t\t\topts.attributeSets || Netx.asset.attributeSets);\n\n\t\t/**\n\t\t * Store all selected set ids\n\t\t * DAM-6898 - default to all attributes if a user has not selected any yet\n\t\t * @memberOf Netx.Collections.AssetAttributeSetsSelection\n\t\t * @alias selectedSetIds\n\t\t * @type {array}\n\t\t */\n\t\tthis.selectedSetIds = opts.selectedSetIds || ['all'];\n\n\t\t/**\n\t\t * Can we have multiple selected attribute sets\n\t\t * @type {boolean}\n\t\t * @default\n\t\t */\n\t\tthis.multiple = opts.multiple === true;\n\n\t\t/**\n\t\t * If specified it will be used to get and save the selected set(s) from user prefs\n\t\t * @type {string}\n\t\t * @default\n\t\t */\n\t\tthis.userPrefKey = opts.userPrefKey || '';\n\t\tthis.userOrderPrefKey = opts.userOrderPrefKey || '';\n\t\tthis.userCollapsePrefKey = opts.userCollapsePrefKey || '';\n\n\t\tconst orderPref = getPreference(this.userOrderPrefKey);\n\t\tthis.userOrder = orderPref ? orderPref.split(',') : [];\n\n\t\tconst collapsePref = getPreference(this.userCollapsePrefKey);\n\t\tthis.collapsed = collapsePref ? collapsePref.split(',') : [];\n\n\t\t// Hey, listen\n\t\tthis.listenTo(attributeSets, 'request:read', (collection, xhr, opts) => {\n\t\t\tif (collection !== attributeSets) return;\n\t\t\tthis.trigger('request:read', this, xhr, opts);\n\t\t})\n\t\t\t// Attribute sets have updated\n\t\t\t.listenTo(\n\t\t\t\tattributeSets,\n\t\t\t\t'nx:change:attributeSets',\n\t\t\t\t(attributes, collection, model) => {\n\t\t\t\t\t// Either we are empty or the attribute set that changed is one of ours\n\t\t\t\t\tif (!this.length || (model && this.get(model.id))) {\n\t\t\t\t\t\tthis.populateSets();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t)\n\t\t\t// Attribute sets have synced\n\t\t\t.listenTo(attributeSets, 'sync', (collection, models, opts) => {\n\t\t\t\tif (collection !== attributeSets) return;\n\t\t\t\tthis.trigger('sync', this, models, opts);\n\t\t\t\tthis.populateSets(opts);\n\t\t\t})\n\t\t\t// If a currently selected set is deactivated, it can no longer be selected.\n\t\t\t// We deal with that case by selecting the first 'active' set in our list of sets.\n\t\t\t.listenTo(attributeSets, 'change:active', (attributeSet) => {\n\t\t\t\tif (\n\t\t\t\t\tattributeSet.get('active') ||\n\t\t\t\t\t!this.selectedSetIds.includes(attributeSet.id)\n\t\t\t\t)\n\t\t\t\t\treturn;\n\t\t\t\t// Just remove from the array of selected\n\t\t\t\tif (this.multiple && this.selectedSetIds.length > 1) {\n\t\t\t\t\tthis.setSelected(_.without(this.selectedSetIds, attributeSet.id));\n\t\t\t\t} else {\n\t\t\t\t\tconst firstActiveSet = attributeSets.selectableSets().all[0];\n\t\t\t\t\tthis.setSelected(firstActiveSet.id);\n\t\t\t\t}\n\t\t\t})\n\t\t\t// If a currently selected set changes its attributes - check that it can still be selectable\n\t\t\t// We deal with that case by selecting the first selectable set in our list of sets.\n\t\t\t.listenTo(\n\t\t\t\tattributeSets,\n\t\t\t\t'change:attributeIds',\n\t\t\t\t(attributeSet, attributeIds) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tattributeIds.length !== 0 ||\n\t\t\t\t\t\t!this.selectedSetIds.includes(attributeSet.id)\n\t\t\t\t\t)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Just remove from the array of selected\n\t\t\t\t\tif (this.multiple && this.selectedSetIds.length > 1) {\n\t\t\t\t\t\tthis.setSelected(_.without(this.selectedSetIds, attributeSet.id));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst firstActiveSet = this.attributeSets.selectableSets().all[0];\n\t\t\t\t\t\tthis.setSelected(firstActiveSet.id);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t)\n\n\t\t\t// HACK\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'asset:attributeSets:selected:hack',\n\t\t\t\t(ids, userPrefKey) => {\n\t\t\t\t\tif (this.userPrefKey !== userPrefKey) return;\n\t\t\t\t\tconst selectedIds = this.selectedSetIds;\n\t\t\t\t\tconst difference = selectedIds\n\t\t\t\t\t\t.filter((id) => !ids.includes(id))\n\t\t\t\t\t\t.concat(ids.filter((id) => !selectedIds.includes(id)));\n\n\t\t\t\t\tlet promise;\n\t\t\t\t\t// Set our selected\n\t\t\t\t\tif (!this.preventAutoPopulateOnSelectionChange) {\n\t\t\t\t\t\tpromise = this.populateSets({difference: difference});\n\t\t\t\t\t}\n\n\t\t\t\t\t// For anything listening\n\t\t\t\t\tthis.trigger('nx:change:selection', this, this.selectedSetIds);\n\n\t\t\t\t\treturn promise;\n\t\t\t\t},\n\t\t\t);\n\n\t\t// Only if we have a valid user\n\t\tif (this.userPrefKey && getUserLevel() > 0) {\n\t\t\t// Look for prefs for selected sets\n\t\t\tconst selectedSetIds = getPreference(this.userPrefKey);\n\t\t\tif (\n\t\t\t\tselectedSetIds != null &&\n\t\t\t\tselectedSetIds !== '' &&\n\t\t\t\ttypeof selectedSetIds === 'string'\n\t\t\t) {\n\t\t\t\tthis.selectedSetIds = this.multiple\n\t\t\t\t\t? // Remove any duplicates and ensure they are all parsed to numbers\n\t\t\t\t\t // TODO backportSelectedSetId can be removed in 8.12\n\t\t\t\t\t // This is to try and fix the user prefs for <= 8.10 which were using system ids and 2 made up ones for \"My\" and \"All\" (0,-1)\n\t\t\t\t\t selectedSetIds\n\t\t\t\t\t\t\t.split(',')\n\t\t\t\t\t\t\t.map(this.backportSelectedSetId.bind(this))\n\t\t\t\t\t\t\t.filter((id) => id != null)\n\t\t\t\t\t: // TODO can be removed in 8.12\n\t\t\t\t\t // This is to try nad fix the user prefs for <= 8.10\n\t\t\t\t\t [this.backportSelectedSetId(selectedSetIds)];\n\t\t\t}\n\t\t}\n\n\t\tthis.attributeSets.syncedOnce && this.populateSets();\n\t}\n\n\t/**\n\t * We have changed how sets are handled - this will try and fix exisiting prefs\n\t * @param {number|string} setId Attribute set id\n\t * @todo Remove in 8.12\n\t * @fires module:user#user:prefs:set\n\t */\n\tbackportSelectedSetId(setId) {\n\t\tlet selectedSetId = setId;\n\t\tswitch (parseInt(setId)) {\n\t\t\tcase 0:\n\t\t\t\tvar userSetId = getPreference('attributeSet.user');\n\t\t\t\tselectedSetId = userSetId ? `user-${userSetId}` : null;\n\t\t\t\tbreak;\n\t\t\tcase -1:\n\t\t\t\tselectedSetId = 'all';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (_.isNumeric(setId)) {\n\t\t\t\t\tselectedSetId = `system-${setId}`;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\t// If we still have a valid number then something was not found\n\t\t// Default to `all`\n\t\tif (!selectedSetId || !isNaN(selectedSetId)) {\n\t\t\tselectedSetId = 'all';\n\t\t}\n\n\t\t// Loose comparison as we do not care about number vs string\n\t\tif (selectedSetId != setId) {\n\t\t\t// Update prefs\n\t\t\tdispatcher.trigger('user:prefs:set', this.userPrefKey, selectedSetId);\n\t\t}\n\n\t\treturn selectedSetId;\n\t}\n\n\t/**\n\t * Get attribute for selected attribute set(s)\n\t * @method\n\t * @return {array|Netx.Collections.Attributes}\n\t */\n\tgetAttributes() {\n\t\t// If multiple, return an array of attribute collections\n\t\tif (this.multiple) {\n\t\t\treturn this.map((attributeSet) => attributeSet.attributeTemplates);\n\t\t}\n\n\t\t// Single selection, return the single attribute collection\n\t\treturn this.at(0)\n\t\t\t? this.at(0).attributeTemplates\n\t\t\t: new AttributesCollection([], {comparator: null});\n\t}\n\n\t/**\n\t * Because this collection offers multiple or single selection - adding this method to avoid anyone getting confused by the idea\n\t * @method\n\t * @returns {array|string} Return the currently selected attribute set id(s)\n\t */\n\tgetSelectedSetId() {\n\t\treturn this.getSelectedSetIds();\n\t}\n\n\t/**\n\t * @method\n\t * @returns {array|string} Return the currently selected attribute set id(s)\n\t */\n\tgetSelectedSetIds() {\n\t\treturn this.multiple ? this.selectedSetIds : this.selectedSetIds[0];\n\t}\n\n\t/**\n\t * Populates selected attribute sets\n\t * For all intents and purposes, this is our fetch\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tpopulateSets(opts = {}) {\n\t\tconst attributeSets = this.attributeSets;\n\t\tconst difference = opts.difference || [];\n\t\tconst hasDifferences = difference.length > 0;\n\n\t\treturn Promise.all(\n\t\t\tthis.selectedSetIds\n\t\t\t\t.map((id) => {\n\t\t\t\t\t// Only fetch the ones that were added if there are differences\n\t\t\t\t\tif (hasDifferences && !difference.includes(id)) return;\n\n\t\t\t\t\t// This is a hack until system and user sets are unified\n\t\t\t\t\t// see todo in the class description\n\t\t\t\t\tconst attrSet = attributeSets.get(id);\n\t\t\t\t\tif (attrSet && attrSet.id.includes('user-')) {\n\t\t\t\t\t\treturn attrSet.fetchBean();\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.filter((promise) => promise != null),\n\t\t).then(() => {\n\t\t\tconst badIds = this.selectedSetIds.filter(\n\t\t\t\t(id) => id !== 'all' && !attributeSets.get(id),\n\t\t\t);\n\n\t\t\t// Correct our bad selection\n\t\t\tif (badIds.length) {\n\t\t\t\tlet newIds = _.without.apply(_, [this.selectedSetIds].concat(badIds));\n\t\t\t\tif (!newIds.length) newIds = ['all'];\n\t\t\t\treturn this.setSelected(newIds);\n\t\t\t}\n\n\t\t\t// Now prepare for setting on this collection\n\t\t\tconst sets = attributeSets.filter(\n\t\t\t\t// If a selected set\n\t\t\t\t// If we have multiple selection, mandatory attributes are non-negotiable\n\t\t\t\t(attrSet) =>\n\t\t\t\t\tthis.selectedSetIds.includes(attrSet.id) ||\n\t\t\t\t\t(this.multiple && attrSet.id === 'mandatory'),\n\t\t\t);\n\n\t\t\tlet userOrder = this.userOrder;\n\t\t\tif (userOrder.length) {\n\t\t\t\tsets.forEach((attrSet) => {\n\t\t\t\t\tif (userOrder.includes(attrSet.id)) return;\n\t\t\t\t\tattrSet.id === 'mandatory'\n\t\t\t\t\t\t? userOrder.unshift(attrSet.id)\n\t\t\t\t\t\t: userOrder.push(attrSet.id);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tuserOrder = sets.map((attrSet) => attrSet.id);\n\t\t\t}\n\n\t\t\tthis.set(sets, opts);\n\n\t\t\t// We have now synced\n\t\t\t!opts.silent && this.trigger('sync', this, sets, opts);\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {array} collapsed Collapsed\n\t */\n\tsetCollapsed(collapsed) {\n\t\tthis.collapsed = collapsed;\n\t\tsetPreference(this.userCollapsePrefKey, this.collapsed.join());\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} order Order\n\t */\n\tsetOrder(order) {\n\t\tthis.userOrder = [];\n\t\tfor (let key in order) {\n\t\t\tif (order.hasOwnProperty(key)) {\n\t\t\t\tthis.userOrder[order[key]] = key;\n\t\t\t}\n\t\t}\n\t\tsetPreference(this.userOrderPrefKey, this.userOrder.join());\n\t}\n\n\t/**\n\t * Set selected attribute sets and populate\n\t * @method\n\t * @param {array|number} ids A single attribute id or an array of attribute ids\n\t * @fires module:user#user:prefs:set\n\t */\n\tsetSelected(ids) {\n\t\t// Regardless of this being a a multiple or single select we always deal with an array for our selected id(s)\n\t\t// The only time it matters whether it multiple or single selection is at user pref save and get\n\t\tif (!Array.isArray(ids)) {\n\t\t\tids = [ids];\n\t\t}\n\n\t\t// Track difference (we do not need to refetch all sets if we are adding 1/removing 1)\n\t\tconst selectedIds = this.selectedSetIds;\n\t\tconst difference = selectedIds\n\t\t\t.filter((id) => !ids.includes(id))\n\t\t\t.concat(ids.filter((id) => !selectedIds.includes(id)));\n\n\t\t// No duplicates\n\t\tthis.selectedSetIds = ids = [...new Set(ids.filter((id) => id !== ''))];\n\n\t\t// I f we have a valid user and a user pref key was provided, save to user prefs\n\t\tif (this.userPrefKey && getUserLevel() > 0) {\n\t\t\tsetPreference(\n\t\t\t\tthis.userPrefKey,\n\t\t\t\tthis.multiple ? ids.join() : ids[0] == null ? '' : ids[0],\n\t\t\t);\n\t\t}\n\n\t\tlet promise;\n\t\t// Set our selected\n\t\tif (!this.preventAutoPopulateOnSelectionChange) {\n\t\t\tpromise = this.populateSets({difference: difference});\n\t\t}\n\n\t\t// For anything listening\n\t\tthis.trigger('nx:change:selection', this, this.selectedSetIds);\n\n\t\treturn promise;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetAttributeSetsSelection';\n\t}\n}\n","import {UserLevel} from '@netx/core-user/constants';\n\nexport const MINIMUM_USER_LEVEL = UserLevel.ADMIN;\n","import {i18n} from '@netx/core/i18n';\n\nexport const AttributeProfilesSystemLabel = {\n\tROUTE: i18n.t('i18n.attributeProfiles'),\n};\n\nexport const PROFILE_ACTION = {\n\tADD: i18n.t('i18n.addAttributeProfile'),\n\tEDIT: i18n.t('i18n.editAttributeProfile'),\n};\n","import {getViewModel} from '@netx/core/lib/utils';\n\nimport type AttributeModel from '@netx/core-asset/models/attribute';\nimport type View from '@netx/core/lib/netx-view';\n\nimport {MINIMUM_USER_LEVEL} from '../constants';\nimport {canEdit} from '../enablers';\nimport {PROFILE_ACTION} from '../locales';\n\nimport type {Action} from '@netx/core/bootstrap';\n\nimport {icon} from '@fortawesome/fontawesome-svg-core';\nimport {faPencilAlt} from '@fortawesome/pro-solid-svg-icons';\n\nconst iconOpts = {classes: ['fa-fw']};\nconst icons = {\n\tfaPencilAlt: icon(faPencilAlt, iconOpts).html,\n};\n\nconst wrapper = (view: View, event: MouseEvent) => [\n\tgetViewModel(view),\n\tevent,\n];\n\nexport const BASE_EVENT = `attribute:profile`;\n\nexport const ATTRIBUTE_PROFILE_EVENT = {\n\tADD: `${BASE_EVENT}:new`,\n\tEDIT: `${BASE_EVENT}:edit`,\n};\n\nexport const ACTIONS: Action<\n\ttypeof ATTRIBUTE_PROFILE_EVENT[keyof typeof ATTRIBUTE_PROFILE_EVENT]\n>[] = [\n\t{\n\t\tevent: ATTRIBUTE_PROFILE_EVENT.ADD,\n\t\tenableTest: canEdit,\n\t\tlabel: PROFILE_ACTION.ADD,\n\t\ttestOnSync: true,\n\t\tuserLevel: MINIMUM_USER_LEVEL,\n\t},\n\t{\n\t\tevent: ATTRIBUTE_PROFILE_EVENT.EDIT,\n\t\tenableTest: canEdit,\n\t\ticon: icons.faPencilAlt,\n\t\tlabel: PROFILE_ACTION.EDIT,\n\t\ttestOnSync: true,\n\t\tuserLevel: MINIMUM_USER_LEVEL,\n\t\twrapper,\n\t},\n];\n\nexport default ACTIONS;\n","/**\n * @class\n * Collection to handle attribute profiles\n * https://kb.netx.net/display/DEV/Attribute+Profiles+for+Folders\n */\n\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/attributeProfile';\nimport Netx from '@netx/core/bootstrap';\nimport PagerModel from '@netx/core-app/models/pager';\nimport SorterModel from '@netx/core-app/models/sorter';\n\nimport {ATTRIBUTE_PROFILE_EVENT} from '@netx/core-attribute-profile/actions';\n\nexport default class AttributeProfiles extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetAttributeProfiles: 'Loading attribute profiles',\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetAttributeProfiles: 'Loaded attribute profiles',\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget methods() {\n\t\treturn {\n\t\t\tread() {\n\t\t\t\treturn [\n\t\t\t\t\t'getAttributeProfiles',\n\t\t\t\t\tthis.filterStr,\n\t\t\t\t\tthis.sorter.getSortDTO(),\n\t\t\t\t\tthis.pager.getPageDTO(),\n\t\t\t\t];\n\t\t\t},\n\t\t\tgetAttributeProfileForFolder: (folderId, opts) => [\n\t\t\t\t'getAttributeProfileForFolder',\n\t\t\t\tfolderId,\n\t\t\t],\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget parsers() {\n\t\treturn {\n\t\t\tgetAttributeProfileForFolder: (data, opts) => {\n\t\t\t\treturn data;\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * Paging model\n\t\t * @memberOf Netx.Collections.AttributeProfiles\n\t\t * @alias pager\n\t\t * @type {Netx.Models.Pager}\n\t\t */\n\t\tthis.pager = new PagerModel(\n\t\t\tObject.assign(\n\t\t\t\t{\n\t\t\t\t\t// TODO: collections/models should not need to know about routes/routing\n\t\t\t\t\troutesToPage: false,\n\t\t\t\t},\n\t\t\t\topts.pager,\n\t\t\t),\n\t\t\t{collection: this},\n\t\t);\n\n\t\t/**\n\t\t * Sorting model\n\t\t * @memberof module:asset/collections/participants\n\t\t * @alias sorter\n\t\t * @type {module:app/models/sorter}\n\t\t */\n\t\tthis.sorter = new SorterModel(\n\t\t\t{\n\t\t\t\tfield: opts.sortField || 'name',\n\t\t\t\torder: opts.sortOrder || 'desc',\n\t\t\t},\n\t\t\t{\n\t\t\t\tcollection: this,\n\t\t\t\tsortableFields: ['name'],\n\t\t\t},\n\t\t);\n\t\tthis.addSubModel(this.sorter);\n\n\t\t// Add model to collection after successful edit\n\t\tthis.listenTo(\n\t\t\tdispatcher,\n\t\t\t`${ATTRIBUTE_PROFILE_EVENT.EDIT}:success`,\n\t\t\t(attributeProfile) => {\n\t\t\t\tthis.add(attributeProfile, {merge: true});\n\t\t\t\tthis.trigger('sync', this);\n\t\t\t},\n\t\t);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AttributeProfiles';\n\t}\n}\n","/**\n * The asset cursor is a 2-asset collection which we use to page through a selection.\n * (We select one extra asset, for a total of two, in order to detect the end of the selection\n * before we hit it.) Asset cursor can be fetched by the pager event handlers\n * (which endeavor to shift the cursor left or right) or by asset:cursor:goto\n * (which endeavors to find a particular asset in the selection.)\n * @class\n */\nimport Base from './assets';\n\nimport SearchConstituentsCollection from '@netx/core-search/collections/searchConstituents';\n\nexport default class AssetCursor extends Base {\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetAssetObjects: 'Loading asset',\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetAssetObjects: 'Loaded asset',\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\tsuper(models, opts);\n\n\t\t// Non-negotiable\n\t\tthis.chunkSize = this.pageSize = 1;\n\n\t\t/**\n\t\t * @memberOf Netx.Collections.AssetCursor\n\t\t * @alias cachedCollection\n\t\t * @type {Netx.Collections.Assets}\n\t\t */\n\t\tthis.cachedCollection = null;\n\t\topts.cachedCollection && this.cacheFetch(opts.cachedCollection);\n\n\t\tthis.syncTimeout = null;\n\n\t\t// Hey, listen!\n\t\tthis.stopListening(dispatcher, 'asset:editor:edited smartLabels:updated')\n\t\t\t// When we read, so does the current asset\n\t\t\t.listenTo(this, 'request:read', (collection, xhr, opts) => {\n\t\t\t\tNetx.currentAsset.trigger('request:read', Netx.currentAsset, xhr, opts);\n\t\t\t})\n\t\t\t// When we sync, so does the current asset\n\t\t\t.listenTo(this, 'sync', (asset, response, opts) => {\n\t\t\t\tif (asset === this) {\n\t\t\t\t\tasset = asset.at(0);\n\t\t\t\t}\n\n\t\t\t\t// `this.goto` will set `expectedId` to make sure we don't go overboard if we can't find its asset.\n\t\t\t\tif (!asset || (this.expectedId !== asset.id && this.expectedId != null))\n\t\t\t\t\treturn;\n\n\t\t\t\tvar currentAsset = Netx.currentAsset;\n\n\t\t\t\t// update the current asset:\n\t\t\t\tcurrentAsset.set(asset.attributes);\n\n\t\t\t\t// record statistics on the DAM\n\t\t\t\tcurrentAsset.recordViewed();\n\t\t\t\tdispatcher.trigger('asset:current:updated');\n\n\t\t\t\t// Remove\n\t\t\t\tdelete this.expectedId;\n\n\t\t\t\t// We got the asset we expected and are updated\n\t\t\t\tthis.trigger('nx:asset:cursor:updated', this);\n\n\t\t\t\t// Do last. Otherwise the loading class does not go away when in this context\n\t\t\t\t// Notify listeners that the asset is in sync with the server version\n\t\t\t\t// TODO: this is a hack - the only thing relying on this is the asset detail\n\t\t\t\t// asset detail will consider itself loaded sooner than it should and we get a flicker of the last asset details\n\t\t\t\t// once we do a proper refactor of the asset detail, we can remove this (hopefully everything to do with the asset cursor in this state)\n\t\t\t\tthis.syncTimeout && clearTimeout(this.syncTimeout);\n\t\t\t\tthis.syncTimeout = setTimeout(() => {\n\t\t\t\t\tcurrentAsset.trigger('sync', currentAsset, response, opts);\n\t\t\t\t}, 100);\n\t\t\t})\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'cart:delete:succeeded',\n\t\t\t\t(currentCart, assetIds) => {\n\t\t\t\t\t// If deleted assets are in the cursor, refetch that.\n\t\t\t\t\tif (this.ids().some((id) => assetIds.includes(id))) {\n\t\t\t\t\t\tthis.fetch({duplicateQueryPolicy: 'abort'});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t);\n\t}\n\n\t/** @override */\n\tsetStartPosition() {\n\t\tif (\n\t\t\tMath.abs(this.curPage - this.selection.startPosition) > 1 &&\n\t\t\tthis.pageSize === 1\n\t\t) {\n\t\t\tthis.curPage = this.selection.startPosition;\n\t\t\treturn;\n\t\t}\n\n\t\tsuper.setStartPosition();\n\t}\n\n\t/** @override */\n\tuseFacetedSearch() {\n\t\t// Use the same facet options\n\t\treturn this.cachedCollection && this.cachedCollection.useFacetedSearch();\n\t}\n\n\t/**\n\t * @method\n\t * @param {Netx.Collections.Assets} collection Asset collection to cache\n\t */\n\tcacheFetch(collection) {\n\t\t// Reset so we do not get false cursor positives\n\t\tthis.reset([]);\n\t\tthis.curPage = 1;\n\n\t\t// We cannot support cursor on constituent collection (at least not currently)\n\t\tif (!collection || collection instanceof SearchConstituentsCollection) {\n\t\t\tthis.cachedCollection = null;\n\t\t\tthis.pager.clearPages();\n\t\t\treturn;\n\t\t}\n\n\t\tconst otherSelection = collection.selection;\n\t\t// Copy selection\n\t\t_.extend(\n\t\t\tthis.selection,\n\t\t\t_.pick(\n\t\t\t\totherSelection,\n\t\t\t\t'sortField',\n\t\t\t\t'sortOrder',\n\t\t\t\t'matchCriteria',\n\t\t\t\t'startPosition',\n\t\t\t),\n\t\t\t{\n\t\t\t\tmaxItems: this.chunkSize,\n\t\t\t\tsearchFacets: otherSelection.searchFacets,\n\t\t\t},\n\t\t);\n\t\tthis.selection.set(otherSelection.models);\n\n\t\t// Store the collection\n\t\tthis.cachedCollection = collection;\n\t\tthis.useFacetedSearch();\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} assetId Asset id\n\t */\n\tgoto(assetId, forceSimple) {\n\t\tassetId = parseInt(assetId);\n\n\t\t// Already have the asset in the right spot for the cursor\n\t\tif (this.length && this.at(0).id == assetId) {\n\t\t\treturn new $.Deferred().resolve(this.models);\n\t\t}\n\n\t\tconst asset = this.cachedCollection && this.cachedCollection.get(assetId);\n\t\tconst idx = asset && this.cachedCollection.indexOf(asset);\n\n\t\tconst opts = {\n\t\t\tduplicateQueryPolicy: 'abort',\n\t\t};\n\n\t\t// Set start position\n\t\t// If we had an index in the cached collection, use that - otherwise, start at the beginning\n\t\tif (!_.isNull(idx) && idx >= 0) {\n\t\t\tthis.curPage = idx + 1;\n\t\t\tthis.selection.startPosition =\n\t\t\t\tthis.cachedCollection.selection.startPosition + idx;\n\t\t} else {\n\t\t\tthis.curPage = 1;\n\t\t\tthis.selection.startPosition = 1;\n\t\t}\n\n\t\tif (!this.cachedCollection || !this.cachedCollection.length) {\n\t\t\tforceSimple = true;\n\t\t}\n\n\t\tthis.expectedId = assetId;\n\t\tthis.setStartPosition();\n\t\treturn (\n\t\t\t(!forceSimple && this.fetch(opts)) ||\n\t\t\tthis.fetchSpecificAssets([assetId], opts)\n\t\t).then((assets) => {\n\t\t\treturn this;\n\t\t});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetCursor';\n\t}\n}\n","import AssetCursorCollection from '../assetCursor';\n\n// A one-element wide Collection of Assets used to page through the contents of a MiniAssets collection\nexport const assetCursor = new AssetCursorCollection([], {pagerRoutes: false});\n\nexport default assetCursor;\n\nimport {setGlobal} from '@netx/core-next/utils/setGlobal';\n// circular dependency:\n// if (process.env.NODE_ENV !== 'production') {\nsetGlobal({assetCursor});\n//}\n","/**\n * AssetIndex -- represents a set of search keys generated by the DAM for an asset\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '@netx/core-app/models/labelValue';\n\nexport default class AssetIndex extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @property {object} methods - Collection RPC methods\n\t * @property {method} methods.read - Fetch asset indices\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/** @method */\n\t\t\tread: ['getIndexRecord', 'assetId'],\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * Set the assetId property before fetching to select an individual asset's keys\n\t\t * @type {number}\n\t\t */\n\t\tthis.assetId = opts.assetId || undefined;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetIndex';\n\t}\n}\n","/**\n * One point of embedded metadata, having schema, name and value.\n * @class\n */\n\n// The big question: Metadata or Metadatum? Here's some links that don't help:\n//\n// http://www.theguardian.com/news/datablog/2010/jul/16/data-plural-singular\n// http://blogs.wsj.com/economics/2012/07/05/is-data-is-or-is-data-aint-a-plural/\n// http://www.motherjones.com/kevin-drum/2012/07/more-data-please\n// https://public.wsu.edu/~brians/errors/data.html\n//\n// In truth, we are going to need different names for the set and the unit, or else there could be\n// complications with the Netx.Views namespace. Therefore:\n\nimport Base from '@netx/core/lib/netx-model';\n\nexport default class AssetMetadatum extends Base {\n\t/**\n\t * @property {object} defaults - The default attribute values\n\t * @property {string} defaults.schema - Schema of metadata, named by a string: 'exif', 'dc', etc.\n\t * @property {number} defaults.name - Name of data\n\t * @property {boolean} defaults.value - Value of data\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\tschema: '',\n\t\t\tname: '',\n\t\t\tvalue: '',\n\t\t};\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetMetadatum';\n\t}\n}\n","/**\n * AssetMetadata -- represents a set of embedded metadata (XMP, etc) fields extracted from an asset by the DAM\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/assetMetadatum';\n\nimport {map as syncMap} from '../properties/assetAttributesMetadata';\n\nexport default class AssetMetadata extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetAssetMetadata: 'Loading embedded metadata',\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetAssetMetadata: 'Loaded embedded metadata',\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} methods - Collection RPC methods\n\t * @property {method} methods.read - Fetch asset metadata\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/** @method */\n\t\t\tread: ['getAssetMetadata', 'assetId'],\n\t\t};\n\t}\n\n\t/**\n\t * @function\n\t * @param {array} results Results\n\t * @param {object} opts Request options\n\t */\n\tparse(results, opts) {\n\t\treturn _.map(results, this.lvbToMetadata);\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * Set the assetId property before fetching to select an individual asset's metadata\n\t\t * @type {number}\n\t\t */\n\t\tthis.assetId = opts.assetId || undefined;\n\t}\n\n\t/**\n\t * Convert a label/value beans from our API fetch call to\n\t * a set of attributes for a Metadata model\n\t * @method\n\t * @param {object} lvb Label value bean\n\t * @return {object} Metadata\n\t */\n\tlvbToMetadata(lvb) {\n\t\tlet name, schema;\n\n\t\tconst split = lvb.label.match(/^(.+):(.+)/);\n\t\tif (!split) {\n\t\t\tschema = ''; // should not happen!\n\t\t\tname = lvb.label;\n\t\t} else {\n\t\t\tschema = split[1];\n\t\t\tname = split[2];\n\t\t}\n\t\treturn {\n\t\t\tschema: syncMap[schema] || schema,\n\t\t\tname: name,\n\t\t\tvalue: lvb.value,\n\t\t};\n\t}\n\n\t/**\n\t * Convert this collection to a structured object, where the top-level\n\t * property names are the schema names.\n\t * @method\n\t * @return {object} Object\n\t */\n\ttoObject() {\n\t\tconst theObj = {};\n\t\tthis.each((model) => {\n\t\t\tconst schema = model.get('schema');\n\t\t\ttheObj[schema] = theObj[schema] || {};\n\t\t\ttheObj[schema][model.get('name')] = model.get('value');\n\t\t});\n\t\treturn theObj;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetMetadata';\n\t}\n}\n","/**\n * Asset permisions collection\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/assetPermission';\n\nexport default class AssetPermissions extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {array} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetAcls: 'Loading permissions',\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetAcls: 'Loaded permissions',\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} methods - Methods for this collection\n\t * @property {method} methods.read - Fetch asset permissions\n\t * @property {method} methods.fetchAll - Fetch all permissions\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\treturn ['getAcls', 2, this.target.id];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tfetchAll(opts) {\n\t\t\t\treturn ['getAcls', 0, 0];\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.comparator = opts.comparator || 'position';\n\t\topts.model = opts.model || Model;\n\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * @memberof module:asset/models/assetPermission\n\t\t * @alias target\n\t\t * @type {module:asset/models/asset|Netx.Models.Category}\n\t\t */\n\t\tthis.target = opts.target || undefined;\n\t}\n\n\t/**\n\t * @method\n\t * @param {array} ids Model ids to delete\n\t */\n\tdeletePermissions(ids) {\n\t\treturn this.deleteMultiple.apply(this, arguments);\n\t}\n\n\t/**\n\t * @method\n\t * @param {module:asset/models/assetPermission} perm Permission\n\t * @param {number} position Position\n\t * @param {object} opts Options\n\t */\n\tsetPosition(perm, position, opts) {\n\t\tconst currentPosition = perm.get('position');\n\t\t// No change\n\t\tif (currentPosition === position) {\n\t\t\treturn new $.Deferred().resolve();\n\t\t}\n\n\t\t// This is ugly, but beats refetching the whole damn thing\n\t\tconst newPositionData = _.compact(\n\t\t\tthis.map((model) => {\n\t\t\t\t// Already being taken care of\n\t\t\t\tif (model === perm) return;\n\n\t\t\t\tlet myPos = model.get('position');\n\n\t\t\t\t// We came after the item being repositioned\n\t\t\t\t// and we are now before the new position\n\t\t\t\tif (myPos > currentPosition && myPos <= position) {\n\t\t\t\t\tmyPos--;\n\t\t\t\t}\n\t\t\t\t// We came before the item being repositioned\n\t\t\t\t// and we are now after the new position\n\t\t\t\telse if (myPos < currentPosition && myPos >= position) {\n\t\t\t\t\tmyPos++;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tentryId: model.id,\n\t\t\t\t\tposition: myPos,\n\t\t\t\t};\n\t\t\t}),\n\t\t);\n\n\t\treturn perm.save({position: position}, opts).then(\n\t\t\t() => {\n\t\t\t\t// Update the `position`s\n\t\t\t\tthis.set(newPositionData, {\n\t\t\t\t\tadd: false,\n\t\t\t\t\tmerge: true,\n\t\t\t\t\tremove: false,\n\t\t\t\t});\n\n\t\t\t\treturn this.fetch();\n\t\t\t},\n\t\t\t() => {\n\t\t\t\t// Re-sort to get the models back to the right position/order\n\t\t\t\tthis.sort();\n\t\t\t},\n\t\t);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetPermissions';\n\t}\n}\n","/**\n * @class\n * @extends Netx.Model\n */\nimport Base from '@netx/core/lib/netx-model';\n\nexport default class AssetUsage extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * The unique ID for this model\n\t * @type {string}\n\t */\n\tget idAttribute() {\n\t\treturn 'date';\n\t}\n\n\t/**\n\t * @property {object} defaults - The default attribute values\n\t * @property {string} defaults.date - Date of usage\n\t * @property {string} defaults.details - Details about usage\n\t * @property {string} defaults.domain - Domain of usage\n\t * @property {string} defaults.item - Some item\n\t * @property {string} defaults.user - Username of accessor\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\tdate: '',\n\t\t\tdetails: '',\n\t\t\tdomain: '',\n\t\t\titem: '',\n\t\t\tuser: '',\n\t\t};\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetUsage';\n\t}\n}\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/assetUsage';\n\nexport default class AssetUsage extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @property {object} methods - Collection RPC methods\n\t * @property {method} methods.read - Fetch asset usage data\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/** @method */\n\t\t\tread: ['getAssetStatData', 'assetId'],\n\t\t};\n\t}\n\t/**\n\t * @property {object} parsers - Parsers for this model\n\t * @property {method} parsers.getAssetStatData \t- Parse response for i18n\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t...super.parsers,\n\t\t\tread: function (dataArr, opts) {\n\t\t\t\t// any item returned with 'i18n.' needs translating\n\t\t\t\treturn dataArr.map((usageOb, idx, all) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof usageOb.item === 'string' &&\n\t\t\t\t\t\tusageOb.item.startsWith('i18n.')\n\t\t\t\t\t) {\n\t\t\t\t\t\tusageOb.item = i18n.t(usageOb.item);\n\t\t\t\t\t}\n\t\t\t\t\treturn usageOb;\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * Set the assetId property before fetching to select an individual asset's keys.\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.assetId = opts.assetId || undefined;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetUsage';\n\t}\n}\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/assetVersion';\n\nexport default class AssetVersions extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @property {object} methods - Model RPC methods\n\t * @property {array} methods.read - Fetch versions\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/** @method */\n\t\t\tread(opts) {\n\t\t\t\treturn ['getVersionObjectsForAsset', this.assetId];\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * The DAM always sorts these by create-date, newest first; so we'll do the same with any client-side additions.\n\t * @method\n\t * @param {object} a Version a\n\t * @param {object} b Version b\n\t * @return {number}\n\t */\n\t// NOTE: we can't just set comparitor to 'creationDate' because it sorts backwards. Is there an easier way than this?\n\tcomparator(a, b) {\n\t\treturn a.get('creationDate') < b.get('creationDate') ? 1 : -1;\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * The id of the asset we are fetching version for\n\t\t * @type {number}\n\t\t * @default\n\t\t */\n\t\tthis.assetId = opts.assetId || 0;\n\t}\n\n\t/**\n\t * Get the asset version that is currently active.\n\t * @method\n\t * @return {module:asset/models/assetVersion}\n\t */\n\tcurrent() {\n\t\treturn this.findWhere({original: 1});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetVersions';\n\t}\n}\n","/**\n * Netx.Collections.AssetViews fetches a set of module:asset/models/assetView objects for a given\n * asset from the DAM.\n * @class\n * @extends Netx.Collection\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/assetView';\n\nexport default class AssetViews extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetViewObjectsForAsset: 'Loading views',\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetViewObjectsForAsset: 'Loaded views',\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} methods - Collection RPC methods\n\t * @property {method} methods.read - Fetch asset views\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\tread: ['getViewObjectsForAsset', 'assetId'],\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\n\t\tsuper(models, opts);\n\n\t\t/** @type {number} */\n\t\tthis.assetId = opts.assetId || undefined;\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(\n\t\t\tdispatcher,\n\t\t\t'upload:asset:view:success',\n\t\t\t(upload, assetView) => {\n\t\t\t\tif (assetView.get('imageId') === this.assetId) {\n\t\t\t\t\tthis.add(assetView, {merge: true});\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetViews';\n\t}\n}\n","/**\n * A collection tailored for the grid viewer\n * This collection does not use models as it creates a lot of overhead for the data to be displayed\n * All data is stored in an array `this.data`\n * In order to maintain a pure copy use `this.getJSON` for setting data on hypergrid\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\n\nimport CoreView from '@netx/core/lib/netx-view';\nimport ProgressModel from '@netx/core-app/models/progress';\n\nimport {isEmptyValue} from '@netx/core/lib/underscore-netx';\n\nconst round = Math.round;\n\nexport default class Grid extends Base {\n\t/**\n\t * When loading data\n\t * @type {i18n}\n\t */\n\tget loadingMessage() {\n\t\treturn i18n.t('i18n.gridEditorLoadingData');\n\t}\n\n\t/**\n\t * @property {object} parsers - Parsers for this collection\n\t * @property {function} parsers.read - Read parser\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} results Results\n\t\t\t * @param {object} opts Request options\n\t\t\t * @return {array} Parsed results\n\t\t\t */\n\t\t\tread(results, opts) {\n\t\t\t\tthis.schema = this.getSchema();\n\t\t\t\treturn _.compact(_.map(results, (result) => this.parseRow(result)));\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * Total cell count\n\t\t * @type {number}\n\t\t */\n\t\tthis.count = 0;\n\n\t\t/**\n\t\t * Total field count (columns)\n\t\t * @type {number}\n\t\t */\n\t\tthis.fieldCount = 0;\n\n\t\t/**\n\t\t * @memberof module:grid/collections/grid\n\t\t * @alias columnProperties\n\t\t * @type {array}\n\t\t */\n\t\tthis.columnProperties = [];\n\n\t\t/**\n\t\t * @memberof module:grid/collections/grid\n\t\t * @alias data\n\t\t * @type {array}\n\t\t */\n\t\tthis.data = [];\n\n\t\t/**\n\t\t * @memberof module:grid/collections/grid\n\t\t * @alias editorTypes\n\t\t * @type {array}\n\t\t */\n\t\tthis.editorTypes = [];\n\n\t\t/**\n\t\t * @memberof module:grid/collections/grid\n\t\t * @alias fields\n\t\t * @type {array}\n\t\t */\n\t\tthis.fields = [];\n\n\t\t/**\n\t\t * @memberof module:grid/collections/grid\n\t\t * @alias headers\n\t\t * @type {array}\n\t\t */\n\t\tthis.headers = [];\n\n\t\t/**\n\t\t * @type {string}\n\t\t */\n\t\tthis.primaryColumn = opts.primaryColumn || 'id';\n\n\t\t/**\n\t\t * @memberof module:grid/collections/grid\n\t\t * @alias requiredFields\n\t\t * @type {array}\n\t\t */\n\t\tthis.requiredFields = [];\n\n\t\t/**\n\t\t * @memberof module:grid/collections/grid\n\t\t * @alias progress\n\t\t * @type {module:app/models/progress}\n\t\t */\n\t\tthis.progress = new ProgressModel(null, {delay: 0});\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(this, 'request:read', () => {\n\t\t\tthis.progress.update(100, this.loadingMessage);\n\t\t}).listenTo(this, 'sync reset', (collection, data, opts = {}) => {\n\t\t\tthis.progress.complete();\n\n\t\t\t// If it was a chunk we are just updating data (not the schema)\n\t\t\topts.chunk || this.filtering ? this.updateData(data) : this.setData(data);\n\n\t\t\tdelete this.filtering;\n\t\t});\n\t}\n\n\t/**\n\t * Get cell value\n\t * If editing the grid, this would be the current value\n\t * @method\n\t * @param {Hypergrid} grid Grid\n\t * @param {number} x Column index\n\t * @param {number} y Row index\n\t * @return {mixed} Value\n\t */\n\tgetCellValue(grid, x, y) {\n\t\treturn grid.behavior.dataModel.getValue(x, y);\n\t}\n\n\t/**\n\t * Get column from index\n\t * @method\n\t * @param {Hypergrid} grid Grid\n\t * @param {number} x Column index\n\t * @return {Hypergrid.Column} Column\n\t */\n\tgetColumn(grid, x) {\n\t\treturn grid.behavior.getColumn(x);\n\t}\n\n\t/**\n\t * Get column index from field name\n\t * @method\n\t * @param {string} field Field name\n\t * @return {number}\n\t */\n\tgetColumnIndex(field) {\n\t\treturn this.fields.indexOf(field);\n\t}\n\n\t/**\n\t * Get the value for a column\n\t * @method\n\t * @param {Hypergrid} grid Grid\n\t * @param {Hypergrid.Column|number} column Column or column index\n\t * @return {mixed|undefined} Value (If `undefined`, the column has multiple values)\n\t */\n\tgetColumnValue(grid, column) {\n\t\tif (!_.isObject(column)) {\n\t\t\tcolumn = this.getColumn(grid, column);\n\t\t}\n\n\t\tif (!column) return;\n\n\t\tconst gridData = this.getGridData(grid);\n\t\tconst field = column.name;\n\t\tconst columnProps = column.properties;\n\n\t\tlet values;\n\t\t// Just add each asset and corresponding attribute value\n\t\tfor (let i = 0, c = gridData.length, value; i < c; i++) {\n\t\t\tvalue = this.parseOutValue(gridData[i][field], column.name);\n\n\t\t\tif (!Array.isArray(value)) {\n\t\t\t\tvalue = [value];\n\t\t\t}\n\n\t\t\t// Store the first value\n\t\t\tif (values === void 0) {\n\t\t\t\tvalues = value;\n\t\t\t}\n\n\t\t\tif (value.join() !== values.join()) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\treturn values;\n\t}\n\n\t/**\n\t * Get a single row of data by primary\n\t * @method\n\t * @param {number|string} primary Primary\n\t * @return {object} Data\n\t */\n\tgetData(primary) {\n\t\tconst data = _.findWhere(this.data, {\n\t\t\t[this.primaryColumn]: primary,\n\t\t});\n\t\treturn data && _.clone(data);\n\t}\n\n\t/**\n\t * Get hypergrid's version of the data\n\t * @method\n\t * @param {Hypergrid} grid Grid\n\t * @return {array} Grid data\n\t */\n\tgetGridData(grid) {\n\t\treturn grid.behavior.dataModel.dataSource.data;\n\t}\n\n\t/**\n\t * Used to get data for hypergrid\n\t * @method\n\t * @return {array} JSON data\n\t */\n\tgetJSON() {\n\t\treturn _.map(this.data, (d) => _.clone(d));\n\t}\n\n\t/**\n\t * Get the primary value for row\n\t * @method\n\t * @param {Hypergrid} grid Grid\n\t * @param {number} y Row\n\t * @return {mixed} Primary\n\t */\n\tgetPrimary(grid, y) {\n\t\treturn grid.behavior.dataModel.getValueByField(y, this.primaryColumn);\n\t}\n\n\t/**\n\t * Get row data from primary value\n\t * @method\n\t * @param {Hypergrid} grid Grid\n\t * @param {number|string} primary Primary\n\t * @return {object} Row data\n\t */\n\tgetRowData(grid, primary) {\n\t\tconst data = this.getGridData(grid);\n\t\tconst field = this.primaryColumn;\n\n\t\tfor (let i = 0, c = data.length, d; i < c; i++) {\n\t\t\tif ((d = data[i])[field] === primary) {\n\t\t\t\treturn d;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Get row index from primary value\n\t * @method\n\t * @param {Hypergrid} grid Grid\n\t * @param {number|string} primary Primary\n\t * @return {number} Row index\n\t */\n\tgetRowIndex(grid, primary) {\n\t\treturn grid.behavior.dataModel.getRowIndex(this.primaryColumn, primary);\n\t}\n\n\t/**\n\t * Override this method to provide a schema\n\t * @method\n\t * @return {array}\n\t */\n\tgetSchema() {\n\t\treturn [];\n\t}\n\n\t/**\n\t * @method\n\t * @return {object} sort params\n\t */\n\tgetSortParams() {\n\t\treturn this.sortParams || this.defaultSortParams || {};\n\t}\n\n\t/**\n\t * Get a field (column) value from primary value\n\t * If editing the grid, this would be the original value\n\t * @method\n\t * @param {string} field Field name\n\t * @param {number|string} primary Primary value\n\t * @return {mixed} Value\n\t */\n\tgetValue(field, primary) {\n\t\tconst data = this.getData(primary);\n\t\treturn data && data[field];\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} field Sort field name\n\t * @param {string} order Sort order\n\t * @return {boolean} New sort\n\t */\n\tisNewSort(field, order) {\n\t\tconst sortParams = this.getSortParams();\n\t\treturn sortParams.field !== field || sortParams.order !== order;\n\t}\n\n\t/**\n\t * Parse single column\n\t * @method\n\t * @param {object} field Schema field\n\t */\n\tparseColumn(field) {\n\t\tconst idx = this.fields.length;\n\n\t\t// Add to fields\n\t\tthis.fields.push(field.name);\n\t\t// Add to headers - we do not want to internationalize attribute names\n\t\tthis.headers.push(field.header);\n\n\t\tfield.required && this.requiredFields.push(field.name);\n\n\t\t// Get things we care about\n\t\tthis.columnProperties[idx] = _.extend(_.omit(field, 'name', 'header'), {\n\t\t\teditable: !field.readOnly,\n\t\t\treadOnly: this.readOnly || field.readOnly,\n\t\t});\n\n\t\t// I feel like this should happen in the view - because editor type, but it is also\n\t\t// very related to schema data and I think the view should not need to know anything\n\t\t// about the schema\n\t\tlet editorType = null;\n\t\tif (!field.readOnly) {\n\t\t\teditorType = field.type || 'textfield';\n\t\t\tswitch (editorType) {\n\t\t\t\tcase 'int':\n\t\t\t\tcase 'float':\n\t\t\t\t\teditorType = 'number';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n\t\t\t\t\teditorType = 'datepicker';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'text':\n\t\t\t\t\teditorType = 'textfield';\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.editorTypes.push(editorType);\n\t}\n\n\t/**\n\t * Parse our columns from the collection schema\n\t * @override\n\t */\n\tparseColumns() {\n\t\t// Reset\n\t\tthis.columnProperties = [];\n\t\tthis.editorTypes = [];\n\t\tthis.fields = [];\n\t\tthis.headers = [];\n\t\tthis.requiredFields = [];\n\n\t\tconst schema = this.schema;\n\t\tfor (let i = 0, c = schema.length; i < c; i++) {\n\t\t\tthis.parseColumn(schema[i]);\n\t\t}\n\t}\n\n\t/**\n\t * Get the value parsed for entering grid editor\n\t * @method\n\t * @param {mixed} value Value\n\t * @param {string} field Field name\n\t * @return {mixed} Parsed in value\n\t */\n\tparseInValue(value, field) {\n\t\tconst schema = _.findWhere(this.schema, {name: field}) || {};\n\n\t\tif (isEmptyValue(value)) {\n\t\t\tvalue = schema.multivalue ? [] : '';\n\t\t}\n\n\t\tif (schema && schema.parseInValue) {\n\t\t\tvalue = schema.parseInValue(value);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\t/**\n\t * Parse a single row of data from the collection\n\t * @method\n\t * @param {object} data Row data\n\t * @return {object} Parsed row data\n\t */\n\tparseRow(data) {\n\t\t_.each(data, (value, field, all) => {\n\t\t\tall[field] = this.parseInValue(value, field);\n\t\t});\n\t\treturn data;\n\t}\n\n\t/**\n\t * @override\n\t * @param {array} models Models\n\t */\n\treset(models) {\n\t\tthis.data = models || [];\n\t\tthis.length = this.data.length;\n\t}\n\n\t/**\n\t * We do not use models, just maintain an array of raw data\n\t * @override\n\t * @param {array} models Models\n\t */\n\tset(models, opts = {}) {\n\t\t// If it was a chunk just concat (do not wipe out)\n\t\tthis.data = opts.chunk ? this.data.concat(models) : models;\n\n\t\tthis.length = this.data.length;\n\t}\n\n\t/**\n\t * Set data (resets schema)\n\t * @method\n\t * @param {array} data Data\n\t */\n\tsetData(data) {\n\t\tthis.schema = this.getSchema();\n\n\t\tthis.parseColumns();\n\n\t\tthis.primaryIdx = this.getColumnIndex(this.primaryColumn);\n\t\tthis.fieldCount = this.fields.length;\n\t\tthis.count = this.fieldCount * this.length;\n\n\t\tthis.trigger('grid:set:data', this, this.getJSON());\n\t}\n\n\t/**\n\t * Update data (does not reset schema)\n\t * Should be used when chunking was involved\n\t * @method\n\t * @param {array} newData New data\n\t */\n\tupdateData(newData) {\n\t\tthis.count = this.fieldCount * this.length;\n\n\t\tthis.trigger('grid:update:data', this, this.getJSON());\n\t}\n\n\t// For possibly large jobs that can not currently be handled via webworkers\n\tbreakItUp() {\n\t\treturn CoreView.prototype.breakItUp.apply(this, arguments);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Grid';\n\t}\n}\n","/**\n * Attribute history data tailored for use in a grid view\n * https://kb.netx.net/pages/viewpage.action?spaceKey=DEV&title=Attribute+History\n * @class\n */\nimport Base from '@netx/core-grid/collections/grid';\n\nimport PagerModel from '@netx/core-app/models/pager';\n\nimport moment from '@netx/core/lib/netx-moment';\nimport {attributes} from '@netx/core-attribute/singletons';\nimport {AttributeType} from '@netx/core-attribute/constants';\n\nexport default class AssetAttributeHistory extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget defaultSortParams() {\n\t\treturn {\n\t\t\tfield: 'creation_date',\n\t\t\torder: 'desc',\n\t\t};\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetAssetAttributeHistory: 'Loading attribute history',\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetAssetAttributeHistory: 'Loaded attribute history',\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} methods - Collection methods\n\t * @property {method} methods.read - Fetch data\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * Get attribute history\n\t\t\t * @method\n\t\t\t * @param {object} opts Options\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\tif (!opts || !opts.chunk) {\n\t\t\t\t\tthis.pager.firstPage({silent: true});\n\t\t\t\t}\n\t\t\t\treturn [\n\t\t\t\t\t'getAssetAttributeHistory',\n\t\t\t\t\tthis.assetId,\n\t\t\t\t\tthis.sortParams || this.defaultSortParams,\n\t\t\t\t\tthis.searchString,\n\t\t\t\t\tthis.pager.getPageDTO(),\n\t\t\t\t];\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - Collection parsers\n\t * @property {method} parsers.read - Parse fetched data\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} response Data\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(response, opts) {\n\t\t\t\t// Setup schema\n\t\t\t\tthis.schema = this.getSchema();\n\n\t\t\t\t// Get tracked attributes\n\t\t\t\tconst trackedAttributes = attributes.filterByHistory();\n\t\t\t\tlet attrModel, obj;\n\n\t\t\t\treturn _.map(response, (data) => {\n\t\t\t\t\t// The order of the fields does not matter - see `this.getSchema`\n\t\t\t\t\tobj = {\n\t\t\t\t\t\tassetId: data.assetId,\n\t\t\t\t\t\tcreation_date: moment(data.createDate).format(\n\t\t\t\t\t\t\t'dddd, MMMM Do YYYY @ h:mm:ss a',\n\t\t\t\t\t\t),\n\t\t\t\t\t\tcreation_user_label: data.createUserName,\n\t\t\t\t\t};\n\t\t\t\t\t// Loop over attributes and flatten\n\t\t\t\t\t_.each(data.attributes, (attr) => {\n\t\t\t\t\t\tif ((attrModel = trackedAttributes.get(attr.templateId))) {\n\t\t\t\t\t\t\tlet value = attrModel.get('multivalue')\n\t\t\t\t\t\t\t\t? attr.values\n\t\t\t\t\t\t\t\t: attr.values[0];\n\t\t\t\t\t\t\tif (value == null) {\n\t\t\t\t\t\t\t\tvalue = '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tobj[attrModel.get('name')] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treturn this.parseRow(obj);\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * @type {string}\n\t\t */\n\t\tthis.primaryColumn = opts.primaryColumn || 'assetId';\n\n\t\t/**\n\t\t * Paging model\n\t\t * @memberof module:asset/collections/assetAttributeHistory\n\t\t * @alias pager\n\t\t * @type {module:app/models/pager}\n\t\t */\n\t\tthis.pager = new PagerModel(\n\t\t\t{pageSize: opts.pageSize || 20},\n\t\t\t{collection: this},\n\t\t);\n\n\t\t/**\n\t\t * @memberof module:asset/collections/assetAttributeHistory\n\t\t * @alias searchString\n\t\t * @type {string}\n\t\t */\n\t\tthis.searchString = opts.searchString || '';\n\n\t\t/**\n\t\t * @memberof module:asset/collections/assetAttributeHistory\n\t\t * @alias sortParams\n\t\t * @type {object}\n\t\t */\n\t\tthis.sortParams = opts.sortParams || null;\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Options\n\t */\n\taddChunk(opts) {\n\t\tthis.pager.nextPage(_.extend({chunk: true, remove: false}, opts));\n\t}\n\n\t/** @method */\n\tclearSearch() {\n\t\tif (this.searchString !== '') {\n\t\t\tthis.searchString = '';\n\t\t\tthis.filtering = true;\n\t\t\treturn this.fetch({duplicateQueryPolicy: 'abort'});\n\t\t}\n\t\treturn new $.Deferred().resolveWith(this, [this, this.models]);\n\t}\n\n\t/**\n\t * This is the schema that grid view will request\n\t * @method\n\t * @return {array}\n\t */\n\tgetSchema() {\n\t\treturn [\n\t\t\t{\n\t\t\t\tname: 'creation_date',\n\t\t\t\theader: i18n.t('i18n.date'),\n\t\t\t\ttype: 'date',\n\t\t\t\treadOnly: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'creation_user_label',\n\t\t\t\theader: i18n.t('i18n.user'),\n\t\t\t\ttype: 'string',\n\t\t\t\treadOnly: true,\n\t\t\t},\n\t\t].concat(\n\t\t\t_.compact(\n\t\t\t\tattributes.filterByHistory().map((attrModel) => {\n\t\t\t\t\tif (attrModel.get('system')) return;\n\n\t\t\t\t\tconst spec2 = attrModel.get('spec2');\n\t\t\t\t\tlet type = attrModel.getTypeName();\n\n\t\t\t\t\tswitch (attrModel.get('type')) {\n\t\t\t\t\t\tcase AttributeType.NUMBER:\n\t\t\t\t\t\t\ttype = spec2 && spec2 !== 4 ? 'float' : 'int';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: attrModel.get('name'),\n\t\t\t\t\t\theader: attrModel.getLabel(),\n\t\t\t\t\t\tmultivalue: attrModel.get('multivalue'),\n\t\t\t\t\t\treadOnly: true,\n\t\t\t\t\t\tsortable: false,\n\t\t\t\t\t\ttype: type,\n\n\t\t\t\t\t\t// For display\n\t\t\t\t\t\tformatValue(value, opts = {}) {\n\t\t\t\t\t\t\t// No clickable URL support in grid at the moment\n\t\t\t\t\t\t\topts.parseURL = false;\n\t\t\t\t\t\t\topts.html = false;\n\t\t\t\t\t\t\treturn attrModel.format(value, opts);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tparseInValue: _.bind(attrModel.parseInValue, attrModel),\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} str Search string\n\t */\n\tsearch(str) {\n\t\tif (str != null && str !== '' && this.searchString !== str) {\n\t\t\tthis.searchString = str;\n\t\t\tthis.filtering = true;\n\t\t\treturn this.fetch({duplicateQueryPolicy: 'abort'});\n\t\t}\n\t\treturn new $.Deferred().resolveWith(this, [this, this.models]);\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} field Field to sort on\n\t * @param {string} order Sort order\n\t */\n\tsetSort(field, order) {\n\t\tif (this.isNewSort(field, order)) {\n\t\t\tthis.sortParams = {\n\t\t\t\tfield: field,\n\t\t\t\torder: order,\n\t\t\t};\n\t\t\tthis.filtering = true;\n\t\t\treturn this.fetch({duplicateQueryPolicy: 'abort'});\n\t\t}\n\t\treturn new $.Deferred().resolveWith(this, [this, this.models]);\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} field Field to sort on\n\t * @param {string} order Sort order\n\t */\n\tunsetSort() {\n\t\tif (this.sortParams) {\n\t\t\tthis.sortParams = null;\n\t\t\tthis.filtering = true;\n\t\t\treturn this.fetch({duplicateQueryPolicy: 'abort'});\n\t\t}\n\t\treturn new $.Deferred().resolveWith(this, [this, this.models]);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'AssetAttributeHistory';\n\t}\n}\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-model';\nimport {userProfile} from '@netx/core-user/collections/singletons/userProfile';\n\nexport default class Comment extends Base {\n\t/**\n\t * @property {object} defaults - Model defaults\n\t * @property {number} defaults.id - Comment id\n\t * @property {number} defaults.annotationId - Annotation id\n\t * @property {string} defaults.authorEmail - Author email\n\t * @property {number} defaults.authorId - Author id\n\t * @property {string} defaults.authorLabel - Author label\n\t * @property {string} defaults.creationDate - Creation date\n\t * @property {string} defaults.comment - Comment text\n\t * @property {boolean} defaults.isEdited - Comment edited\n\t * @property {string} defaults.lastModDate - Modification date\n\t * @property {number} defaults.rootCommentId - Root comment id (N/A until we start supporting comment threads)\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\t// id: 0,\n\t\t\tannotationId: 0,\n\t\t\tauthorEmail: '',\n\t\t\tauthorId: userProfile.id,\n\t\t\tauthorLabel: '',\n\t\t\tcomment: '',\n\t\t\tcreationDate: '',\n\t\t\tisEdited: false,\n\t\t\tlastModDate: '',\n\t\t\trootCommentId: 0,\n\t\t};\n\t}\n\n\t/**\n\t * @override\n\t * @param {string} perm Permission\n\t * @return {boolean} Allowed\n\t */\n\tallows(perm) {\n\t\tperm = perm || 'read';\n\n\t\tif (perm === 'read') return true;\n\t\t// look to see if the user has edit\n\t\t// rights for the project itself\n\t\tconst allowed = this.collection.canEdit();\n\t\treturn allowed && this.get('authorId') === userProfile.id;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Comment';\n\t}\n}\n","/**\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/comment';\n\nimport PagerModel from '@netx/core-app/models/pager';\n\nexport default class Comments extends Base {\n\t/**\n\t * @override\n\t * @param {array} models An array of models or model attributes\n\t * @param {opts} Collection options\n\t */\n\tconstructor(models, opts = {}) {\n\t\topts.comparator = opts.comparator || 'creationDate';\n\t\topts.model = opts.model || Model;\n\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * Paging model\n\t\t * @memberof module:comment/collections/comments\n\t\t * @alias pager\n\t\t * @type {module:app/models/pager}\n\t\t */\n\t\tthis.pager = new PagerModel(\n\t\t\t{},\n\t\t\t{\n\t\t\t\tcollection: this,\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} comment Comment\n\t * @param {object} opts Options\n\t */\n\taddComment(comment, opts) {\n\t\tconst model = new this.model({\n\t\t\tcomment: comment,\n\t\t});\n\t\treturn model.save().then(() => {\n\t\t\tthis.add(model, opts);\n\t\t\treturn model;\n\t\t});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Comments';\n\t}\n}\n","/**\n * A single comment for a project review annotation\n * @class\n */\nimport Base from '@netx/core-comment/models/comment';\n\nexport default class ProjectReviewAnnotationComment extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @property {object} defaults - Model defaults\n\t * @property {number} defaults.annotationId - Annotation id\n\t *\n\t * @property {string} defaults.projectStatus - Project status (open/closed)\n\t */\n\tget defaults() {\n\t\treturn _.extend(super.defaults || {}, {\n\t\t\tannotationId: 0,\n\t\t\t// Client attributes\n\t\t\tprojectStatus: 'open',\n\t\t});\n\t}\n\n\t/** @type {array} */\n\tget clientAttrs() {\n\t\treturn ['projectStatus'];\n\t}\n\n\t/**\n\t * @property {object} methods - Model methods\n\t * @property {method} create - Create new comment\n\t * @property {method} update - Update existing comment\n\t * @property {method} remove - Delete (destroy) comment\n\t */\n\tget methods() {\n\t\treturn _.extend(super.methods || {}, {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tcreate: function (opts) {\n\t\t\t\treturn [\n\t\t\t\t\t'addCommentToAnnotation',\n\t\t\t\t\tthis.get('annotationId'),\n\t\t\t\t\tthis.self(),\n\t\t\t\t];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tupdate: function (opts) {\n\t\t\t\treturn ['updateCommentForAnnotation', this.self()];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tremove: function (opts) {\n\t\t\t\treturn ['deleteCommentFromAnnotation', this.id];\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @override\n\t * @param {string} perm Permission\n\t * @return {boolean} Allowed\n\t */\n\tallows(perm) {\n\t\tvar allowed = super.allows(perm);\n\n\t\treturn allowed && perm !== 'read'\n\t\t\t? this.get('projectStatus') === 'open'\n\t\t\t: allowed;\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} status Status\n\t * @param {object} opts Options\n\t */\n\tsetProjectStatus(status, opts) {\n\t\treturn this.set('projectStatus', status, opts);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'ProjectReviewAnnotationComment';\n\t}\n}\n","/**\n * Collection of project review annotation `comments`\n * @class\n */\nimport Base from '@netx/core-comment/collections/comments';\nimport Model from '../models/projectReviewAnnotationComment';\n\nexport default class ProjectReviewAnnotationComments extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {atring} */\n\tget roomName() {\n\t\treturn 'ANNOTATION_COMMENTS_' + this.annotationId;\n\t}\n\n\t/**\n\t * @property {object} methods - Collection methods\n\t * @property {method} methods.read - Fetch comments\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\treturn [\n\t\t\t\t\t'getCommentsForAnnotation',\n\t\t\t\t\tthis.annotationId,\n\t\t\t\t\tthis.pager.getPageDTO(),\n\t\t\t\t];\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - Collection parsers\n\t * @property {method} parsers.read - Parse fetched comments\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} comments Comments\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(comments, opts) {\n\t\t\t\tvar projectStatus = this.projectStatus;\n\t\t\t\treturn _.map(comments, (comment) =>\n\t\t\t\t\t_.extend(comment, {projectStatus: projectStatus}),\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\t\tsuper(models, opts);\n\n\t\tthis.canEditProject = opts.canEditProject === true;\n\n\t\t/**\n\t\t * @memberof module:project/models/projectReviewAnnotationComments\n\t\t * @alias annotationId\n\t\t * @type {number}\n\t\t */\n\t\tthis.annotationId = opts.annotationId;\n\n\t\t/**\n\t\t * @memberof module:project/models/projectReviewAnnotationComments\n\t\t * @alias projectStatus\n\t\t * @type {string}\n\t\t */\n\t\tthis.projectStatus = opts.projectStatus || 'open';\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(this, 'sync', this.subscribe);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} comment Comment object\n\t * @param {object} opts Request options\n\t */\n\taddComment(comment, opts) {\n\t\tconst model = new this.model(\n\t\t\t_.extend(\n\t\t\t\t_.pick.apply(_, [comment].concat(_.keys(this.model.GetDefaults()))),\n\t\t\t\t{\n\t\t\t\t\tannotationId: this.annotationId,\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\n\t\treturn model.save().then(() => {\n\t\t\tthis.add(model, opts);\n\t\t\treturn model;\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} id Comment id\n\t * @param {object} opts Request options\n\t */\n\tremoveComment(id, opts) {\n\t\tconst model = this.get(id);\n\n\t\tif (!model) {\n\t\t\treturn new $.Deferred().reject(\n\t\t\t\tnew Error('Annotation comment model with id `' + id + '` not found'),\n\t\t\t);\n\t\t}\n\n\t\treturn model.destroy(_.extend({wait: true}, opts));\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} status Status\n\t * @param {object} opts Options\n\t * @fires updateStatus\n\t */\n\tsetProjectStatus(status, opts = {}) {\n\t\tthis.projectStatus = status;\n\n\t\tthis.invoke('setProjectStatus', status, opts);\n\t\t!opts.silent && this.trigger('updateStatus', this, status);\n\n\t\treturn this;\n\t}\n\n\t/**\n\t * @override\n\t * @param {object} data Message data\n\t */\n\tsubscriptionMessage(data) {\n\t\tif (data.action === 'add') {\n\t\t\t_.delay(() => {\n\t\t\t\tconst model = this.get(data.id);\n\t\t\t\t!model && this.add(data.dto);\n\t\t\t}, 200);\n\t\t\treturn;\n\t\t}\n\n\t\tconst model = this.get(data.id);\n\t\tswitch (data.action) {\n\t\t\t// case 'add':\n\t\t\t// \t!model && this.add( data.dto );\n\t\t\t// \tbreak;\n\t\t\tcase 'edit':\n\t\t\t\tmodel ? model.set(data.dto) : this.add(data.dto);\n\t\t\t\tbreak;\n\t\t\tcase 'delete':\n\t\t\t\tmodel && this.remove(model);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * @return {boolean}\n\t */\n\tcanEdit() {\n\t\treturn this.canEditProject === true;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'ProjectReviewAnnotationComments';\n\t}\n}\n","/**\n * A single project review annotation that contains a collection of project review annotation `comments`\n * @class\n */\nimport Base from '@netx/core/lib/netx-model';\nimport {userProfile} from '@netx/core-user/collections/singletons/userProfile';\n\nimport AssetAnnotationsCommentsCollection from '../collections/projectReviewAnnotationComments';\nimport AssetAnnotationCommentModel from '../models/projectReviewAnnotationComment';\n\nexport default class ProjectReviewAnnotation extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @property {object} defaults - Model defaults\n\t * @property {number} defaults.id - Annotation id\n\t * @property {number} defaults.commentCount - Comment count\n\t * @property {string} defaults.creationDate - Creation date\n\t * @property {string} defaults.creatorEmail - Creator email\n\t * @property {number} defaults.creatorId - Creator id\n\t * @property {string} defaults.creatorLabel - Creator label\n\t * @property {string} defualts.fillStyle - Shape fill style\n\t * @property {object} defaults.firstComment - First comment\n\t * @property {number} defaults.height - Height\n\t * @property {string} defaults.lastModDate - Modification date\n\t * @property {number} defaults.lineWidth - Shape line width\n\t * @property {number} defaults.originX - X coord\n\t * @property {number} defaults.originY - Y coord\n\t * @property {number} defaults.reviewId - Review id\n\t * @property {string} defaults.strokeStyle - Shape stroke style\n\t * @property {string} defaults.type - Shape type\n\t * @property {number} defaults.width - Width\n\t *\n\t * @property {boolean} defaults.active - Active\n\t * @property {string} defaults.projectStatus - Project status\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\t// id : 0,\n\t\t\tcommentCount: 0,\n\t\t\tcreationDate: '',\n\t\t\tcreatorEmail: '',\n\t\t\tcreatorId: userProfile.id,\n\t\t\tcreatorLabel: '',\n\t\t\tfillStyle: 'rgba(255, 255, 255, 0.05)',\n\t\t\tfirstComment: {},\n\t\t\theight: 0,\n\t\t\tlineWidth: 1,\n\t\t\tlastModDate: '',\n\t\t\toriginX: 0,\n\t\t\toriginY: 0,\n\t\t\treviewId: 0,\n\t\t\tstrokeStyle: 'rgba(0, 0, 0, 1)',\n\t\t\ttype: 'rectangle',\n\t\t\twidth: 0,\n\n\t\t\t// Client side\n\t\t\tactive: false,\n\t\t\tprojectStatus: 'open',\n\t\t};\n\t}\n\n\t/** @type {array} */\n\tget clientAttrs() {\n\t\treturn ['active', 'projectStatus'];\n\t}\n\n\t/**\n\t * @property {object} methods - Model methods\n\t * @property {method} methods.create - Create new annotation\n\t * @property {method} methods.update - Update exisiting annotation\n\t * @property {method} methods.remove - Delete (destroy) annotation\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tcreate: function (opts) {\n\t\t\t\treturn ['addAnnotationToReview', this.get('reviewId'), this.self()];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tupdate: function (opts) {\n\t\t\t\treturn ['updateAnnotationForReview', this.self()];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tremove: function (opts) {\n\t\t\t\treturn ['deleteAnnotationFromReview', this.id];\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @override\n\t * @param {object} attrs Model attributes\n\t * @param {opts} Model options\n\t */\n\tconstructor(attrs, opts = {}) {\n\t\tsuper(attrs, opts);\n\n\t\t/**\n\t\t * @memberof module:project/models/projectReviewAnnotation\n\t\t * @alias comments\n\t\t * @type {module:project/collections/projectReviewAnnotationComments}\n\t\t */\n\t\tthis.comments = new AssetAnnotationsCommentsCollection([], {\n\t\t\tannotationId: this.id,\n\t\t\tprojectStatus: this.get('projectStatus'),\n\t\t\tcanEditProject: this.allows('edit'),\n\t\t});\n\t\tthis.addSubCollection(this.comments);\n\n\t\t/**\n\t\t * @memberof module:project/models/projectReviewAnnotation\n\t\t * @alias firstComment\n\t\t * @type {module:project/models/projectReviewAnnotationComment}\n\t\t */\n\t\tthis.firstComment = new AssetAnnotationCommentModel(\n\t\t\tthis.get('firstComment'),\n\t\t);\n\t\tthis.addSubModel(this.firstComment);\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(this, 'change:id', function (model, id, opts) {\n\t\t\tthis.comments.annotationId = this.id;\n\t\t});\n\t\tthis.listenTo(\n\t\t\tthis,\n\t\t\t'change:firstComment',\n\t\t\tfunction (model, firstComment, opts) {\n\t\t\t\tthis.firstComment.set(firstComment, opts);\n\t\t\t},\n\t\t);\n\t\tthis.listenTo(this, 'change:projectStatus', function (model, status, opts) {\n\t\t\tthis.comments.setProjectStatus(status, opts);\n\t\t});\n\t\tthis.listenTo(\n\t\t\tthis.comments,\n\t\t\t'add remove reset sync',\n\t\t\t_.debounce(function () {\n\t\t\t\tvar commentCount = this.comments.length;\n\t\t\t\tcommentCount\n\t\t\t\t\t? this.firstComment.set(this.comments.at(0).attributes)\n\t\t\t\t\t: this.firstComment.unset();\n\n\t\t\t\tthis.set('commentCount', commentCount);\n\t\t\t}, 25),\n\t\t);\n\t}\n\n\t/**\n\t * @override\n\t * @param {string} perm Permission\n\t * @return {boolean} Allowed\n\t */\n\tallows(perm) {\n\t\treturn (perm || 'read') !== 'read'\n\t\t\t? // is the project open?\n\t\t\t // did the user create it?\n\t\t\t // does user have edit rights on project?\n\t\t\t this.collection &&\n\t\t\t\t\tthis.collection.canEdit() &&\n\t\t\t\t\tthis.get('projectStatus') === 'open' &&\n\t\t\t\t\tthis.get('creatorId') === userProfile.id\n\t\t\t: true;\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tgetComments(opts) {\n\t\tthis.comments.canEditProject = opts.canEditProject || false;\n\t\treturn this.comments.fetch(opts);\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} scale Scale\n\t * @return {object} Shape data\n\t */\n\tgetShapeData(scale) {\n\t\tscale = Number(scale) || 1;\n\n\t\tvar round = Math.round;\n\t\treturn _.extend(\n\t\t\t_.pick(\n\t\t\t\tthis.attributes,\n\t\t\t\t'id',\n\t\t\t\t'lineWidth',\n\t\t\t\t'fillStyle',\n\t\t\t\t'strokeStyle',\n\t\t\t\t'type',\n\t\t\t),\n\t\t\t{\n\t\t\t\twidth: round(this.get('width') * scale),\n\t\t\t\theight: round(this.get('height') * scale),\n\t\t\t\tx: round(this.get('originX') * scale),\n\t\t\t\ty: round(this.get('originY') * scale),\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} status Status\n\t * @param {object} opts Options\n\t */\n\tsetProjectStatus(status, opts) {\n\t\treturn this.set('projectStatus', status, opts);\n\t}\n\n\t/**\n\t * We do not subscribe to any websocket channels\n\t * but our sub collection does\n\t * @override\n\t */\n\tunsubscribe() {\n\t\tthis.comments.unsubscribe();\n\t\treturn this;\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} x X\n\t * @param {number} y Y\n\t * @param {object} opts Options\n\t */\n\tupdatePosition(x, y, opts) {\n\t\treturn this.save(\n\t\t\t{\n\t\t\t\toriginX: x,\n\t\t\t\toriginY: y,\n\t\t\t},\n\t\t\topts,\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} width Width\n\t * @param {number} height Height\n\t * @param {object} opts Options\n\t */\n\tupdateSize(width, height, opts) {\n\t\treturn this.save(\n\t\t\t{\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t},\n\t\t\topts,\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} width Width\n\t * @param {number} height Height\n\t * @param {number} x X\n\t * @param {number} y Y\n\t * @param {object} opts Options\n\t */\n\tupdateSizeAndPosition(width, height, x, y, opts) {\n\t\treturn this.save(\n\t\t\t{\n\t\t\t\twidth: width,\n\t\t\t\theight: height,\n\t\t\t\toriginX: x,\n\t\t\t\toriginY: y,\n\t\t\t},\n\t\t\topts,\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} style Style object\n\t * @param {object} opts Options\n\t */\n\tupdateStyle(style, opts) {\n\t\treturn this.save(style, opts);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'ProjectReviewAnnotation';\n\t}\n}\n","/**\n * Collection of project review `annotations`\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/projectReviewAnnotation';\n\nimport PagerModel from '@netx/core-app/models/pager';\n\nexport default class ProjectReviewAnnotations extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {string} */\n\tget roomName() {\n\t\treturn 'ANNOTATIONS_' + this.reviewId;\n\t}\n\n\t/**\n\t * @property {object} methods - Collection methods\n\t * @property {object} methods.read - Fetch annotations\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\treturn [\n\t\t\t\t\t'getAnnotationsForReview',\n\t\t\t\t\tthis.reviewId,\n\t\t\t\t\tthis.pager.getPageDTO(),\n\t\t\t\t];\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - Collection parsers\n\t * @property {method} parsers.read - Parse fetched annotations\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} annotations Annotations\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(annotations, opts) {\n\t\t\t\t// Pass along the project `status`\n\t\t\t\tconst projectStatus = this.projectStatus;\n\t\t\t\treturn _.map(annotations, (annotation) =>\n\t\t\t\t\t_.extend(annotation, {projectStatus: projectStatus}),\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\n\t\tif (!opts.reviewId) {\n\t\t\tthrow new Error('`reviewId` required');\n\t\t}\n\n\t\tsuper(models, opts);\n\n\t\tthis.canEditProject = opts.canEditProject === true;\n\n\t\t/**\n\t\t * @memberof module:project/collections/projectReviewAnnotations\n\t\t * @alias reviewId\n\t\t * @type {number}\n\t\t */\n\t\tthis.reviewId = opts.reviewId;\n\n\t\t/**\n\t\t * Paging model\n\t\t * @memberof module:project/collections/projectReviewAnnotations\n\t\t * @alias pager\n\t\t * @type {module:app/models/pager}\n\t\t */\n\t\t// We cannot page these really - not for what they are used for\n\t\tthis.pager = new PagerModel({pageSize: 0x7fffff}, {collection: this});\n\t\tthis.addSubModel(this.pager);\n\n\t\t/**\n\t\t * @memberof module:project/collections/projectReviewAnnotations\n\t\t * @alias projectStatus\n\t\t * @type {string}\n\t\t */\n\t\tthis.projectStatus = opts.projectStatus || 'open';\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(this, 'change:active', (model, active) => {\n\t\t\tif (!active) return;\n\n\t\t\tthis.each((m) => {\n\t\t\t\tm !== model && m.get('active') && m.set('active', false);\n\t\t\t});\n\t\t}).listenTo(this, 'sync', (annotations, data, opts) => {\n\t\t\tif (annotations !== this) return;\n\t\t\tthis.subscribe();\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} annotation Annotation object\n\t * @param {object} opts Request options\n\t * @return {module:project/models/projectReviewAnnotation} Annotation model\n\t */\n\taddAnnotation(annotation, opts) {\n\t\tconst model = new this.model(\n\t\t\t_.extend(\n\t\t\t\t_.pick.apply(_, [annotation].concat(_.keys(this.model.GetDefaults()))),\n\t\t\t\t{\n\t\t\t\t\toriginX: annotation.x,\n\t\t\t\t\toriginY: annotation.y,\n\t\t\t\t\treviewId: this.reviewId,\n\t\t\t\t},\n\t\t\t),\n\t\t);\n\n\t\treturn model.save(opts).then(() => {\n\t\t\tthis.add(model);\n\t\t\treturn model;\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} id Annotation id\n\t * @param {object} opts Request options\n\t * @return {module:project/models/projectReviewAnnotation}\n\t */\n\tremoveAnnotation(id, opts) {\n\t\tconst model = this.get(id);\n\n\t\tif (!model) return new $.Deferred().reject();\n\n\t\treturn model.destroy(_.extend({wait: true}, opts));\n\t}\n\n\t/**\n\t * @method\n\t */\n\tresetActive() {\n\t\tconst activeAnnotation = this.findWhere({active: true});\n\t\tactiveAnnotation && activeAnnotation.set('active', false);\n\t\treturn this;\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} status Status\n\t * @param {object} opts Options\n\t */\n\tsetProjectStatus(status, opts = {}) {\n\t\tthis.projectStatus = status;\n\n\t\tthis.invoke('setProjectStatus', status, opts);\n\t\t!opts.silent && this.trigger('updateStatus', this, status);\n\n\t\treturn this;\n\t}\n\t/**\n\t * @method\n\t * @return {boolean}\n\t */\n\tcanEdit() {\n\t\treturn this.canEditProject === true;\n\t}\n\n\t/**\n\t * @override\n\t * @param {object} data Message data\n\t */\n\tsubscriptionMessage(data) {\n\t\t// TODO: this is a hack for 8.12\n\t\t// In 9.0 the websocket response will come after the post response and the case below can be used\n\t\tif (data.action === 'add') {\n\t\t\treturn _.delay(() => {\n\t\t\t\tconst model = this.get(data.id);\n\t\t\t\t!model && this.add(data.dto);\n\t\t\t}, 1000);\n\t\t}\n\n\t\tconst model = this.get(data.id);\n\t\tswitch (data.action) {\n\t\t\t// case 'add':\n\t\t\t// \t!model && this.add( data.dto );\n\t\t\t// \tbreak;\n\t\t\tcase 'edit':\n\t\t\t\tmodel ? model.set(data.dto) : this.add(data.dto);\n\t\t\t\tbreak;\n\t\t\tcase 'delete':\n\t\t\t\tmodel && this.remove(model);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'ProjectReviewAnnotations';\n\t}\n}\n","/**\n * A single decision for a project review\n * @class\n */\nimport Base from '@netx/core/lib/netx-model';\n\nexport default class ProjectReviewDecision extends Base {\n\t/** @type {string} */\n\tget idAttribute() {\n\t\treturn 'user';\n\t}\n\n\t/**\n\t * @property {object} defaults - Model defaults\n\t * @property {number} defaults.user - User id\n\t * @property {string} defaults.userEmail - User email\n\t * @property {string} defaults.userLabel - User label\n\t * @property {string} defaults.decision - Decision\n\t * @property {string} defaults.decision - Decision data\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\tuser: 0,\n\t\t\tuserEmail: '',\n\t\t\tuserLabel: '',\n\t\t\tdecision: '',\n\t\t\tdecisionDate: '',\n\t\t};\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'ProjectReviewDecision';\n\t}\n}\n","/**\n * Collection of project review `decisions`\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/projectReviewDecision';\n\nexport default class ProjectReviewDecisions extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {string} */\n\tget roomName() {\n\t\treturn 'PROJECT_REVIEW_DECISIONS_' + this.reviewId;\n\t}\n\n\t/**\n\t * @property {object} methods - Collection methods\n\t * @property {method} methods.read - Fetch decisions\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(opts) {\n\t\t\t\treturn ['getUserDecisionsForReview', this.reviewId];\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - Collection methods\n\t * @property {method} parsers.read - Parse fetched decisions\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} data Data\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(data, opts) {\n\t\t\t\treturn data.userDecisions;\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @override\n\t * @param {array} models An array of models or model attributes\n\t * @param {object} opts Model options\n\t */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * @memberof module:project/collections/projectReviewDecisions\n\t\t * @alias reviewId\n\t\t * @type {number}\n\t\t */\n\t\tthis.reviewId = opts.reviewId;\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(this, 'sync', this.subscribe);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'ProjectReviewDecisions';\n\t}\n}\n","import {i18n} from '@netx/core/i18n';\n\nexport let approvalModes = {\n\tnone: i18n.t('i18n.none'),\n\tall: i18n.t('i18n.all'),\n\tany: i18n.t('i18n.any'),\n};\n\nexport let decision = {\n\tapproved: i18n.t('i18n.approved'),\n\t'needs work': i18n.t('i18n.needsWork'),\n\trejected: i18n.t('i18n.rejected'),\n};\n\nexport let status = {\n\tclosed: i18n.t('i18n.closed'),\n\topen: i18n.t('i18n.open'),\n};\n\nexport default {approvalModes, decision, status};\n","/**\n * A single project review that contains collections for review `annotations` and review `decisions`\n * @class\n */\nimport Base from '@netx/core/lib/netx-model';\nimport {userProfile} from '@netx/core-user/collections/singletons/userProfile';\nimport AssetProjectReviewAnnotationsCollection from '../collections/projectReviewAnnotations';\nimport AssetProjectReviewDecisionsCollection from '../collections/projectReviewDecisions';\n\nimport {decision as projectDecisions} from '../properties/projects';\n\nexport default class ProjectReview extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @property {object} defaults - Model defaults\n\t * @property {number} defaults.id - Review id\n\t * @property {number} defaults.approvedCount - Review's approval count\n\t * @property {number} defaults.assetId - Asset id\n\t * @property {string} defaults.description - Review description\n\t * @property {string} defaults.decision - Review overall decision (\"approved\"/\"needs work\"/\"rejected\")\n\t * @property {string} defaults.decisionDate - Review overall decision date\n\t * @property {number} defaults.height - Asset original height\n\t * @property {boolean} defaults.isRestricted - Review is restricted (?)\n\t * @property {number} defaults.needsWorkCount - Review's \"needs work\" count\n\t * @property {string} defaults.previewUrl - Preview url\n\t * @property {number} defaults.projectId - Project id\n\t * @property {number} defaults.rejectedCount - Review's rejected count\n\t * @property {string} defaults.status - Review's current status (\"open\"/\"decided\")\n\t * @property {string} defaults.thumbUrl - Thumbnail url\n\t * @property {string} defaults.title - Review title\n\t * @property {string} defaults.type - Review type (\"asset\" is the only value so far)\n\t * @property {string} defaults.userDecision - User's decision on the review (\"approved\"/\"needs work\"/\"rejected\")\n\t * @property {number} defaults.width - Asset original width\n\t * @property {string} defaults.zoomUrl - Zoom url\n\t */\n\tget defaults() {\n\t\treturn {\n\t\t\t// id: 0,\n\t\t\tapprovedCount: 0,\n\t\t\tassetId: 0,\n\t\t\tdecision: '',\n\t\t\tdecisionDate: '',\n\t\t\tdescription: '',\n\t\t\theight: 0,\n\t\t\tisRestricted: false,\n\t\t\tneedsWorkCount: 0,\n\t\t\tpreviewUrl: '',\n\t\t\tprojectId: 0,\n\t\t\trejectedCount: 0,\n\t\t\tstatus: '',\n\t\t\tthumbUrl: '',\n\t\t\ttitle: '',\n\t\t\ttype: '',\n\t\t\tuserDecision: '',\n\t\t\twidth: 0,\n\t\t\tzoomUrl: '',\n\n\t\t\t// Client attributes\n\t\t\tactive: false,\n\t\t\tpermission: 'read',\n\t\t\tprojectStatus: 'open',\n\t\t};\n\t}\n\n\t/** @type {array} */\n\tget clientAttrs() {\n\t\treturn ['active', 'permission', 'projectStatus'];\n\t}\n\n\t/**\n\t * @property {object} methods - Model methods\n\t * @property {method} methods.remove - Delete review (asset from project)\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * Delete self from project\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tremove: function (opts) {\n\t\t\t\treturn [\n\t\t\t\t\t'deleteAssetsFromProject',\n\t\t\t\t\t[this.get('assetId')],\n\t\t\t\t\tthis.get('projectId'),\n\t\t\t\t];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {string} decision Decision\n\t\t\t * @param {object} opts Options\n\t\t\t */\n\t\t\tsetReviewDecision: function (decision, opts) {\n\t\t\t\tif (projectDecisions[decision] == null) {\n\t\t\t\t\treturn new $.Deferred().reject(\n\t\t\t\t\t\tnew Error('Unknow decision `' + decision + '`'),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Unset if already set\n\t\t\t\tvar existing = this.decisions.get(userProfile.id);\n\t\t\t\tif (existing && existing.get('decision') === decision) {\n\t\t\t\t\tdecision = '';\n\t\t\t\t}\n\n\t\t\t\treturn ['setReviewDecision', this.id, decision];\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - Model parsers\n\t * @property {function} parsers.setReviewDecision - Parse set decision\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {object} review Review\n\t\t\t * @param {string} decision Decision\n\t\t\t * @param {object} opts Options\n\t\t\t */\n\t\t\tsetReviewDecision: function (review, decision, opts) {\n\t\t\t\tthis.set(review);\n\t\t\t\treturn review;\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} attrs Model attributes\n\t * @param {object} opts Options\n\t */\n\tconstructor(attrs, opts) {\n\t\tsuper(attrs, opts);\n\n\t\t/**\n\t\t * @memberof module:project/models/projectReview\n\t\t * @alias annotations\n\t\t * @type {module:project/collections/projectReviewAnnotations}\n\t\t */\n\t\tthis.annotations = new AssetProjectReviewAnnotationsCollection([], {\n\t\t\treviewId: this.id,\n\t\t\tprojectStatus: this.get('projectStatus'),\n\t\t\tcanEditProject: this.allows('edit'),\n\t\t});\n\t\tthis.addSubCollection(this.annotations);\n\n\t\t/**\n\t\t * @memberof module:project/models/projectReview\n\t\t * @alias decisions\n\t\t * @type {module:project/collections/projectReviewDecisions}\n\t\t */\n\t\tthis.decisions = new AssetProjectReviewDecisionsCollection([], {\n\t\t\treviewId: this.id,\n\t\t});\n\t\tthis.addSubCollection(this.decisions);\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(this, 'change:active', function (model, active) {\n\t\t\tif (!active) {\n\t\t\t\t// Cleanup\n\t\t\t\tthis.resetActiveAnnotation().unsubscribe();\n\t\t\t} else {\n\t\t\t\t// Fetch data\n\t\t\t\tthis.getAnnotations();\n\t\t\t\tthis.getDecisions();\n\t\t\t}\n\t\t});\n\t\tthis.listenTo(this, 'change:id', function (model, id, opts) {\n\t\t\tthis.annotations.reviewId = id;\n\t\t\tthis.decisions.reviewId = id;\n\t\t});\n\t\tthis.listenTo(this, 'change:projectStatus', function (model, status, opts) {\n\t\t\tthis.annotations.setProjectStatus(status, opts);\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} annotation Annotation object\n\t * @param {object} opts Request options\n\t */\n\taddAnnotation(annotation, opts) {\n\t\treturn this.annotations.addAnnotation(annotation, opts);\n\t}\n\n\t/**\n\t * @override\n\t * @param {string} perm Permission\n\t * @return {boolean} Allowed\n\t */\n\tallows(perm) {\n\t\tvar allowed = super.allows(perm);\n\t\treturn allowed && perm !== 'read'\n\t\t\t? this.get('projectStatus') === 'open'\n\t\t\t: allowed;\n\t}\n\n\t/**\n\t * @method\n\t * @return {boolean} Can decide\n\t */\n\tcanMakeDecision() {\n\t\t// This is not my favorite approach\n\t\t// We need to know things about our parent project\n\t\t// If we are not part of a parent reviews collection that belongs to a parent project model\n\t\t// then we would be having some other problems outside of this gem - just due to the current\n\t\t// workflow / distribution of data\n\t\treturn this.collection.canMakeDecision();\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tgetAnnotations(opts) {\n\t\treturn this.annotations.fetch(opts);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tgetDecisions(opts) {\n\t\treturn this.decisions.fetch(opts);\n\t}\n\n\t/**\n\t * @method\n\t * @return {string} Orientation\n\t */\n\tgetOrientation() {\n\t\treturn this.get('width') > this.get('height') ? 'landscape' : 'portrait';\n\t}\n\n\t/**\n\t * @method\n\t * @return {number} Scale\n\t */\n\tgetZoomProxyScale() {\n\t\tvar width = this.get('width'),\n\t\t\theight = this.get('height');\n\n\t\t// Largest side is 1000\n\t\treturn width > height ? 1000 / width : 1000 / height;\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} id Annotation id\n\t * @param {object} opts Request options\n\t */\n\tremoveAnnotation(id, opts) {\n\t\tvar model = this.get(id);\n\n\t\tif (!model) return new $.Deferred().reject();\n\n\t\treturn model.destroy(_.extend({wait: true}, opts));\n\t}\n\n\t/**\n\t * @method\n\t */\n\tresetActiveAnnotation() {\n\t\tthis.annotations.resetActive();\n\t\treturn this;\n\t}\n\n\t/**\n\t * @method\n\t * @param {string} status Status\n\t */\n\tsetProjectStatus(status) {\n\t\treturn this.set('projectStatus', status);\n\t}\n\n\t/**\n\t * We do not subscribe to any websocket channels\n\t * but our sub collections do\n\t * @override\n\t */\n\tunsubscribe() {\n\t\tthis.annotations.unsubscribe();\n\t\tthis.decisions.unsubscribe();\n\t\treturn this;\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'ProjectReview';\n\t}\n}\n","/**\n * A collection of project `reviews`\n * @class\n */\nimport Base from '@netx/core/lib/netx-collection';\nimport Model from '../models/projectReview';\n\nimport SorterModel from '@netx/core-app/models/sorter';\nimport PagerModel from '@netx/core-app/models/pager';\n\nexport default class ProjectReviews extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {string} */\n\tget roomName() {\n\t\treturn 'PROJECT_REVIEWS_' + this.project.id;\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetReviewsForAsset: 'Loading reviews for asset',\n\t\t\tgetReviewsForProject: 'Loading review assets',\n\t\t};\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetReviewsForAsset: 'Loaded reviews for asset',\n\t\t\tgetReviewsForProject: 'Loaded review assets',\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} methods - Collection methods\n\t * @property {method} methods.read - Fetch reviews\n\t * @property {method} methods.getReviewsForAsset - Fetch reviews for asset\n\t */\n\tget methods() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(opts = {}) {\n\t\t\t\tif (this.assetId) return this.getReviewsForAsset(this.assetId, opts);\n\n\t\t\t\t// Set `startId` if provided\n\t\t\t\tthis.pager.set('startId', opts.startId || null);\n\t\t\t\treturn [\n\t\t\t\t\t'getReviewsForProject',\n\t\t\t\t\tthis.getProjectId(),\n\t\t\t\t\tthis.sorter.getSortDTO(),\n\t\t\t\t\tthis.pager.getPageDTO(),\n\t\t\t\t];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {number} assetId Asset id\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetReviewsForAsset(assetId, opts) {\n\t\t\t\tthis.assetId = assetId;\n\t\t\t\treturn [\n\t\t\t\t\t'getReviewsForAsset',\n\t\t\t\t\tassetId,\n\t\t\t\t\tthis.sorter.getSortDTO(),\n\t\t\t\t\tthis.pager.getPageDTO(),\n\t\t\t\t];\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} parsers - Collection parsers\n\t * @property {method} parsers.read - Parse fetched reviews\n\t * @property {method} parsers.getReviewsForAsset - Parse fetched reviews for asset\n\t */\n\tget parsers() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} reviews Reviews data\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(reviews, opts) {\n\t\t\t\t// Reset `startId`\n\t\t\t\tthis.pager.set('startId', null);\n\n\t\t\t\tconst project = this.project;\n\t\t\t\tconst permission = project.get('permission');\n\t\t\t\tconst projectStatus = project.get('status');\n\n\t\t\t\treturn _.map(reviews, (review) =>\n\t\t\t\t\t_.extend(review, {\n\t\t\t\t\t\tpermission: permission,\n\t\t\t\t\t\tprojectStatus: projectStatus,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {array} reviews Reviews data\n\t\t\t * @param {number} assetId Asset id\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetReviewsForAsset(reviews, assetId, opts) {\n\t\t\t\treviews = _.map(reviews, (review) => {\n\t\t\t\t\tconst project = review.project;\n\t\t\t\t\treturn _.extend(\n\t\t\t\t\t\t_.pick(\n\t\t\t\t\t\t\treview,\n\t\t\t\t\t\t\t'assetId',\n\t\t\t\t\t\t\t'decision',\n\t\t\t\t\t\t\t'decisionDate',\n\t\t\t\t\t\t\t'id',\n\t\t\t\t\t\t\t'projectId',\n\t\t\t\t\t\t\t'status',\n\t\t\t\t\t\t),\n\t\t\t\t\t\t_.pick(\n\t\t\t\t\t\t\tproject,\n\t\t\t\t\t\t\t'creationDate',\n\t\t\t\t\t\t\t'description',\n\t\t\t\t\t\t\t'hasApprovers',\n\t\t\t\t\t\t\t'hasDecisions',\n\t\t\t\t\t\t\t'title',\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tprojectStatus: project.status,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tthis.set(reviews, opts);\n\t\t\t\treturn reviews;\n\t\t\t},\n\t\t};\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\n\t\tsuper(models, opts);\n\n\t\t/**\n\t\t * Parent project\n\t\t * @memberof module:project/collections/projectReviews\n\t\t * @alias project\n\t\t * @type {module:project/models/project}\n\t\t */\n\t\tthis.project = opts.project;\n\n\t\t/**\n\t\t * Paging model\n\t\t * @memberof module:project/collections/projectReviews\n\t\t * @alias pager\n\t\t * @type {module:app/models/pager}\n\t\t */\n\t\tthis.pager = new PagerModel(\n\t\t\t{\n\t\t\t\tpageSize: 25,\n\t\t\t\t// TODO: See notes in pager model\n\t\t\t\troutesToPage: false,\n\t\t\t\t...opts.pager,\n\t\t\t},\n\t\t\t{collection: this},\n\t\t);\n\t\tthis.addSubModel(this.pager);\n\n\t\t/**\n\t\t * Sorting model\n\t\t * @memberof module:project/collections/projectReviews\n\t\t * @alias sorter\n\t\t * @type {module:app/models/sorter}\n\t\t */\n\t\tthis.sorter = new SorterModel(\n\t\t\t{\n\t\t\t\tfield: 'title',\n\t\t\t\torder: opts.sortOrder || 'desc',\n\t\t\t},\n\t\t\t{\n\t\t\t\tcollection: this,\n\t\t\t\tsortableFields: ['title'],\n\t\t\t},\n\t\t);\n\t\tthis.addSubModel(this.sorter);\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(this, 'change:active', (model, active) => {\n\t\t\tif (!active) return;\n\t\t\tthis.each((m) => {\n\t\t\t\tm !== model && m.get('active') && m.set('active', false);\n\t\t\t});\n\t\t})\n\t\t\t.listenTo(this, 'sync', (reviews) => {\n\t\t\t\tif (reviews !== this) return;\n\t\t\t\tthis.project && this.project.id && this.subscribe();\n\t\t\t})\n\t\t\t.listenTo(this.project, 'change:status', this.setProjectStatus)\n\t\t\t.listenTo(this, 'request:getReviewsForAsset', (self, xhr, opts) => {\n\t\t\t\tthis.trigger('request:read', self, xhr, opts);\n\t\t\t})\n\t\t\t.listenTo(this, 'complete:getReviewsForAsset', (self, data, opts) => {\n\t\t\t\t!opts.silent && this.trigger('sync', self, data, opts);\n\t\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @return {boolean} Can decide\n\t */\n\tcanMakeDecision() {\n\t\treturn this.project.canMakeDecision();\n\t}\n\n\t/**\n\t * @method\n\t * @return {module:project/models/projectReview} Review\n\t */\n\tgetActive() {\n\t\treturn this.findWhere({active: true});\n\t}\n\n\t/**\n\t * @method\n\t * @return {number} Project id\n\t */\n\tgetProjectId() {\n\t\treturn this.project.id;\n\t}\n\n\t/**\n\t * @method\n\t * @return {module:project/models/projectReview} Review\n\t */\n\tnextReview() {\n\t\tif (!this.length) return;\n\n\t\tconst active = this.getActive();\n\t\tconst idx = active && active.getIndex();\n\t\tif (!active || idx > this.length - 2) {\n\t\t\treturn this.selectReview(this.at(0).id);\n\t\t}\n\t\treturn this.selectReview(this.at(idx + 1));\n\t}\n\n\t/**\n\t * @method\n\t * @return {module:project/models/projectReview} Review\n\t */\n\tpreviousReview() {\n\t\tif (!this.length) return;\n\n\t\tconst active = this.getActive();\n\t\tconst idx = active && active.getIndex();\n\t\tif (!active || idx < 1) {\n\t\t\treturn this.selectReview(this.at(this.length - 1).id);\n\t\t}\n\t\treturn this.selectReview(this.at(idx - 1));\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} id Review id\n\t * @param {object} opts Request options\n\t */\n\tremoveReview(id, opts) {\n\t\tconst model = this.get(id);\n\n\t\tif (!model) return new $.Deferred().reject();\n\n\t\treturn model.destroy(_.extend({wait: true}, opts));\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} id Review id\n\t * @return {module:project/models/projectReview} Review\n\t * @fires selectReview\n\t */\n\tselectReview(id) {\n\t\tconst review = this.get(id);\n\t\treview && review.set('active', true);\n\n\t\treturn review;\n\t}\n\n\t/**\n\t * @method\n\t * @param {module:project/models/project} project Parent project\n\t * @param {string} status Status\n\t * @param {object} opts Options\n\t * @fires updateStatus\n\t */\n\tsetProjectStatus(project, status, opts) {\n\t\tthis.invoke('setProjectStatus', status, opts);\n\t\treturn this;\n\t}\n\n\t/** @override */\n\tsubscriptionMessage(data) {\n\t\tconst model = this.get(data.id);\n\t\tswitch (data.action) {\n\t\t\t// case 'add':\n\t\t\t// \t!model && this.add( data.dto );\n\t\t\t// \tbreak;\n\t\t\tcase 'edit':\n\t\t\t\tmodel && model.set(_.omit(data.dto, 'userDecision'));\n\t\t\t\tbreak;\n\t\t\tcase 'delete':\n\t\t\t\tmodel && this.remove(model);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'ProjectReviews';\n\t}\n}\n","/**\n * @class\n */\nimport Base from '@netx/core-permissions/models/participant';\n\nexport default class ProjectParticipant extends Base {\n\t/**\n\t * @property {object} defaults - Model defaults\n\t * @property {boolean} defaults.approver - Is participant an approver\n\t */\n\tget defaults() {\n\t\treturn _.extend(super.defaults, {\n\t\t\tapprover: false,\n\t\t});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'ProjectParticipant';\n\t}\n}\n","/**\n * @class\n */\nimport Base from '@netx/core-permissions/collections/participants';\nimport Model from '../models/projectParticipant';\n\nexport default class ProjectParticpants extends Base {\n\t/**\n\t * @property {object} parsers - Collection parsers\n\t * @property {function} parsers.read - Parse fetched results\n\t */\n\tget parsers() {\n\t\treturn _.extend(super.parsers, {\n\t\t\t/**\n\t\t\t * @override\n\t\t\t * @param {array} participants Participants\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tread(participants, opts) {\n\t\t\t\tconst approvers = opts.approvers || {};\n\n\t\t\t\treturn _.map(participants, (participant) => {\n\t\t\t\t\t// We want to combine the type and id `-`\n\t\t\t\t\t// `all` has no id and is just \"all\"\n\t\t\t\t\tconst uniqueId = _.compact(\n\t\t\t\t\t\t_.values(_.pick(participant, 'type', 'id')),\n\t\t\t\t\t).join('-');\n\n\t\t\t\t\tlet selector;\n\t\t\t\t\t// Check if we are an approver\n\t\t\t\t\tif (participant.type === 'group') {\n\t\t\t\t\t\tselector = approvers.groupIds;\n\t\t\t\t\t} else if (participant.type === 'user') {\n\t\t\t\t\t\tselector = approvers.userIds;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn _.extend(participant, {\n\t\t\t\t\t\tapprover: selector && selector.indexOf(participant.id) > -1,\n\t\t\t\t\t\tuniqueId: uniqueId,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t},\n\t\t});\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\t\tsuper(models, opts);\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'ProjectParticpants';\n\t}\n}\n","/**\n * A single project that contains a collection of project `reviews`\n * @class\n */\nimport Base from '@netx/core-share/models/sharedResource';\nimport {userProfile} from '@netx/core-user/collections/singletons/userProfile';\nimport AssetProjectReviewsCollection from '../collections/projectReviews';\nimport ProjectParticipantsCollection from '../collections/projectParticipants';\nimport {getPreference} from '@netx/core-user-next/utils/getPreference';\n\nimport {approvalModes, status as projectStatuses} from '../properties/projects';\n\nexport default class Project extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * Room name for websocket subscription\n\t * @type {string}\n\t */\n\tget roomName() {\n\t\treturn `PROJECT_${this.id}`;\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @property {object} defaults - Model defaults\n\t * @property {object} defaults.approvers - Project's user selector of approvers\n\t * @property {string} defaults.approvalMode - Project approval mode (any/all/none)\n\t * @property {string} defaults.creationDate - Project creation date\n\t * @property {number} defaults.creationUser - Project creation user\n\t * @property {string} defaults.description - Project description\n\t * @property {string} defaults.dueDate - Project expiration date\n\t * @property {boolean} defaults.hasApprovers - Project has approvers\n\t * @property {boolean} defaults.hasDecisions - Project has decisions\n\t * @property {string} defaults.modDate - Project last modification date\n\t * @property {string} defaults.modUser - Project last modifying user\n\t * @property {string} defaults.status - Project's current status\n\t * @property {string} defaults.title - Project title\n\t */\n\tget defaults() {\n\t\tconst userId = userProfile.id;\n\t\treturn _.extend(super.defaults, {\n\t\t\t// id: 0,\n\t\t\tapprovalMode: 'none',\n\t\t\tapprovers: {\n\t\t\t\tall: false,\n\t\t\t\temails: [],\n\t\t\t\tgroupIds: [],\n\t\t\t\tnone: false,\n\t\t\t\tuserIds: [],\n\t\t\t},\n\t\t\tcreationDate: '',\n\t\t\tcreationUser: userId,\n\t\t\tdescription: '',\n\t\t\tdueDate: '',\n\t\t\thasApprovers: false,\n\t\t\thasDecisions: false,\n\t\t\tmodDate: '',\n\t\t\tmodUser: userId,\n\t\t\tstatus: 'open',\n\t\t\ttitle: '',\n\t\t});\n\t}\n\n\t/**\n\t * @property {object} methods - Model methods\n\t * @property {method} methods.create - Create new project from asset ids or cart id\n\t * @property {method} methods.read - Fetch project\n\t * @property {method} methods.remove - Delete project\n\t * @property {method} methods.update - Update existing project\n\t * @property {method} methods.addAssetsToProject - Add assets to existing project\n\t * @property {method} methods.deleteAssetsFromProject - Remove assets fromexisting project\n\t */\n\tget methods() {\n\t\treturn _.extend(super.methods, {\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tcreate(opts) {\n\t\t\t\tif (!this.assetIds) {\n\t\t\t\t\t// && this.cartId == null) {\n\t\t\t\t\treturn new $.Deferred().reject(\n\t\t\t\t\t\tnew Error('cartId or assetIds required'),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\t// if (this.cartId != null) {\n\t\t\t\t// \treturn ['createProjectFromCartAssets', this.self(), this.cartId];\n\t\t\t\t// }\n\t\t\t\treturn ['createProjectFromAssets', this.self(), this.assetIds];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t */\n\t\t\tfetchBean: ['getProject', 'id'],\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tremove(opts) {\n\t\t\t\treturn ['deleteProject', this.id];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tupdate(opts) {\n\t\t\t\treturn this.updateProject(opts);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {array} assetIds Asset ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\taddAssetsToProject(assetIds, opts) {\n\t\t\t\treturn ['addAssetsToProject', assetIds, this.id];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {array} assetIds Asset ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tdeleteAssetsFromProject(assetIds, opts) {\n\t\t\t\treturn ['deleteAssetsFromProject', assetIds, this.id];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tupdateProject(opts) {\n\t\t\t\treturn ['updateProject', this.self()];\n\t\t\t},\n\t\t\t/**\n\t\t\t * @method\n\t\t\t * @param {string} status Status\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tupdateProjectStatus(status, opts) {\n\t\t\t\tif (projectStatuses[status] == null) {\n\t\t\t\t\treturn new $.Deferred().reject(\n\t\t\t\t\t\tnew Error('Unknow status `' + status + '`'),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn ['updateProjectStatus', this.id, status];\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @property {object} parsers - Model parsers\n\t * @property {function} parsers.addAssetsToProject - Parse add assets\n\t * @property {function} parsers.deleteAssetsFromProject - Parse remove assets\n\t */\n\tget parsers() {\n\t\treturn _.extend(super.parsers, {\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {object} project Project\n\t\t\t * @param {array} assetIds Asset ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\taddAssetsToProject(project, assetIds, opts) {\n\t\t\t\tthis.syncedOnce && this.fetch(opts);\n\t\t\t\treturn project;\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {object} project Project\n\t\t\t * @param {array} assetIds Asset ids\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tdeleteAssetsFromProject(project, assetIds, opts) {\n\t\t\t\tthis.syncedOnce && this.fetch(opts);\n\t\t\t\treturn project;\n\t\t\t},\n\t\t\t/**\n\t\t\t * @function\n\t\t\t * @param {object} project Project\n\t\t\t * @param {string} status Status\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tupdateProjectStatus(project, status, opts) {\n\t\t\t\tthis.set(project);\n\t\t\t\treturn project;\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @override\n\t * @param {object} attrs Model attributes\n\t * @param {opts} Model options\n\t */\n\tconstructor(attrs, opts = {}) {\n\t\t/**\n\t\t * Resource type name\n\t\t * @type {string}\n\t\t */\n\t\topts.resourceName = 'project';\n\n\t\t// We have special needs for our participants\n\t\topts.participants = ProjectParticipantsCollection;\n\n\t\tsuper(attrs, opts);\n\n\t\t/**\n\t\t * @memberof module:project/models/project\n\t\t * @alias reviews\n\t\t * @type {module:project/collections/projectReviews}\n\t\t */\n\t\tthis.reviews = new AssetProjectReviewsCollection([], {\n\t\t\tproject: this,\n\t\t\t...opts.reviews,\n\t\t});\n\t\tthis.addSubCollection(this.reviews);\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(this, 'sync', this.subscribe);\n\t}\n\n\t/**\n\t * @method\n\t * @param {array} assetIds Asset ids\n\t * @param {object} opts Request options\n\t */\n\taddAssets(assetIds, opts) {\n\t\treturn this.addAssetsToProject.apply(this, arguments);\n\t}\n\n\t/**\n\t * @method\n\t * @return {boolean} Can decide\n\t */\n\tcanMakeDecision() {\n\t\treturn (\n\t\t\tthis.isOpen() &&\n\t\t\tthis.get('hasApprovers') === true &&\n\t\t\t_.contains(this.get('approvers').userIds, userProfile.id)\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @return {boolean} Can modify approval mode\n\t */\n\tcanModifyApprovalMode() {\n\t\treturn this.get('hasDecisions') === false;\n\t}\n\n\t/**\n\t * @method\n\t * @return {module:project/models/projectReview} Review\n\t */\n\tgetActiveReview() {\n\t\treturn this.reviews.getActive();\n\t}\n\n\t/**\n\t * @override\n\t * @param {object} opts Request options\n\t * @return {object} Approvers\n\t */\n\tgetApprovers(opts) {\n\t\tconst approvers = this.get('approvers');\n\t\t// Only users for now\n\t\treturn {\n\t\t\tuserIds: approvers.userIds ? approvers.userIds.slice(0) : [],\n\t\t};\n\t}\n\n\t/**\n\t * @override\n\t * @param {object} opts Request options\n\t */\n\tgetParticipants(opts = {}) {\n\t\topts.approvers = this.get('approvers');\n\n\t\treturn super.getParticipants(opts);\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} reviewId Review id\n\t * @param {object} opts Request options\n\t */\n\tgetReviews(reviewId, opts) {\n\t\treturn this.reviews.fetch(\n\t\t\t_.extend(opts || {}, {\n\t\t\t\tstartId: parseInt(reviewId) || null,\n\t\t\t}),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @return {object} Approvers\n\t */\n\tgetUserSelector() {\n\t\t// We only support user ids for now\n\t\treturn _.pick(this.get('approvers'), 'userIds');\n\t}\n\n\t/**\n\t * Is project `status` closed?\n\t * @method\n\t * @return {boolean} Is closed\n\t */\n\tisClosed() {\n\t\treturn this.get('status') === 'closed';\n\t}\n\n\t/**\n\t * Is project `status` open?\n\t * @method\n\t * @return {boolean} Is open\n\t */\n\tisOpen() {\n\t\treturn this.get('status') === 'open';\n\t}\n\n\t/**\n\t * @method\n\t * @return {module:project/models/projectReview} Review\n\t */\n\tnextReview() {\n\t\treturn this.reviews.nextReview();\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} data Data\n\t * @param {object} opts Request options\n\t * @fires module:user#user:prefs:set\n\t */\n\tparseAndSave(data, opts) {\n\t\t// Store users desired approval mode for future creation\n\t\t// Per DAM-13308\n\t\t// if (\n\t\t// \tdata.approvalMode != null &&\n\t\t// \tapprovalModes[ data.approvalMode ] != null\n\t\t// ) {\n\t\t// \tNetx.setPreference('project.approvalMode', data.approvalMode );\n\t\t// }\n\n\t\tlet approvers = data.approvers;\n\t\tif (approvers) {\n\t\t\tconst approvalMode = this.get('approvalMode');\n\t\t\tconst approverCount = (approvers.userIds || []).length;\n\n\t\t\t// Only users for now\n\t\t\tapprovers = data.approvers = {\n\t\t\t\tall: false,\n\t\t\t\temails: null,\n\t\t\t\tgroupIds: null,\n\t\t\t\tnone: false,\n\t\t\t\tuserIds: approvers.userIds || [],\n\t\t\t};\n\n\t\t\t// Per DAM-13308\n\t\t\t// Set the mode based on sytem property\n\t\t\tif (approvalMode === 'none' && approverCount) {\n\t\t\t\tdata.approvalMode = getPreference('review.approval.requireAll', true)\n\t\t\t\t\t? 'all'\n\t\t\t\t\t: 'any';\n\t\t\t} else if (!approverCount) {\n\t\t\t\tdata.approvalMode = 'none';\n\t\t\t}\n\t\t}\n\n\t\t// Check that we can modify approval mode and if so that we are\n\t\t// setting a valid mode\n\t\tif (\n\t\t\tdata.approvalMode &&\n\t\t\t(!this.canModifyApprovalMode() ||\n\t\t\t\tapprovalModes[data.approvalMode] == null)\n\t\t) {\n\t\t\tdelete data.approvalMode;\n\t\t}\n\n\t\treturn this.save(\n\t\t\t_.pick.apply(_, [data].concat(_.keys(this.constructor.GetDefaults()))),\n\t\t\t_.extend({wait: true}, opts),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @return {module:project/models/projectReview} Review\n\t */\n\tpreviousReview() {\n\t\treturn this.reviews.previousReview();\n\t}\n\n\t/**\n\t * @method\n\t * @param {array} assetIds Asset ids\n\t * @param {object} opts Request options\n\t */\n\tremoveAssets(assetIds, opts) {\n\t\treturn this.deleteAssetsFromProject.apply(this, arguments);\n\t}\n\n\t/**\n\t * @method\n\t * @param {number} id Review id\n\t * @return {module:project/models/projectReview} Review\n\t */\n\tselectReview(id) {\n\t\treturn this.reviews.selectReview(id);\n\t}\n\n\t/** @override */\n\tset(key, val, opts) {\n\t\tif (key == null) return this;\n\n\t\t// Handle both `\"key\", value` and `{key: value}` -style arguments.\n\t\tlet attrs;\n\t\tif (typeof key === 'object') {\n\t\t\tattrs = key;\n\t\t\topts = val;\n\t\t} else {\n\t\t\t(attrs = {})[key] = val;\n\t\t}\n\n\t\topts || (opts = {});\n\n\t\tlet approversChanged = false;\n\t\tif (attrs.approvers) {\n\t\t\tconst oldApprovers = this.get('approvers');\n\t\t\tif (oldApprovers) {\n\t\t\t\tapproversChanged =\n\t\t\t\t\tattrs.approvers.userIds.join() !==\n\t\t\t\t\t(oldApprovers.userIds || []).join();\n\t\t\t\t// Blow it out so that we can get a change event from backbone on this object\n\t\t\t\tif (approversChanged) {\n\t\t\t\t\tthis.attributes.approvers = null;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn super.set(attrs, opts);\n\t}\n\n\t/**\n\t * @override\n\t */\n\tunsubscribe() {\n\t\tthis.reviews.unsubscribe();\n\t\treturn super.unsubscribe();\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Project';\n\t}\n}\n","/**\n * Collection of `projects`\n * A standard `fetch` will populate it with {@link module:share/models/sharedResource} data\n * @class\n */\nimport Base from '@netx/core-share/collections/sharedResources';\nimport {userProfile} from '@netx/core-user/collections/singletons/userProfile';\nimport Model from '../models/project';\nimport {\n\tcurrentUserMeetsUserLevel,\n\tUserLevel,\n} from '@netx/core-user-next/utils/currentUserMeetsUserLevel';\n\nexport default class Projects extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/** @type {string} */\n\tget preferredFetchMethod() {\n\t\treturn 'fetchBeansForUser';\n\t}\n\n\t/** @type {boolean} */\n\tget xhrTrackProgress() {\n\t\treturn true;\n\t}\n\n\t/** @type {object} */\n\tget xhrLoadingMessages() {\n\t\treturn {\n\t\t\tgetAllProjects: 'Loading reviews',\n\t\t\tgetProjectsForAsset: 'Loading reviews for asset',\n\t\t\tgetProjectsForUser: 'Loading reviews',\n\t\t};\n\t}\n\n\t/** @type {object}*/\n\tget xhrLoadedMessages() {\n\t\treturn {\n\t\t\tgetAllProjects: 'Loaded reviews',\n\t\t\tgetProjectsForAsset: 'Loading reviews for asset',\n\t\t\tgetProjectsForUser: 'Loaded reviews',\n\t\t};\n\t}\n\n\t/**\n\t * @property {object} methods - Collection methods\n\t * @property {method} methods.fetchBeans - Fetch project beans\n\t * @property {method} methods.fetchBeansForUser - Fetch project beans for user\n\t * @property {method} methods.getProjectsForAsset - Fetch project beans for asset\n\t */\n\tget methods() {\n\t\treturn _.extend(super.methods, {\n\t\t\t/**\n\t\t\t * A `pageListDTO` `read` for all projects (admin only)\n\t\t\t * @method\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tfetchBeans(opts) {\n\t\t\t\t// If not an admin, send to the user specific call\n\t\t\t\tif (!currentUserMeetsUserLevel(UserLevel.ADMIN))\n\t\t\t\t\treturn this.fetchBeansForUser();\n\n\t\t\t\treturn [\n\t\t\t\t\t'getAllProjects',\n\t\t\t\t\tthis.filterStr,\n\t\t\t\t\tthis.sorter.getSortDTO(),\n\t\t\t\t\tthis.pager.getPageDTO(),\n\t\t\t\t];\n\t\t\t},\n\t\t\t/**\n\t\t\t * A `pageListDTO` `read` for all projects pertaining to a specific user\n\t\t\t * @method\n\t\t\t * @param {number} userId User id\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tfetchBeansForUser(userId, opts) {\n\t\t\t\tvar currentUser = userProfile;\n\t\t\t\tuserId =\n\t\t\t\t\tuserId == null || currentUser.get('type') < 9\n\t\t\t\t\t\t? currentUser.id\n\t\t\t\t\t\t: userId;\n\n\t\t\t\treturn [\n\t\t\t\t\t'getProjectsForUser',\n\t\t\t\t\tuserId,\n\t\t\t\t\tthis.filterStr,\n\t\t\t\t\tthis.sorter.getSortDTO(),\n\t\t\t\t\tthis.pager.getPageDTO(),\n\t\t\t\t];\n\t\t\t},\n\t\t\t/**\n\t\t\t * A `read` for a particular asset\n\t\t\t * @method\n\t\t\t * @param {number} assetId Asset id\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetProjectsForAsset(assetId, opts) {\n\t\t\t\treturn [\n\t\t\t\t\t'getProjectsForAsset',\n\t\t\t\t\tassetId,\n\t\t\t\t\tthis.sorter.getSortDTO(),\n\t\t\t\t\tthis.pager.getPageDTO(),\n\t\t\t\t];\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * @property {object} parsers - Collection parsers\n\t * @property {function} parsers.fetchBeans - Parse fetch results\n\t * @property {function} parsers.fetchBeansForUser - Parse fetch results\n\t * @property {function} parsers.getProjectsForAsset - Parse fetch results\n\t */\n\tget parsers() {\n\t\treturn _.extend(super.parsers, {\n\t\t\t/**\n\t\t\t * A `pageListDTO` `read` for all projects (admin only)\n\t\t\t * @function\n\t\t\t * @param {array} data Projects data\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tfetchBeans(data, opts) {\n\t\t\t\tthis.set(data, _.extend({merge: true}, opts));\n\t\t\t\t!opts.silent && this.trigger('sync', this, data, opts);\n\t\t\t},\n\t\t\t/**\n\t\t\t * A `pageListDTO` `read` for all projects pertaining to a specific user\n\t\t\t * @function\n\t\t\t * @param {array} data Projects data\n\t\t\t * @param {number} userId User id\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tfetchBeansForUser(data, userId, opts) {\n\t\t\t\tthis.set(data, _.extend({merge: true}, opts));\n\t\t\t\t!opts.silent && this.trigger('sync', this, data, opts);\n\t\t\t},\n\t\t\t/**\n\t\t\t * A `read` for a particular asset\n\t\t\t * @function\n\t\t\t * @param {array} data Projects data\n\t\t\t * @param {number} assetId Asset id\n\t\t\t * @param {object} opts Request options\n\t\t\t */\n\t\t\tgetProjectsForAsset(data, assetId, opts) {\n\t\t\t\tthis.set(data, opts);\n\t\t\t\t!opts.silent && this.trigger('sync', this, data, opts);\n\t\t\t},\n\t\t});\n\t}\n\n\t/** @override */\n\tconstructor(models, opts = {}) {\n\t\topts.model = opts.model || Model;\n\t\topts.resourceName = opts.resourceName || 'project';\n\t\topts.sortField = opts.sortField || 'creationDate';\n\n\t\tsuper(models, opts);\n\n\t\t// Hey, listen!\n\t\tthis.listenTo(\n\t\t\tthis,\n\t\t\t[\n\t\t\t\t'request:fetchBeans',\n\t\t\t\t'request:fetchBeansForUser',\n\t\t\t\t'request:getProjectsForAsset',\n\t\t\t].join(' '),\n\t\t\t(collection, xhr, opts) => {\n\t\t\t\tthis.trigger('request:read', this, xhr, opts);\n\t\t\t},\n\t\t);\n\n\t\t// DAM-21994\n\t\tthis.listenTo(\n\t\t\tdispatcher,\n\t\t\t'project:edit:success',\n\t\t\t_.debounce(() => {\n\t\t\t\tthis[this.preferredFetchMethod]();\n\t\t\t}, 100),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {array} projectIds Project ids\n\t * @param {array} assetIds Asset ids\n\t * @return {module:project/collections/projects} Projects\n\t */\n\taddAssets(projectIds, assetIds) {\n\t\tif (!projectIds || !projectIds.length) return new $.Deferred().resolve([]);\n\n\t\t// No sense in hitting the server over and over again if there is an error adding the assets to\n\t\t// any project\n\t\tconst firstId = projectIds[0];\n\t\tconst restIds = projectIds.slice(1) || [];\n\n\t\tconst projects = [];\n\n\t\tconst project = new Model({id: firstId});\n\t\tprojects.push(project);\n\n\t\treturn project.addAssetsToProject(assetIds).then(() => {\n\t\t\t// Now that that was successful, send to the rest\n\t\t\treturn Promise.all(\n\t\t\t\trestIds.map((id) => {\n\t\t\t\t\tconst project = new Model({id: id});\n\t\t\t\t\tprojects.push(project);\n\t\t\t\t\treturn project.addAssetsToProject(assetIds);\n\t\t\t\t}),\n\t\t\t).then(() => {\n\t\t\t\treturn new this.constructor(projects);\n\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * @method\n\t * @param {array} projects Project objects\n\t * @param {array} assetIds Asset ids\n\t * @param {object} opts Options\n\t */\n\tcreateNewProjects(projects, assetIds, opts = {}) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tif (!projects || !projects.length) resolve([]);\n\n\t\t\tconst newProjects = [];\n\t\t\t// Save each group after the other has completed to avoid data locks on the server\n\t\t\tconst next = () => {\n\t\t\t\tif (!projects.length) return resolve(newProjects);\n\n\t\t\t\tconst project = new Model(projects.shift());\n\t\t\t\tproject.assetIds = assetIds;\n\t\t\t\tproject.parseAndSave(opts).then(() => {\n\t\t\t\t\tnewProjects.push(project);\n\t\t\t\t\tnext();\n\t\t\t\t}, reject);\n\t\t\t};\n\n\t\t\tnext();\n\t\t});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'Projects';\n\t}\n}\n","/**\n * @class\n */\nimport Base from './asset';\n\n// Collections\nimport AssetsCollection from '../collections/assets';\nimport AssetAttributeDatumCollection from '../collections/assetAttributeDatum';\nimport AssetIndexCollection from '../collections/assetIndex';\nimport AssetMetadataCollection from '../collections/assetMetadata';\nimport AssetPermissionsCollection from '@netx/core-permissions/collections/assetPermissions';\nimport AssetUsageCollection from '../collections/assetUsage';\nimport AssetVersionsCollection from '../collections/assetVersions';\nimport AssetViewsCollection from '../collections/assetViews';\nimport AttributeHistoryCollection from '../collections/assetAttributeHistory';\nimport {attributeHistoryEnabled} from '@netx/core-attribute-history/enablers';\nimport CategoriesCollection from '@netx/core-category/collections/categories';\nimport ProjectReviewsCollection from '@netx/core-project/collections/projectReviews';\nimport ProjectsCollection from '@netx/core-project/collections/projects';\nimport {assetProjectEnabled} from '@netx/core-asset-project/enablers';\n\nimport customConfig from '../config';\nimport {AssetXMPPacketStatus} from '@netx/core-asset-next/schema';\n\nexport default class CurrentAsset extends Base {\n\t/**\n\t * @type {Netx.Rpc}\n\t * @private\n\t */\n\tget rpc() {\n\t\treturn true;\n\t}\n\n\t/**\n\t * @override\n\t * @param {object} attr Model attributes\n\t * @param {object} opts Model options\n\t * @listens module:asset#asset:constituent:choose:succeeded\n\t * @listens module:asset#asset:task:complete\n\t * @listens module:asset#asset:reimport:succeeded\n\t */\n\tconstructor(attrs, opts = {}) {\n\t\tsuper(attrs, opts);\n\n\t\t/**\n\t\t * @memberof module:asset/models/currentAsset\n\t\t * @alias attributeDatum\n\t\t * @type {module:asset/collections/attributeDatum}\n\t\t */\n\t\tthis.assetAttributeDatum = new AssetAttributeDatumCollection([]);\n\t\tthis.addSubCollection(this.assetAttributeDatum);\n\n\t\tif (attributeHistoryEnabled()) {\n\t\t\t/**\n\t\t\t * @memberof module:asset/models/currentAsset\n\t\t\t * @alias attributeHistory\n\t\t\t * @type {module:asset/collections/attributeHistory}\n\t\t\t */\n\t\t\tthis.attributeHistory = new AttributeHistoryCollection([]);\n\t\t}\n\n\t\t/**\n\t\t * @memberof module:asset/models/currentAsset\n\t\t * @alias categories\n\t\t * @type {module:category/collections/categories}\n\t\t */\n\t\tthis.categories = new CategoriesCollection([]);\n\n\t\t/**\n\t\t * @memberof module:asset/models/currentAsset\n\t\t * @alias indices\n\t\t * @type {module:asset/collections/assetIndex}\n\t\t */\n\t\tthis.indices = new AssetIndexCollection([]);\n\n\t\t/**\n\t\t * @memberof module:asset/models/currentAsset\n\t\t * @alias links\n\t\t * @type {module:asset/collections/assets}\n\t\t */\n\t\tthis.links = new AssetsCollection([], {\n\t\t\tchunkSize: customConfig.CHUNK_SIZE,\n\t\t\tpageSize: customConfig.CHUNK_SIZE,\n\t\t\tpagerRoutes: false,\n\t\t});\n\n\t\t/**\n\t\t * @memberof module:asset/models/currentAsset\n\t\t * @alias metadata\n\t\t * @type {module:asset/collections/assetMetadata}\n\t\t */\n\t\tthis.metadata = new AssetMetadataCollection([]);\n\n\t\t/**\n\t\t * @memberof module:asset/models/currentAsset\n\t\t * @alias permissions\n\t\t * @type {module:permissions/collections/assetPermissions}\n\t\t */\n\t\tthis.permissions = new AssetPermissionsCollection([], {target: this});\n\n\t\tif (assetProjectEnabled()) {\n\t\t\t/**\n\t\t\t * @memberof module:asset/models/currentAsset\n\t\t\t * @alias projects\n\t\t\t * @type {module:project/collections/projects}\n\t\t\t */\n\t\t\tthis.projects = new ProjectsCollection();\n\n\t\t\t/**\n\t\t\t * @memberof module:asset/models/currentAsset\n\t\t\t * @alias reviews\n\t\t\t * @type {module:project/collections/projectReviews}\n\t\t\t */\n\t\t\tthis.reviews = new ProjectReviewsCollection();\n\t\t}\n\n\t\t/**\n\t\t * @memberof module:asset/models/currentAsset\n\t\t * @alias usage\n\t\t * @type {module:asset/collections/assetUsage}\n\t\t */\n\t\tthis.usage = new AssetUsageCollection([]);\n\n\t\t/**\n\t\t * @memberof module:asset/models/currentAsset\n\t\t * @alias versions\n\t\t * @type {module:asset/collections/assetVersions}\n\t\t */\n\t\tthis.versions = new AssetVersionsCollection([]);\n\n\t\t/**\n\t\t * @memberof module:asset/models/currentAsset\n\t\t * @alias views\n\t\t * @type {module:asset/collections/assetViews}\n\t\t */\n\t\tthis.views = new AssetViewsCollection([]);\n\n\t\t// Hey, listen!\n\t\tthis\n\t\t\t// Once attribute datum is saved - update our bean as well\n\t\t\t.listenTo(\n\t\t\t\tthis.assetAttributeDatum,\n\t\t\t\t'complete',\n\t\t\t\t(collection, data, opts) => {\n\t\t\t\t\tcollection.length &&\n\t\t\t\t\t\tcollection.at(0).attributeDatum.each((attrData) => {\n\t\t\t\t\t\t\tthis.setAttribute(attrData.id, attrData.getValue());\n\t\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t)\n\t\t\t// We keep a currently-selected view as a property of the assetViews collection;\n\t\t\t// whenever views are synced, check that is still legit; otherwise clear it.\n\t\t\t.listenTo(this.views, 'sync', (views) => {\n\t\t\t\tif (views !== this.views || !views.selectedView) return;\n\n\t\t\t\tconst selectedViewId = views.selectedView.get('viewid');\n\t\t\t\tif (!views.find((model) => model.get('viewId') == selectedViewId)) {\n\t\t\t\t\tviews.selectedView = undefined;\n\t\t\t\t}\n\t\t\t})\n\t\t\t// A bulk attribute edit on the cart occurred\n\t\t\t.listenTo(dispatcher, 'asset:attributes:bulk:edit:succeeded', (data) => {\n\t\t\t\tif (!this.get('inCurrentCart')) return;\n\n\t\t\t\tthis.fetch({duplicateQueryPolicy: 'merge'});\n\t\t\t})\n\t\t\t// Version actions rely heavily on the current asset\n\t\t\t// need to address in our actions refactor\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'asset:checkout:success asset:checkout:cancel:success',\n\t\t\t\t(asset) => {\n\t\t\t\t\tif (asset.id !== this.id) return;\n\t\t\t\t\tthis.fetch({duplicateQueryPolicy: 'abort'});\n\n\t\t\t\t\tif (!this.versions.syncedOnce) return;\n\t\t\t\t\tthis.fetchVersions();\n\t\t\t\t},\n\t\t\t)\n\t\t\t.listenTo(dispatcher, 'asset:editor:edited', (assetId) => {\n\t\t\t\tif (this.id !== assetId) return;\n\t\t\t\tthis.fetch();\n\t\t\t})\n\t\t\t.listenTo(this, 'sync', () => {\n\t\t\t\tif (!this.versions.syncedOnce) return;\n\t\t\t\tthis.fetchVersions();\n\t\t\t})\n\t\t\t// Sine we get attributes permissions from the server, we must refetch attributes\n\t\t\t// when the readOnly state changes\n\t\t\t.listenTo(this, 'change:readOnly', () => {\n\t\t\t\t// TODO: we need to refetch in the context when the asset changes to readOnly\n\t\t\t\tif (!this.assetAttributeDatum.syncedOnce) return;\n\t\t\t\t// this.fetchAttributes();\n\t\t\t})\n\t\t\t// New constituent chosen\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'asset:constituent:choose:succeeded',\n\t\t\t\t(constituent, assetId) => {\n\t\t\t\t\tif (constituent.get('assetId') != this.id) return;\n\t\t\t\t\t// HACK around DAM-2347: the asset isn't getting updated fast enough to be useful (Solr delays?),\n\t\t\t\t\t// so fake a new timestamp instead.\n\t\t\t\t\tthis.fetch({duplicateQueryPolicy: 'merge'}).then(() => {\n\t\t\t\t\t\tthis.set('moddate', _.dateToAsset(new Date()));\n\t\t\t\t\t\t// refresh the preview image\n\t\t\t\t\t\tthis.trigger('previewChanged', this);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t)\n\t\t\t// Assets were resynced\n\t\t\t.listenTo(dispatcher, 'asset:next:resynced', (assetId) => {\n\t\t\t\tif (this.id !== assetId) return;\n\n\t\t\t\tthis.fetch({duplicateQueryPolicy: 'abort'});\n\t\t\t})\n\t\t\t// Tasks have completed on an asset\n\t\t\t.listenTo(dispatcher, 'asset:task:complete', (task) => {\n\t\t\t\tif (this.id !== task.id) return;\n\n\t\t\t\tthis.fetch({duplicateQueryPolicy: 'merge'});\n\t\t\t})\n\t\t\t// Permissions updated\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'permissions:asset:delete:success permissions:asset:edit:success',\n\t\t\t\tthis.permissionUpdated,\n\t\t\t)\n\t\t\t// Permissions updated\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'permissions:asset:delete:success permissions:asset:edit:success',\n\t\t\t\tthis.permissionUpdated,\n\t\t\t)\n\t\t\t// When we reactive an existing version\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'asset:versions:reactivate:success',\n\t\t\t\t(newVersion) => {\n\t\t\t\t\tconst oldVersion = this.versions.find(\n\t\t\t\t\t\t(version) =>\n\t\t\t\t\t\t\tversion.id !== newVersion.id && version.get('original') === 1,\n\t\t\t\t\t);\n\t\t\t\t\toldVersion && oldVersion.set('original', 0);\n\t\t\t\t\tnewVersion.set({original: 1});\n\t\t\t\t},\n\t\t\t)\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'cart:delink:succeeded cart:link:succeeded',\n\t\t\t\t(cart, assetIds) => {\n\t\t\t\t\tif (!assetIds.includes(this.id)) return;\n\t\t\t\t\tthis.fetch({duplicateQueryPolicy: 'abort'});\n\t\t\t\t},\n\t\t\t)\n\t\t\t// Asset progress reimporting\n\t\t\t.listenTo(dispatcher, 'upload:reimport:progress', (progressOb) => {\n\t\t\t\tif (progressOb.assetId === this.id) {\n\t\t\t\t\tthis.progress.set(progressOb);\n\t\t\t\t}\n\t\t\t})\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'upload:asset:reimport:error',\n\t\t\t\t(err, uploadModel, asset) => {\n\t\t\t\t\tif (asset?.id === this.id) {\n\t\t\t\t\t\tthis.progress.reset();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t)\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'asset:category:moved',\n\t\t\t\t(assetId, fromCatId, toCatId) => {\n\t\t\t\t\tif (assetId !== this.id) return;\n\t\t\t\t\tthis.fetch({duplicateQueryPolicy: 'abort'}).then(() => {\n\t\t\t\t\t\tthis.fetchCategories();\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t)\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t`asset:expiration:expire:success asset:expiration:unexpire:success`,\n\t\t\t\t(assetId, time) => {\n\t\t\t\t\tif (assetId !== this.id) return;\n\t\t\t\t\tthis.set('expirationDate', time);\n\t\t\t\t},\n\t\t\t)\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t'asset:checkin:success asset:checkout:success',\n\t\t\t\t(assetId, catId) => {\n\t\t\t\t\tif (assetId !== this.id) return;\n\t\t\t\t\tthis.fetchCategories();\n\t\t\t\t},\n\t\t\t)\n\t\t\t.listenTo(\n\t\t\t\tdispatcher,\n\t\t\t\t`asset:lock:success asset:unlock:success`,\n\t\t\t\t(asset, time) => {\n\t\t\t\t\tif (asset.id !== this.id) return;\n\t\t\t\t\tthis.fetch({duplicateQueryPolicy: 'abort'});\n\t\t\t\t},\n\t\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tfetchAttributeHistory(opts) {\n\t\tconst attributeHistory = this.attributeHistory;\n\n\t\tif (!attributeHistory) return;\n\n\t\tattributeHistory.assetId = this.id;\n\t\treturn attributeHistory.fetch(\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\tduplicateQueryPolicy: 'abort',\n\t\t\t\t\treset: true,\n\t\t\t\t},\n\t\t\t\topts,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tfetchCategories(opts) {\n\t\tconst categories = this.categories;\n\n\t\tconst newCatArr = this.get('categories');\n\t\tconst oldCatArr = categories.pluck(categories.model.prototype.idAttribute);\n\n\t\tif (\n\t\t\tcategories.assetId === this.id &&\n\t\t\t// See note in categories collection about the property `ids`\n\t\t\t!_.difference(newCatArr, oldCatArr).length &&\n\t\t\t// the above works for remove, below works for adding\n\t\t\t!_.difference(oldCatArr, newCatArr).length\n\t\t) {\n\t\t\treturn new $.Deferred().resolveWith(categories);\n\t\t}\n\n\t\tcategories.assetId = this.id;\n\t\treturn categories.getCategoriesById(\n\t\t\tthis.get('categories'),\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\tasset: this,\n\t\t\t\t\treset: true,\n\t\t\t\t},\n\t\t\t\topts,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tfetchIndices(opts) {\n\t\tconst indices = this.indices;\n\n\t\tindices.assetId = this.id;\n\t\treturn indices.fetch(\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\tduplicateQueryPolicy: 'abort',\n\t\t\t\t\treset: true,\n\t\t\t\t},\n\t\t\t\topts,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tfetchLinks(opts) {\n\t\tconst links = this.links;\n\n\t\tif (this.get('relatedAvailable') !== true) {\n\t\t\tlinks.reset();\n\t\t\treturn new $.Deferred().resolveWith(links);\n\t\t}\n\n\t\tif (links.selection.at(0).get('elementValue1') !== this.id) {\n\t\t\t// Reset current page\n\t\t\tlinks.curPage = 1;\n\t\t\t// linked assets are obtained with a selection/search parameter:\n\t\t\tlinks.selection.set([\n\t\t\t\t{\n\t\t\t\t\telementValue1: this.id, // find assets linked to this one.\n\t\t\t\t\telementType: 11, // search type == \"linked assets\"\n\t\t\t\t},\n\t\t\t]);\n\n\t\t\treturn links.fetch(\n\t\t\t\t_.extend(\n\t\t\t\t\t{\n\t\t\t\t\t\tduplicateQueryPolicy: 'abort',\n\t\t\t\t\t\treset: true,\n\t\t\t\t\t},\n\t\t\t\t\topts,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tfetchMetadata(opts) {\n\t\tconst metadata = this.metadata;\n\n\t\tif (this.get('xmpPacketStatus') !== AssetXMPPacketStatus.STORED) {\n\t\t\tmetadata.trigger('sync', metadata);\n\t\t\treturn Promise.resolve(metadata);\n\t\t}\n\n\t\tmetadata.assetId = this.id;\n\t\treturn metadata.fetch(\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\tduplicateQueryPolicy: 'abort',\n\t\t\t\t\treset: true,\n\t\t\t\t},\n\t\t\t\topts,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tfetchPermissions(opts) {\n\t\treturn this.permissions.fetch(\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\tduplicateQueryPolicy: 'abort',\n\t\t\t\t\treset: true,\n\t\t\t\t},\n\t\t\t\topts,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tfetchProjects(opts) {\n\t\tconst projects = this.projects;\n\t\tif (!projects) return;\n\n\t\treturn projects.getProjectsForAsset(\n\t\t\tthis.id,\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\tduplicateQueryPolicy: 'abort',\n\t\t\t\t\treset: true,\n\t\t\t\t},\n\t\t\t\topts,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tfetchReviews(opts) {\n\t\tconst reviews = this.reviews;\n\t\tif (!reviews) return;\n\n\t\treturn reviews.getReviewsForAsset(\n\t\t\tthis.id,\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\tduplicateQueryPolicy: 'abort',\n\t\t\t\t\treset: true,\n\t\t\t\t},\n\t\t\t\topts,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tfetchUsage(opts) {\n\t\tconst usage = this.usage;\n\n\t\tusage.assetId = this.id;\n\t\treturn usage.fetch(\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\tduplicateQueryPolicy: 'abort',\n\t\t\t\t\treset: true,\n\t\t\t\t},\n\t\t\t\topts,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tfetchVersions(opts) {\n\t\tconst versions = this.versions;\n\n\t\tif (!this.get('versionIds').length) {\n\t\t\tversions.reset();\n\t\t\treturn new $.Deferred().resolveWith(versions);\n\t\t}\n\n\t\tversions.assetId = this.id;\n\t\treturn versions.fetch(\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\tduplicateQueryPolicy: 'abort',\n\t\t\t\t\treset: true,\n\t\t\t\t},\n\t\t\t\topts,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {object} opts Request options\n\t */\n\tfetchViews(opts) {\n\t\tconst views = this.views;\n\t\tconst viewsCount = this.get('viewIds').length;\n\n\t\t// We used to check the length of views on the asset and if it was zero we did not bother fetching\n\t\t// which is great - except, there is no aborting any previous request that may still be lingering\n\t\t// I think the benefit of fetching irregardless of the size outweighs the cost the uneccessary fetch\n\t\tif (views.assetId === this.id && views.length === viewsCount) {\n\t\t\treturn new $.Deferred().resolveWith(views);\n\t\t}\n\n\t\tviews.assetId = this.id;\n\t\treturn views.fetch(\n\t\t\t_.extend(\n\t\t\t\t{\n\t\t\t\t\tduplicateQueryPolicy: 'abort',\n\t\t\t\t\treset: true,\n\t\t\t\t},\n\t\t\t\topts,\n\t\t\t),\n\t\t);\n\t}\n\n\t/**\n\t * @method\n\t * @param {module:permissions/models/permission} permission Permission\n\t */\n\tpermissionUpdated(permission) {\n\t\tif (permission.get('targetId') !== this.id) return;\n\t\tthis.fetchPermissions();\n\t}\n\n\t/**\n\t * @method\n\t */\n\treset() {\n\t\treturn this.set({assetId: 0});\n\t}\n\n\t/** @type {string} */\n\tstatic get __name__() {\n\t\treturn 'CurrentAsset';\n\t}\n}\n","import AssetModel from '../../models/asset';\nimport CurrentAssetModel from '../../models/currentAsset';\nimport {assetAttributes} from '@netx/core-attribute/singletons/attributeTemplates';\nimport {assetCursor} from './assetCursor';\n\nexport const currentAsset = new CurrentAssetModel({}, {assetAttributes});\n\nexport default currentAsset;\n\n// The asset loaded by the #asset/id route and reflected by assetDetailView\n// Note: this will be the extra responder you always see when running 'asset:testing'\n//NS.current = new CurrentAssetModel(null, {assetAttributes: NS.attributes});\n// Because so much listens to this - a destroy on it is catastrophic\ncurrentAsset.destroy = function () {\n\tconst asset = new AssetModel({assetId: this.id});\n\treturn asset.destroy().then(() => {\n\t\tassetCursor.remove(this.id);\n\t\tthis.trigger('deleted');\n\t});\n};\n\nimport {setGlobal} from '@netx/core-next/utils/setGlobal';\n// circular dependency\n// if (process.env.NODE_ENV !== 'production') {\nsetGlobal({currentAsset});\n//}\n","export enum DispatchAction {\n\tADJUST_VOLUME = 'ADJUST_VOLUME',\n\tINIT = 'INIT',\n\tPAUSE = 'PAUSE',\n\tPLAY = 'PLAY',\n\tREDRAW = 'REDRAW',\n\tSEEK_TO = 'SEEK_TO',\n\tSET_CURRENT_TIME = 'SET_CURRENT_TIME',\n\tSET_ERROR = 'SET_ERROR',\n\tSET_FOCUSED = 'SET_FOCUSED',\n\tSET_LOAD_PROGRESS = 'SET_LOAD_PROGRESS',\n\tSET_READY = 'SET_READY',\n\tSET_REQUESTED_TIME = 'SET_REQUESTED_TIME',\n\tSET_VOLUME = 'SET_VOLUME',\n\tSKIP_TO = 'SKIP_TO',\n\tTOGGLE_PLAY_PAUSE = 'TOGGLE_PLAY_PAUSE',\n}\n","import React from 'react';\n\nimport {DispatchAction} from './constants';\nimport {State} from './reducer';\n\nexport type Action =\n\t| {type: DispatchAction.ADJUST_VOLUME; amount: number}\n\t| {type: DispatchAction.INIT; options: State['options']}\n\t| {type: DispatchAction.PLAY}\n\t| {type: DispatchAction.PAUSE}\n\t| {type: DispatchAction.REDRAW}\n\t| {type: DispatchAction.SEEK_TO; progress: number}\n\t| {type: DispatchAction.SET_CURRENT_TIME; currentTime: State['currentTime']}\n\t| {type: DispatchAction.SET_ERROR; error: State['error']}\n\t| {type: DispatchAction.SET_FOCUSED; focused: State['focused']}\n\t| {\n\t\t\ttype: DispatchAction.SET_LOAD_PROGRESS;\n\t\t\tloadProgress: State['loadProgress'];\n\t }\n\t| {type: DispatchAction.SET_READY; ready: State['ready']}\n\t| {\n\t\t\ttype: DispatchAction.SET_REQUESTED_TIME;\n\t\t\trequestedCurrentTime: State['requestedCurrentTime'];\n\t }\n\t| {type: DispatchAction.SET_VOLUME; volume: State['volume']}\n\t| {type: DispatchAction.SKIP_TO; amount: number}\n\t| {type: DispatchAction.TOGGLE_PLAY_PAUSE};\n\nexport const Actions = (dispatch: React.Dispatch) => ({\n\t/**\n\t * adjust volume up/down\n\t * @param amount Amount to increase volume (-/+)\n\t */\n\tadjustVolume: (amount: number) =>\n\t\tdispatch({type: DispatchAction.ADJUST_VOLUME, amount}),\n\t/**\n\t * initialize the player\n\t * @param options Player options\n\t */\n\tinit: (options: State['options']) =>\n\t\tdispatch({type: DispatchAction.INIT, options}),\n\t/** play */\n\tplay: () => dispatch({type: DispatchAction.PLAY}),\n\t/** pause */\n\tpause: () => dispatch({type: DispatchAction.PAUSE}),\n\t/** toggle play/pause */\n\tplayPause: () => dispatch({type: DispatchAction.TOGGLE_PLAY_PAUSE}),\n\t/** redraw waveform */\n\tredraw: () => dispatch({type: DispatchAction.REDRAW}),\n\t/**\n\t * seek to point\n\t * @param progress Percentage of total duration (0-1)\n\t */\n\tseekTo: (progress: number) =>\n\t\tdispatch({type: DispatchAction.SEEK_TO, progress}),\n\t/**\n\t * skip forward/backward\n\t * @param amount Amount to skip (-/+)\n\t */\n\tskipTo: (amount: number) => dispatch({type: DispatchAction.SKIP_TO, amount}),\n\t/**\n\t * set current time\n\t * @param currentTime Current time\n\t */\n\tsetCurrentTime: (currentTime: number) =>\n\t\tdispatch({\n\t\t\ttype: DispatchAction.SET_REQUESTED_TIME,\n\t\t\trequestedCurrentTime: currentTime,\n\t\t}),\n\t/**\n\t * set whether the wave area is focused and should recieve keyboard inputs\n\t * @param focused Wave area is focused\n\t */\n\tsetFocused: (focused: boolean) =>\n\t\tdispatch({type: DispatchAction.SET_FOCUSED, focused}),\n\t/**\n\t * set volume\n\t * @param volume Volume percentage (0-1)\n\t */\n\tsetVolume: (volume: number) =>\n\t\tdispatch({type: DispatchAction.SET_VOLUME, volume}),\n});\n\nexport default Actions;\n","import {Theme} from '@netx/core-components/Theme';\n\n// inverse to background\nexport const getCursorColor = ({palette}: Theme) => palette.text.primary;\n\nconst getPercentageInBounds = (percentage: number) =>\n\tMath.min(Math.max(percentage, 0), 1);\n\nexport const getProgressColor = ({palette}: Theme) => palette.primary.main;\n\nexport const getSeekInBounds = (seek: number) => getPercentageInBounds(seek);\n\nexport const getTimeInBounds = (currentTime: number, duration: number) =>\n\tMath.max(Math.min(currentTime, duration), 0);\n\nexport const getVolumeInBounds = (volume: number) =>\n\tgetPercentageInBounds(volume);\n\nexport const getWaveColor = ({palette}: Theme) => palette.text.secondary;\n\n// The duration the server reports and the duration wavesurfer gathers\n// differ by fractions of a decimal\nexport const reachedEnd = (currentTime: number, duration: number) =>\n\tcurrentTime.toFixed(2) === duration.toFixed(2);\n\nexport const shouldPlayFromBeginning = (\n\tcurrentTime: number,\n\tduration: number,\n) => reachedEnd(currentTime, duration);\n","import type {WaveSurferParams} from 'wavesurfer.js';\nimport type {Action} from './actions';\nimport {DispatchAction} from './constants';\nimport {\n\tgetTimeInBounds,\n\tgetVolumeInBounds,\n\treachedEnd,\n\tshouldPlayFromBeginning,\n} from './utils';\n\nexport type State = {\n\t/** to signal a flush and redraw of the waveform is needed */\n\tforceRedraw: number;\n\t/** current time in audio (seconds) */\n\tcurrentTime: number;\n\t/** duration of audio (seconds) */\n\tduration: number;\n\terror: string | null;\n\t/** waveform focused */\n\tfocused: boolean;\n\t/** audio load progress */\n\tloadProgress: number;\n\t/** audio is playing */\n\tplaying: boolean;\n\t/** signal that the player is ready for init */\n\tready: boolean;\n\t/** reached end of audio playback */\n\treachedEnd: boolean;\n\t/** for when we want to change the current time outside of wavesurfer actions - tick up */\n\trequestedCurrentTime?: number;\n\t/** audi0 volume (0.0 - 1.0) */\n\tvolume: number;\n\t/** wavesirfer options */\n\toptions: Partial<\n\t\tOmit<\n\t\t\tWaveSurferParams,\n\t\t\t| 'backend'\n\t\t\t| 'closeAudioContext'\n\t\t\t| 'container'\n\t\t\t| 'cursorColor'\n\t\t\t| 'duration'\n\t\t\t| 'normalize'\n\t\t\t| 'progressColor'\n\t\t\t| 'renderer'\n\t\t\t| 'xhr'\n\t\t>\n\t> & {\n\t\t/** path to audio file */\n\t\taudioPath: string;\n\t\t/** should autoplay at mount/init */\n\t\tautoPlay?: boolean;\n\t\t/** audio title */\n\t\ttitle?: string;\n\t\t/** audio duration */\n\t\tduration: number;\n\t\t/** thumbnail src */\n\t\tthumb?: string;\n\t\t/** path to wavform json file */\n\t\twaveformPath: string;\n\t};\n};\n\nexport const initialState: State = {\n\t/** updated from wavesurfer */\n\tcurrentTime: 0,\n\tduration: 0,\n\terror: null,\n\tfocused: false,\n\tforceRedraw: 0,\n\tloadProgress: 0,\n\toptions: {\n\t\tautoPlay: false,\n\t\taudioPath: '',\n\t\tbarWidth: 4,\n\t\tduration: 0,\n\t\tminPxPerSec: 0.5,\n\t\twaveformPath: '',\n\t\ttitle: undefined,\n\t\tthumb: undefined,\n\t},\n\tplaying: false,\n\tready: false,\n\treachedEnd: false,\n\t/** When we want to change the current time outside of wavesurfer actions */\n\trequestedCurrentTime: 0,\n\tvolume: 0.8,\n};\n\nconst reducer = (state: State, action: Action): State => {\n\tswitch (action.type) {\n\t\tcase DispatchAction.ADJUST_VOLUME:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tvolume: getVolumeInBounds(state.volume + action.amount),\n\t\t\t};\n\t\tcase DispatchAction.INIT: {\n\t\t\tconst {duration, ...options} = action.options;\n\t\t\tconst sourcesChanged =\n\t\t\t\toptions.audioPath !== state.options.audioPath ||\n\t\t\t\toptions.waveformPath !== state.options.waveformPath;\n\t\t\tconst durationChanged = duration !== state.duration;\n\t\t\treturn durationChanged || sourcesChanged\n\t\t\t\t? {\n\t\t\t\t\t\t...initialState,\n\t\t\t\t\t\tduration: duration,\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t...state.options,\n\t\t\t\t\t\t\t...options,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tvolume: state.volume,\n\t\t\t\t }\n\t\t\t\t: {\n\t\t\t\t\t\t...state,\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t...state.options,\n\t\t\t\t\t\t\t...options,\n\t\t\t\t\t\t},\n\t\t\t\t };\n\t\t}\n\t\tcase DispatchAction.PAUSE:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tplaying: false,\n\t\t\t};\n\t\tcase DispatchAction.PLAY: {\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tplaying: true,\n\t\t\t\trequestedCurrentTime: shouldPlayFromBeginning(\n\t\t\t\t\tstate.currentTime,\n\t\t\t\t\tstate.duration,\n\t\t\t\t)\n\t\t\t\t\t? 0\n\t\t\t\t\t: state.currentTime,\n\t\t\t};\n\t\t}\n\t\tcase DispatchAction.REDRAW:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tforceRedraw: state.ready ? state.forceRedraw + 1 : state.forceRedraw,\n\t\t\t};\n\t\tcase DispatchAction.SEEK_TO: {\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\trequestedCurrentTime: getTimeInBounds(\n\t\t\t\t\tstate.duration * action.progress,\n\t\t\t\t\tstate.duration,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\tcase DispatchAction.SET_ERROR:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\terror: action.error,\n\t\t\t};\n\t\tcase DispatchAction.SET_CURRENT_TIME: {\n\t\t\tconst currentTime = getTimeInBounds(action.currentTime, state.duration);\n\t\t\tconst _reachedEnd = reachedEnd(currentTime, state.duration);\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tcurrentTime,\n\t\t\t\tplaying: state.playing && !_reachedEnd,\n\t\t\t\treachedEnd: _reachedEnd,\n\t\t\t\t// Reset the requested current time\n\t\t\t\trequestedCurrentTime: undefined,\n\t\t\t};\n\t\t}\n\t\tcase DispatchAction.SET_FOCUSED:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tfocused: action.focused,\n\t\t\t};\n\t\tcase DispatchAction.SET_LOAD_PROGRESS:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tloadProgress: action.loadProgress,\n\t\t\t};\n\t\tcase DispatchAction.SET_READY:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tready: action.ready,\n\t\t\t};\n\t\tcase DispatchAction.SET_REQUESTED_TIME:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\trequestedCurrentTime:\n\t\t\t\t\taction.requestedCurrentTime != null\n\t\t\t\t\t\t? getTimeInBounds(action.requestedCurrentTime, state.duration)\n\t\t\t\t\t\t: undefined,\n\t\t\t};\n\t\tcase DispatchAction.SET_VOLUME:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tvolume: action.volume,\n\t\t\t};\n\t\tcase DispatchAction.SKIP_TO: {\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\trequestedCurrentTime: getTimeInBounds(\n\t\t\t\t\tstate.currentTime + action.amount,\n\t\t\t\t\tstate.duration,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\tcase DispatchAction.TOGGLE_PLAY_PAUSE:\n\t\t\treturn {\n\t\t\t\t...state,\n\t\t\t\tplaying: !state.playing,\n\t\t\t\trequestedCurrentTime:\n\t\t\t\t\t!state.playing &&\n\t\t\t\t\tshouldPlayFromBeginning(state.currentTime, state.duration)\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: state.currentTime,\n\t\t\t};\n\t}\n};\n\nexport default reducer;\n","import {\n\tuseEffect,\n\tuseLayoutEffect,\n\tuseMemo,\n\tuseReducer,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport WaveSurfer from 'wavesurfer.js';\n// @ts-ignore\nimport MediaSession from 'wavesurfer.js/dist/plugin/wavesurfer.mediasession';\nimport {useTheme} from '@netx/core-components/Theme';\nimport {useComponentIsMounted} from '@netx/core-components/hooks';\nimport actions from './actions';\nimport {DispatchAction} from './constants';\nimport reducer, {initialState, State} from './reducer';\nimport {\n\tgetCursorColor,\n\tgetProgressColor,\n\tgetSeekInBounds,\n\tgetWaveColor,\n} from './utils';\n\nexport interface UseWavesurferParams {\n\toptions?: State['options'];\n}\n\ntype MediaSessionState = {\n\tmetadata?: MediaMetadata;\n\tplaybackState?: MediaSessionPlaybackState;\n\tpositionState?: MediaPositionState;\n};\n\n/**\n * For browser that support MediaSession\n * This allows for providing the current state of the audio to the browser and\n * any contexts it may provide to the user's os\n * We are utilizing a wavesurfer plugin to do this for us as well - but there\n * are times when we need to update the state as well (or in cases where it is\n * failing to do so for us)\n */\nconst updateMediaSession = ({\n\tmetadata,\n\tplaybackState,\n\tpositionState,\n}: MediaSessionState) => {\n\tif ('mediaSession' in navigator) {\n\t\tif (positionState && 'setPositionState' in navigator.mediaSession)\n\t\t\tnavigator.mediaSession.setPositionState(positionState);\n\n\t\tif (metadata && 'metadata' in navigator.mediaSession)\n\t\t\tnavigator.mediaSession.metadata = {\n\t\t\t\t...navigator.mediaSession.metadata,\n\t\t\t\t...metadata,\n\t\t\t};\n\n\t\tif (playbackState && 'playbackState' in navigator.mediaSession)\n\t\t\tnavigator.mediaSession.playbackState = playbackState;\n\t}\n};\n\n/**\n * Wrapper around the wavesurfer.js library for use as a React hook\n */\nexport const useWavesurfer = ({options}: UseWavesurferParams = {}) => {\n\tconst theme = useTheme();\n\tconst [useFallback, setUseFallback] = useState(false);\n\n\tconst {act} = useComponentIsMounted();\n\n\tconst [state, dispatch] = useReducer(reducer, {\n\t\t...initialState,\n\t\toptions: {\n\t\t\t...initialState.options,\n\t\t\t...options,\n\t\t},\n\t});\n\t// The reducer actions to expose to outside components\n\tconst dispatchActions = useMemo(() => actions(dispatch), []);\n\n\tconst wavesurferRef = useRef();\n\tconst waveformRef = useRef(null);\n\n\t// TODO: handle indiviudal wavesurfer options (that are not involved in the init process)\n\t// by listening to their `state.option.