UNPKG

679 kBSource Map (JSON)View Raw
1{"version":3,"file":"farris-ide-devkit.js.map","sources":["ng://@farris/ide-devkit/lib/components/alert/alert.config.ts","ng://@farris/ide-devkit/lib/components/utils/decorators.ts","ng://@farris/ide-devkit/lib/components/alert/alert.component.ts","ng://@farris/ide-devkit/lib/components/alert/alert.module.ts","ng://@farris/ide-devkit/lib/components/tooltip/tooltip.config.ts","ng://@farris/ide-devkit/lib/components/utils/facade/browser.ts","ng://@farris/ide-devkit/lib/components/utils/theme-provider.ts","ng://@farris/ide-devkit/lib/components/tooltip/tooltip-container.component.ts","ng://@farris/ide-devkit/lib/components/utils/trigger.class.ts","ng://@farris/ide-devkit/lib/components/utils/triggers.ts","ng://@farris/ide-devkit/lib/components/utils/component-loader/content-ref.class.ts","ng://@farris/ide-devkit/lib/components/utils/component-loader/component-loader.class.ts","ng://@farris/ide-devkit/lib/components/utils/positioning/ng-positioning.ts","ng://@farris/ide-devkit/lib/components/utils/positioning/positioning.service.ts","ng://@farris/ide-devkit/lib/components/utils/component-loader/component-loader.factory.ts","ng://@farris/ide-devkit/lib/components/utils/warn-once.ts","ng://@farris/ide-devkit/lib/components/tooltip/tooltip.directive.ts","ng://@farris/ide-devkit/lib/components/tooltip/tooltip.module.ts","ng://@farris/ide-devkit/lib/components/modal/bs-modal-ref.service.ts","ng://@farris/ide-devkit/lib/components/modal/modal-backdrop.options.ts","ng://@farris/ide-devkit/lib/components/modal/modal-options.class.ts","ng://@farris/ide-devkit/lib/components/modal/modal-container.component.ts","ng://@farris/ide-devkit/lib/components/utils/utils.class.ts","ng://@farris/ide-devkit/lib/components/modal/modal-backdrop.component.ts","ng://@farris/ide-devkit/lib/components/modal/modal.directive.ts","ng://@farris/ide-devkit/lib/components/modal/bs-modal.service.ts","ng://@farris/ide-devkit/lib/components/modal/modal.module.ts","ng://@farris/ide-devkit/lib/components/navbar/navbar.state.ts","ng://@farris/ide-devkit/lib/components/dropdown/dropdown.config.ts","ng://@farris/ide-devkit/lib/components/dropdown/dropdown.state.ts","ng://@farris/ide-devkit/lib/components/utils/ng2-bootstrap-config.ts","ng://@farris/ide-devkit/lib/components/dropdown/dropdown-container.component.ts","ng://@farris/ide-devkit/lib/components/dropdown/dropdown.directive.ts","ng://@farris/ide-devkit/lib/components/dropdown/dropdown-menu.directive.ts","ng://@farris/ide-devkit/lib/components/dropdown/dropdown-toggle.directive.ts","ng://@farris/ide-devkit/lib/components/dropdown/dropdown-button.directive.ts","ng://@farris/ide-devkit/lib/components/dropdown/dropdown-item.directive.ts","ng://@farris/ide-devkit/lib/components/dropdown/dropdown.module.ts","ng://@farris/ide-devkit/lib/components/navbar/navbar.directive.ts","ng://@farris/ide-devkit/lib/components/navbar/navbar.module.ts","ng://@farris/ide-devkit/lib/components/ng2tree-common/constants/events.ts","ng://@farris/ide-devkit/lib/components/ng2tree-common/models/tree-node.ts","ng://@farris/ide-devkit/lib/components/ng2tree-common/models/tree-options.ts","ng://@farris/ide-devkit/lib/components/ng2tree-common/models/tree-model.ts","ng://@farris/ide-devkit/lib/components/ng2tree-common/constants/keys.ts","ng://@farris/ide-devkit/lib/components/ng2tree-common/components/tree/tree.component.ts","ng://@farris/ide-devkit/lib/components/ng2tree-common/directives/tree-node-content.directive.ts","ng://@farris/ide-devkit/lib/components/ng2tree-common/models/tree-node-content-item.ts","ng://@farris/ide-devkit/lib/components/ng2tree-common/components/tree-node-content/tree-node-content.component.ts","ng://@farris/ide-devkit/lib/components/ng2tree-common/components/tree-node/tree-node.component.ts","ng://@farris/ide-devkit/lib/components/ng2tree-common/components/tree-node-drop-slot/tree-node-drop-slot.component.ts","ng://@farris/ide-devkit/lib/components/ng2tree-common/tree.module.ts","ng://@farris/ide-devkit/lib/components/angular-editor/model/config.ts","ng://@farris/ide-devkit/lib/components/angular-editor/constant/events.ts","ng://@farris/ide-devkit/lib/components/angular-editor/service/code-editor.event.service.ts","ng://@farris/ide-devkit/lib/components/angular-editor/model/base-monaco-editor.ts","ng://@farris/ide-devkit/lib/components/angular-editor/service/angular-monaco-editor.service.ts","ng://@farris/ide-devkit/lib/components/angular-editor/angular-monaco-editor/angular-monaco-editor.component.ts","ng://@farris/ide-devkit/lib/components/angular-editor/editor.module.ts","ng://@farris/ide-devkit/lib/components/ng2-right-click-menu/sh-context-menu-item.directive.ts","ng://@farris/ide-devkit/lib/components/ng2-right-click-menu/sh-context-menu.service.ts","ng://@farris/ide-devkit/lib/components/ng2-right-click-menu/sh-context-menu.component.ts","ng://@farris/ide-devkit/lib/components/ng2-right-click-menu/sh-attach-menu.directive.ts","ng://@farris/ide-devkit/lib/components/ng2-right-click-menu/sh-context-menu.module.ts","ng://@farris/ide-devkit/lib/components/wizard/component/wizard.component.ts","ng://@farris/ide-devkit/lib/components/wizard/wizard.module.ts","ng://@farris/ide-devkit/lib/components/popover/popover.config.ts","ng://@farris/ide-devkit/lib/components/popover/popover-container.component.ts","ng://@farris/ide-devkit/lib/components/popover/popover.directive.ts","ng://@farris/ide-devkit/lib/components/popover/popover.module.ts","ng://@farris/ide-devkit/lib/components/property-panel/entity/property-entity.ts","ng://@farris/ide-devkit/lib/components/property-panel/components/property-item/property-item.component.ts","ng://@farris/ide-devkit/lib/components/property-panel/components/property-item-list/property-item-list.component.ts","ng://@farris/ide-devkit/lib/components/property-panel/components/property-panel/property-panel.component.ts","ng://@farris/ide-devkit/lib/components/property-panel/property-panel.module.ts","ng://@farris/ide-devkit/lib/components/tabset/tabset-config.ts","ng://@farris/ide-devkit/lib/components/tabset/tabset.ts","ng://@farris/ide-devkit/lib/components/tabset/tabset.module.ts","ng://@farris/ide-devkit/lib/components/navtab/navtab-config.ts","ng://@farris/ide-devkit/lib/components/navtab/navtab.ts","ng://@farris/ide-devkit/lib/components/navtab/navtab.module.ts","ng://@farris/ide-devkit/lib/components/utils/util.ts","ng://@farris/ide-devkit/lib/components/accordion/accordion-config.ts","ng://@farris/ide-devkit/lib/components/accordion/accordion.ts","ng://@farris/ide-devkit/lib/components/accordion/accordion.module.ts","ng://@farris/ide-devkit/lib/components/panel/sash.directive.ts","ng://@farris/ide-devkit/lib/components/panel/panel.module.ts","ng://@farris/ide-devkit/lib/components/modules.ts","ng://@farris/ide-devkit/lib/components/utils/linked-list.class.ts","ng://@farris/ide-devkit/lib/ideframework/eventbus/event-bus-proxy.ts","ng://@farris/ide-devkit/lib/ideframework/eventbus/event-pipe.ts","ng://@farris/ide-devkit/lib/ideframework/eventbus/event-bus.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/model.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/pane-axis.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/event-kit/disposable.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/event-kit/composite-disposable.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/event-kit/emitter.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/pane.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/item-registry.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/pane-container.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/dock.ts","ng://@farris/ide-devkit/lib/services/cache/services/storage/cache.storage.abstract.service.ts","ng://@farris/ide-devkit/lib/services/cache/services/storage/sessionstorage/cache.sessionstorage.service.ts","ng://@farris/ide-devkit/lib/services/cache/services/storage/localstorage/cache.localstorage.service.ts","ng://@farris/ide-devkit/lib/services/cache/services/storage/memory/cache.memory.service.ts","ng://@farris/ide-devkit/lib/services/cache/services/cache.service.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/command-registry.ts","ng://@farris/ide-devkit/lib/ideframework/util/util.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/view-registry.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/panel-container.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/panel.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/workspace-center.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/workspace.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/gsp-event-bus.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/ide/modal-frm.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/ide/ide.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/gsp.ts","ng://@farris/ide-devkit/lib/ideframework/gsp/ide/messager.ts","ng://@farris/ide-devkit/lib/ideframework/package/package-view.ts","ng://@farris/ide-devkit/lib/ideframework/package/package.ts","ng://@farris/ide-devkit/lib/ideframework/package/package-module.ts","ng://@farris/ide-devkit/lib/services/cache/cache.module.ts","ng://@farris/ide-devkit/lib/services/http/http.service.ts","ng://@farris/ide-devkit/lib/services/http/http.module.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class AlertConfig {\r\n /** default alert type */\r\n type = 'warning';\r\n\r\n /** is alerts are dismissible by default */\r\n dismissible = false;\r\n\r\n /** default time before alert will dismiss */\r\n dismissOnTimeout?: number = undefined;\r\n}\r\n","/*tslint:disable:no-invalid-this */\r\nexport function OnChange(): any {\r\n const sufix = 'Change';\r\n return function OnChangeHandler(target: any, propertyKey: string): void {\r\n const _key = ` __${propertyKey}Value`;\r\n Object.defineProperty(target, propertyKey, {\r\n get(): any { return this[_key]; },\r\n set(value: any): void {\r\n const prevValue = this[_key];\r\n this[_key] = value;\r\n if (prevValue !== value && this[propertyKey + sufix]) {\r\n this[propertyKey + sufix].emit(value);\r\n }\r\n }\r\n });\r\n };\r\n}\r\n/* tslint:enable */\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n OnInit,\r\n Output\r\n} from '@angular/core';\r\nimport { AlertConfig } from './alert.config';\r\nimport { OnChange } from '../utils/decorators';\r\n\r\n@Component({\r\n selector: 'alert,bs-alert',\r\n templateUrl: './alert.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AlertComponent implements OnInit {\r\n /** Alert type.\r\n * Provides one of four bootstrap supported contextual classes:\r\n * `success`, `info`, `warning` and `danger`\r\n */\r\n @Input() type = 'warning';\r\n /** If set, displays an inline \"Close\" button */\r\n @OnChange() @Input() dismissible = false;\r\n /** Number in milliseconds, after which alert will be closed */\r\n @Input() dismissOnTimeout: number | string;\r\n\r\n /** Is alert visible */\r\n @Input() isOpen = true;\r\n\r\n /** This event fires immediately after close instance method is called,\r\n * $event is an instance of Alert component.\r\n */\r\n @Output() onClose = new EventEmitter<AlertComponent>();\r\n /** This event fires when alert closed, $event is an instance of Alert component */\r\n @Output() onClosed = new EventEmitter<AlertComponent>();\r\n\r\n\r\n classes = '';\r\n dismissibleChange = new EventEmitter<boolean>();\r\n\r\n constructor(_config: AlertConfig, private changeDetection: ChangeDetectorRef) {\r\n Object.assign(this, _config);\r\n this.dismissibleChange.subscribe((dismissible: boolean) => {\r\n this.classes = this.dismissible ? 'alert-dismissible' : '';\r\n this.changeDetection.markForCheck();\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.dismissOnTimeout) {\r\n // if dismissOnTimeout used as attr without binding, it will be a string\r\n setTimeout(\r\n () => this.close(),\r\n parseInt(this.dismissOnTimeout as string, 10)\r\n );\r\n }\r\n }\r\n\r\n // todo: animation ` If the .fade and .in classes are present on the element,\r\n // the alert will fade out before it is removed`\r\n /**\r\n * Closes an alert by removing it from the DOM.\r\n */\r\n close(): void {\r\n if (!this.isOpen) {\r\n return;\r\n }\r\n\r\n this.onClose.emit(this);\r\n this.isOpen = false;\r\n this.changeDetection.markForCheck();\r\n this.onClosed.emit(this);\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { AlertComponent } from './alert.component';\r\nimport { AlertConfig } from './alert.config';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [AlertComponent],\r\n exports: [AlertComponent],\r\n entryComponents: [AlertComponent]\r\n})\r\nexport class AlertModule {\r\n static forRoot(): ModuleWithProviders {\r\n return { ngModule: AlertModule, providers: [AlertConfig] };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n/** Default values provider for tooltip */\r\n@Injectable()\r\nexport class TooltipConfig {\r\n /** tooltip placement, supported positions: 'top', 'bottom', 'left', 'right' */\r\n placement = 'top';\r\n /** array of event names which triggers tooltip opening */\r\n triggers = 'hover focus';\r\n /** a selector specifying the element the tooltip should be appended to. Currently only supports \"body\" */\r\n container: string;\r\n}\r\n","/*tslint:disable */\r\n/**\r\n * @license\r\n * Copyright Google Inc. All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n/**\r\n * JS version of browser APIs. This library can only run in the browser.\r\n */\r\nvar win = (typeof window !== 'undefined' && window) || <any>{};\r\n\r\nexport { win as window };\r\nexport var document = win.document;\r\nexport var location = win.location;\r\nexport var gc = win['gc'] ? () => win['gc']() : (): any => null;\r\nexport var performance = win['performance'] ? win['performance'] : null;\r\nexport const Event = win['Event'];\r\nexport const MouseEvent = win['MouseEvent'];\r\nexport const KeyboardEvent = win['KeyboardEvent'];\r\nexport const EventTarget = win['EventTarget'];\r\nexport const History = win['History'];\r\nexport const Location = win['Location'];\r\nexport const EventListener = win['EventListener'];\r\n","import { window } from './facade/browser';\r\n\r\nlet guessedVersion: 'bs3' | 'bs4';\r\n\r\nfunction _guessBsVersion(): 'bs3' | 'bs4' {\r\n if (typeof document === 'undefined') {\r\n return null;\r\n }\r\n const spanEl = document.createElement('span');\r\n spanEl.innerText = 'test bs version';\r\n document.body.appendChild(spanEl);\r\n spanEl.classList.add('d-none');\r\n const rect = spanEl.getBoundingClientRect();\r\n document.body.removeChild(spanEl);\r\n if (!rect) {\r\n return 'bs3';\r\n }\r\n\r\n return rect.top === 0 ? 'bs4' : 'bs3';\r\n}\r\n\r\nexport function setTheme(theme: 'bs3' | 'bs4'): void {\r\n guessedVersion = theme;\r\n}\r\n\r\n// todo: in ngx-bootstrap, bs4 will became a default one\r\nexport function isBs3(): boolean {\r\n if (typeof window === 'undefined') {\r\n return true;\r\n }\r\n\r\n if (typeof window.__theme === 'undefined') {\r\n if (guessedVersion) {\r\n return guessedVersion === 'bs3';\r\n }\r\n guessedVersion = _guessBsVersion();\r\n\r\n return guessedVersion === 'bs3';\r\n }\r\n\r\n return window.__theme !== 'bs4';\r\n}\r\n","import {\r\n AfterViewInit,\r\n Component,\r\n ChangeDetectionStrategy\r\n} from '@angular/core';\r\nimport { TooltipConfig } from './tooltip.config';\r\nimport { isBs3 } from '../utils/theme-provider';\r\n\r\n@Component({\r\n selector: 'bs-tooltip-container',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n // tslint:disable-next-line\r\n host: {\r\n '[class]':\r\n '\"tooltip in tooltip-\" + placement + \" \" + \"bs-tooltip-\" + placement + \" \" + placement + \" \" + containerClass',\r\n '[class.show]': '!isBs3',\r\n role: 'tooltip'\r\n },\r\n styles: [\r\n `\r\n :host.tooltip {\r\n display: block;\r\n }\r\n :host.bs-tooltip-top .arrow, :host.bs-tooltip-bottom .arrow {\r\n left: 50%;\r\n margin-left: -6px;\r\n }\r\n :host.bs-tooltip-left .arrow, :host.bs-tooltip-right .arrow {\r\n top: 50%;\r\n margin-top: -6px;\r\n }\r\n `\r\n ],\r\n template: `\r\n <div class=\"tooltip-arrow arrow\"></div>\r\n <div class=\"tooltip-inner\"><ng-content></ng-content></div>\r\n `\r\n})\r\nexport class TooltipContainerComponent implements AfterViewInit {\r\n classMap: any;\r\n placement: string;\r\n containerClass: string;\r\n animation: boolean;\r\n\r\n get isBs3(): boolean {\r\n return isBs3();\r\n }\r\n\r\n constructor(config: TooltipConfig) {\r\n Object.assign(this, config);\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.classMap = { in: false, fade: false };\r\n this.classMap[this.placement] = true;\r\n this.classMap[`tooltip-${this.placement}`] = true;\r\n\r\n this.classMap.in = true;\r\n if (this.animation) {\r\n this.classMap.fade = true;\r\n }\r\n\r\n if (this.containerClass) {\r\n this.classMap[this.containerClass] = true;\r\n }\r\n }\r\n}\r\n","/**\r\n * @copyright Valor Software\r\n * @copyright Angular ng-bootstrap team\r\n */\r\n\r\n export class Trigger {\r\n public open: string;\r\n public close?: string;\r\n\r\n public constructor(open: string, close?: string) {\r\n this.open = open;\r\n this.close = close || open;\r\n }\r\n\r\n public isManual(): boolean { return this.open === 'manual' || this.close === 'manual'; }\r\n }\r\n","/**\r\n * @copyright Valor Software\r\n * @copyright Angular ng-bootstrap team\r\n */\r\nimport { Renderer2 } from '@angular/core';\r\nimport { Trigger } from './trigger.class';\r\nimport {\r\n BsEventCallback, ListenOptions\r\n} from './component-loader/listen-options.model';\r\n\r\nconst DEFAULT_ALIASES = {\r\n hover: ['mouseover', 'mouseout'],\r\n focus: ['focusin', 'focusout']\r\n};\r\n\r\nexport function parseTriggers(triggers: string, aliases: any = DEFAULT_ALIASES): Trigger[] {\r\n const trimmedTriggers = (triggers || '').trim();\r\n\r\n if (trimmedTriggers.length === 0) {\r\n return [];\r\n }\r\n\r\n const parsedTriggers = trimmedTriggers\r\n .split(/\\s+/)\r\n .map((trigger: string) => trigger.split(':'))\r\n .map((triggerPair: string[]) => {\r\n const alias = aliases[triggerPair[0]] || triggerPair;\r\n\r\n return new Trigger(alias[0], alias[1]);\r\n });\r\n\r\n const manualTriggers = parsedTriggers.filter((triggerPair: Trigger) =>\r\n triggerPair.isManual()\r\n );\r\n\r\n if (manualTriggers.length > 1) {\r\n throw new Error('Triggers parse error: only one manual trigger is allowed');\r\n }\r\n\r\n if (manualTriggers.length === 1 && parsedTriggers.length > 1) {\r\n throw new Error('Triggers parse error: manual trigger can\\'t be mixed with other triggers');\r\n }\r\n\r\n return parsedTriggers;\r\n}\r\n\r\nexport function listenToTriggers(renderer: Renderer2,\r\n target: any,\r\n triggers: string,\r\n showFn: BsEventCallback,\r\n hideFn: BsEventCallback,\r\n toggleFn: BsEventCallback): Function {\r\n const parsedTriggers = parseTriggers(triggers);\r\n const listeners: any[] = [];\r\n\r\n if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {\r\n return Function.prototype;\r\n }\r\n\r\n parsedTriggers.forEach((trigger: Trigger) => {\r\n if (trigger.open === trigger.close) {\r\n listeners.push(renderer.listen(target, trigger.open, toggleFn));\r\n\r\n return;\r\n }\r\n\r\n listeners.push(\r\n renderer.listen(target, trigger.open, showFn),\r\n renderer.listen(target, trigger.close, hideFn)\r\n );\r\n });\r\n\r\n return () => {\r\n listeners.forEach((unsubscribeFn: Function) => unsubscribeFn());\r\n };\r\n}\r\n\r\nexport function listenToTriggersV2(renderer: Renderer2,\r\n options: ListenOptions): Function {\r\n const parsedTriggers = parseTriggers(options.triggers);\r\n const target = options.target;\r\n // do nothing\r\n if (parsedTriggers.length === 1 && parsedTriggers[0].isManual()) {\r\n return Function.prototype;\r\n }\r\n\r\n // all listeners\r\n const listeners: any[] = [];\r\n\r\n // lazy listeners registration\r\n const _registerHide: Function[] = [];\r\n const registerHide = () => {\r\n // add hide listeners to unregister array\r\n _registerHide.forEach((fn: Function) => listeners.push(fn()));\r\n // register hide events only once\r\n _registerHide.length = 0;\r\n };\r\n\r\n // register open\\close\\toggle listeners\r\n parsedTriggers.forEach((trigger: Trigger) => {\r\n const useToggle = trigger.open === trigger.close;\r\n const showFn = useToggle ? options.toggle : options.show;\r\n\r\n if (!useToggle) {\r\n _registerHide.push(() =>\r\n renderer.listen(target, trigger.close, options.hide)\r\n );\r\n }\r\n\r\n listeners.push(\r\n renderer.listen(target, trigger.open, () => showFn(registerHide))\r\n );\r\n });\r\n\r\n return () => {\r\n listeners.forEach((unsubscribeFn: Function) => unsubscribeFn());\r\n };\r\n}\r\n\r\nexport function registerOutsideClick(renderer: Renderer2,\r\n options: ListenOptions) {\r\n if (!options.outsideClick) {\r\n return Function.prototype;\r\n }\r\n\r\n return renderer.listen('document', 'click', (event: any) => {\r\n if (options.target && options.target.contains(event.target)) {\r\n return;\r\n }\r\n if (\r\n options.targets &&\r\n options.targets.some(target => target.contains(event.target))\r\n ) {\r\n return;\r\n }\r\n\r\n options.hide();\r\n });\r\n}\r\n","/**\r\n * @copyright Valor Software\r\n * @copyright Angular ng-bootstrap team\r\n */\r\n\r\n import { ComponentRef, ViewRef } from '@angular/core';\r\n\r\n export class ContentRef {\r\n public nodes: any[];\r\n public viewRef?: ViewRef;\r\n public componentRef?: ComponentRef<any>;\r\n\r\n public constructor(\r\n nodes: any[],\r\n viewRef?: ViewRef,\r\n componentRef?: ComponentRef<any>\r\n ) {\r\n this.nodes = nodes;\r\n this.viewRef = viewRef;\r\n this.componentRef = componentRef;\r\n }\r\n }\r\n","// tslint:disable:max-file-line-count\r\n// todo: add delay support\r\n// todo: merge events onShow, onShown, etc...\r\n// todo: add global positioning configuration?\r\nimport {\r\n ApplicationRef,\r\n ComponentFactory,\r\n ComponentFactoryResolver,\r\n ComponentRef,\r\n ElementRef,\r\n EmbeddedViewRef,\r\n EventEmitter,\r\n Injector,\r\n NgZone,\r\n Provider,\r\n ReflectiveInjector,\r\n Renderer2,\r\n TemplateRef,\r\n Type,\r\n ViewContainerRef\r\n} from '@angular/core';\r\nimport { PositioningOptions, PositioningService } from '../positioning/index';\r\nimport { listenToTriggersV2, registerOutsideClick } from '../triggers';\r\nimport { ContentRef } from './content-ref.class';\r\nimport { ListenOptions } from './listen-options.model';\r\n\r\nexport class ComponentLoader<T> {\r\n onBeforeShow: EventEmitter<any> = new EventEmitter();\r\n onShown: EventEmitter<any> = new EventEmitter();\r\n onBeforeHide: EventEmitter<any> = new EventEmitter();\r\n onHidden: EventEmitter<any> = new EventEmitter();\r\n\r\n instance: T;\r\n _componentRef: ComponentRef<T>;\r\n _inlineViewRef: EmbeddedViewRef<T>;\r\n\r\n private _providers: Provider[] = [];\r\n private _componentFactory: ComponentFactory<T>;\r\n private _zoneSubscription: any;\r\n private _contentRef: ContentRef;\r\n private _innerComponent: ComponentRef<T>;\r\n\r\n private _unregisterListenersFn: Function;\r\n\r\n get isShown(): boolean {\r\n if (this._isHiding) {\r\n return false;\r\n }\r\n\r\n return !!this._componentRef;\r\n }\r\n\r\n private _isHiding = false;\r\n\r\n /**\r\n * Placement of a component. Accepts: \"top\", \"bottom\", \"left\", \"right\"\r\n */\r\n private attachment: string;\r\n\r\n /**\r\n * A selector specifying the element the popover should be appended to.\r\n * Currently only supports \"body\".\r\n */\r\n private container: string | ElementRef | any;\r\n\r\n /**\r\n * Specifies events that should trigger. Supports a space separated list of\r\n * event names.\r\n */\r\n private triggers: string;\r\n\r\n private _listenOpts: ListenOptions = {};\r\n private _globalListener = Function.prototype;\r\n\r\n /**\r\n * Do not use this directly, it should be instanced via\r\n * `ComponentLoadFactory.attach`\r\n * @internal\r\n */\r\n // tslint:disable-next-line\r\n public constructor(\r\n private _viewContainerRef: ViewContainerRef,\r\n private _renderer: Renderer2,\r\n private _elementRef: ElementRef,\r\n private _injector: Injector,\r\n private _componentFactoryResolver: ComponentFactoryResolver,\r\n private _ngZone: NgZone,\r\n private _applicationRef: ApplicationRef,\r\n private _posService: PositioningService\r\n ) {}\r\n\r\n attach(compType: Type<T>): ComponentLoader<T> {\r\n this._componentFactory = this._componentFactoryResolver\r\n .resolveComponentFactory<T>(compType);\r\n\r\n return this;\r\n }\r\n\r\n // todo: add behaviour: to target element, `body`, custom element\r\n to(container?: string): ComponentLoader<T> {\r\n this.container = container || this.container;\r\n\r\n return this;\r\n }\r\n\r\n position(opts?: PositioningOptions): ComponentLoader<T> {\r\n this.attachment = opts.attachment || this.attachment;\r\n this._elementRef = (opts.target as ElementRef) || this._elementRef;\r\n\r\n return this;\r\n }\r\n\r\n provide(provider: Provider): ComponentLoader<T> {\r\n this._providers.push(provider);\r\n\r\n return this;\r\n }\r\n\r\n // todo: appendChild to element or document.querySelector(this.container)\r\n\r\n show(opts: {\r\n content?: string | TemplateRef<any>;\r\n context?: any;\r\n initialState?: any; [key: string]: any;\r\n } = {}\r\n ): ComponentRef<T> {\r\n\r\n this._subscribePositioning();\r\n this._innerComponent = null;\r\n\r\n if (!this._componentRef) {\r\n this.onBeforeShow.emit();\r\n this._contentRef = this._getContentRef(opts.content, opts.context, opts.initialState);\r\n const injector = ReflectiveInjector.resolveAndCreate(this._providers, this._injector);\r\n\r\n this._componentRef = this._componentFactory.create(injector, this._contentRef.nodes);\r\n this._applicationRef.attachView(this._componentRef.hostView);\r\n // this._componentRef = this._viewContainerRef\r\n // .createComponent(this._componentFactory, 0, injector, this._contentRef.nodes);\r\n this.instance = this._componentRef.instance;\r\n\r\n Object.assign(this._componentRef.instance, opts);\r\n\r\n if (this.container instanceof ElementRef) {\r\n this.container.nativeElement.appendChild(\r\n this._componentRef.location.nativeElement\r\n );\r\n }\r\n\r\n if (this.container === 'body' && typeof document !== 'undefined') {\r\n document\r\n .querySelector(this.container as string)\r\n .appendChild(this._componentRef.location.nativeElement);\r\n }\r\n\r\n if (\r\n !this.container &&\r\n this._elementRef &&\r\n this._elementRef.nativeElement.parentElement\r\n ) {\r\n this._elementRef.nativeElement.parentElement.appendChild(\r\n this._componentRef.location.nativeElement\r\n );\r\n }\r\n\r\n // we need to manually invoke change detection since events registered\r\n // via\r\n // Renderer::listen() are not picked up by change detection with the\r\n // OnPush strategy\r\n if (this._contentRef.componentRef) {\r\n this._innerComponent = this._contentRef.componentRef.instance;\r\n this._contentRef.componentRef.changeDetectorRef.markForCheck();\r\n this._contentRef.componentRef.changeDetectorRef.detectChanges();\r\n }\r\n this._componentRef.changeDetectorRef.markForCheck();\r\n this._componentRef.changeDetectorRef.detectChanges();\r\n this.onShown.emit(this._componentRef.instance);\r\n }\r\n\r\n this._registerOutsideClick();\r\n\r\n return this._componentRef;\r\n }\r\n\r\n hide(): ComponentLoader<T> {\r\n if (!this._componentRef) {\r\n return this;\r\n }\r\n\r\n this.onBeforeHide.emit(this._componentRef.instance);\r\n\r\n const componentEl = this._componentRef.location.nativeElement;\r\n componentEl.parentNode.removeChild(componentEl);\r\n if (this._contentRef.componentRef) {\r\n this._contentRef.componentRef.destroy();\r\n }\r\n this._componentRef.destroy();\r\n if (this._viewContainerRef && this._contentRef.viewRef) {\r\n this._viewContainerRef.remove(\r\n this._viewContainerRef.indexOf(this._contentRef.viewRef)\r\n );\r\n }\r\n if (this._contentRef.viewRef) {\r\n this._contentRef.viewRef.destroy();\r\n }\r\n // this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._componentRef.hostView));\r\n //\r\n // if (this._contentRef.viewRef && this._viewContainerRef.indexOf(this._contentRef.viewRef) !== -1) {\r\n // this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._contentRef.viewRef));\r\n // }\r\n\r\n this._contentRef = null;\r\n this._componentRef = null;\r\n this._removeGlobalListener();\r\n\r\n this.onHidden.emit();\r\n\r\n return this;\r\n }\r\n\r\n toggle(): void {\r\n if (this.isShown) {\r\n this.hide();\r\n\r\n return;\r\n }\r\n\r\n this.show();\r\n }\r\n\r\n dispose(): void {\r\n if (this.isShown) {\r\n this.hide();\r\n }\r\n\r\n this._unsubscribePositioning();\r\n\r\n if (this._unregisterListenersFn) {\r\n this._unregisterListenersFn();\r\n }\r\n }\r\n\r\n listen(listenOpts: ListenOptions): ComponentLoader<T> {\r\n this.triggers = listenOpts.triggers || this.triggers;\r\n this._listenOpts.outsideClick = listenOpts.outsideClick;\r\n listenOpts.target = listenOpts.target || this._elementRef.nativeElement;\r\n\r\n const hide = (this._listenOpts.hide = () =>\r\n listenOpts.hide ? listenOpts.hide() : void this.hide());\r\n const show = (this._listenOpts.show = (registerHide: Function) => {\r\n listenOpts.show ? listenOpts.show(registerHide) : this.show(registerHide);\r\n registerHide();\r\n });\r\n\r\n const toggle = (registerHide: Function) => {\r\n this.isShown ? hide() : show(registerHide);\r\n };\r\n\r\n this._unregisterListenersFn = listenToTriggersV2(this._renderer, {\r\n target: listenOpts.target,\r\n triggers: listenOpts.triggers,\r\n show,\r\n hide,\r\n toggle\r\n });\r\n\r\n return this;\r\n }\r\n\r\n _removeGlobalListener() {\r\n if (this._globalListener) {\r\n this._globalListener();\r\n this._globalListener = null;\r\n }\r\n }\r\n\r\n attachInline(\r\n vRef: ViewContainerRef,\r\n template: TemplateRef<any>\r\n ): ComponentLoader<T> {\r\n this._inlineViewRef = vRef.createEmbeddedView(template);\r\n\r\n return this;\r\n }\r\n\r\n _registerOutsideClick(): void {\r\n if (!this._componentRef || !this._componentRef.location) {\r\n return;\r\n }\r\n // why: should run after first event bubble\r\n if (this._listenOpts.outsideClick) {\r\n const target = this._componentRef.location.nativeElement;\r\n setTimeout(() => {\r\n this._globalListener = registerOutsideClick(this._renderer, {\r\n targets: [target, this._elementRef.nativeElement],\r\n outsideClick: this._listenOpts.outsideClick,\r\n hide: () => this._listenOpts.hide()\r\n });\r\n });\r\n }\r\n }\r\n\r\n getInnerComponent(): ComponentRef<T> {\r\n return this._innerComponent;\r\n }\r\n\r\n private _subscribePositioning(): void {\r\n if (this._zoneSubscription || !this.attachment) {\r\n return;\r\n }\r\n\r\n this._zoneSubscription = this._ngZone.onStable.subscribe(() => {\r\n if (!this._componentRef) {\r\n return;\r\n }\r\n this._posService.position({\r\n element: this._componentRef.location,\r\n target: this._elementRef,\r\n attachment: this.attachment,\r\n appendToBody: this.container === 'body'\r\n });\r\n });\r\n }\r\n\r\n private _unsubscribePositioning(): void {\r\n if (!this._zoneSubscription) {\r\n return;\r\n }\r\n this._zoneSubscription.unsubscribe();\r\n this._zoneSubscription = null;\r\n }\r\n\r\n private _getContentRef(\r\n content: string | TemplateRef<any> | any,\r\n context?: any,\r\n initialState?: any\r\n ): ContentRef {\r\n if (!content) {\r\n return new ContentRef([]);\r\n }\r\n\r\n if (content instanceof TemplateRef) {\r\n if (this._viewContainerRef) {\r\n const _viewRef = this._viewContainerRef\r\n .createEmbeddedView<TemplateRef<T>>(content, context);\r\n _viewRef.markForCheck();\r\n\r\n return new ContentRef([_viewRef.rootNodes], _viewRef);\r\n }\r\n const viewRef = content.createEmbeddedView({});\r\n this._applicationRef.attachView(viewRef);\r\n\r\n return new ContentRef([viewRef.rootNodes], viewRef);\r\n }\r\n\r\n if (typeof content === 'function') {\r\n const contentCmptFactory = this._componentFactoryResolver.resolveComponentFactory(\r\n content\r\n );\r\n const modalContentInjector = ReflectiveInjector.resolveAndCreate(\r\n [...this._providers],\r\n this._injector\r\n );\r\n const componentRef = contentCmptFactory.create(modalContentInjector);\r\n Object.assign(componentRef.instance, initialState);\r\n this._applicationRef.attachView(componentRef.hostView);\r\n\r\n return new ContentRef(\r\n [[componentRef.location.nativeElement]],\r\n componentRef.hostView,\r\n componentRef\r\n );\r\n }\r\n\r\n // 支持传入的content是一个ComponentRef实例 added by liyz\r\n if (content instanceof ComponentRef) {\r\n Object.assign(content.instance, initialState);\r\n this._applicationRef.attachView(content.hostView);\r\n\r\n return new ContentRef(\r\n [[content.location.nativeElement]],\r\n content.hostView,\r\n content\r\n );\r\n }\r\n\r\n return new ContentRef([[this._renderer.createText(`${content}`)]]);\r\n }\r\n}\r\n","/**\r\n * @copyright Valor Software\r\n * @copyright Angular ng-bootstrap team\r\n */\r\n\r\n// previous version:\r\n// https://github.com/angular-ui/bootstrap/blob/07c31d0731f7cb068a1932b8e01d2312b796b4ec/src/position/position.js\r\n// tslint:disable\r\nexport class Positioning {\r\n public position(element: HTMLElement, round = true): ClientRect {\r\n let elPosition: ClientRect;\r\n let parentOffset: ClientRect = {\r\n width: 0,\r\n height: 0,\r\n top: 0,\r\n bottom: 0,\r\n left: 0,\r\n right: 0\r\n };\r\n\r\n if (this.getStyle(element, 'position') === 'fixed') {\r\n const bcRect = element.getBoundingClientRect();\r\n elPosition = {\r\n width: bcRect.width,\r\n height: bcRect.height,\r\n top: bcRect.top,\r\n bottom: bcRect.bottom,\r\n left: bcRect.left,\r\n right: bcRect.right\r\n };\r\n } else {\r\n const offsetParentEl = this.offsetParent(element);\r\n\r\n elPosition = this.offset(element, false);\r\n\r\n if (offsetParentEl !== document.documentElement) {\r\n parentOffset = this.offset(offsetParentEl, false);\r\n }\r\n\r\n parentOffset.top += offsetParentEl.clientTop;\r\n parentOffset.left += offsetParentEl.clientLeft;\r\n }\r\n\r\n elPosition.top -= parentOffset.top;\r\n elPosition.bottom -= parentOffset.top;\r\n elPosition.left -= parentOffset.left;\r\n elPosition.right -= parentOffset.left;\r\n\r\n if (round) {\r\n elPosition.top = Math.round(elPosition.top);\r\n elPosition.bottom = Math.round(elPosition.bottom);\r\n elPosition.left = Math.round(elPosition.left);\r\n elPosition.right = Math.round(elPosition.right);\r\n }\r\n\r\n return elPosition;\r\n }\r\n\r\n public offset(element: HTMLElement, round = true): ClientRect {\r\n const elBcr = element.getBoundingClientRect();\r\n const viewportOffset = {\r\n top: window.pageYOffset - document.documentElement.clientTop,\r\n left: window.pageXOffset - document.documentElement.clientLeft\r\n };\r\n\r\n let elOffset = {\r\n height: elBcr.height || element.offsetHeight,\r\n width: elBcr.width || element.offsetWidth,\r\n top: elBcr.top + viewportOffset.top,\r\n bottom: elBcr.bottom + viewportOffset.top,\r\n left: elBcr.left + viewportOffset.left,\r\n right: elBcr.right + viewportOffset.left\r\n };\r\n\r\n if (round) {\r\n elOffset.height = Math.round(elOffset.height);\r\n elOffset.width = Math.round(elOffset.width);\r\n elOffset.top = Math.round(elOffset.top);\r\n elOffset.bottom = Math.round(elOffset.bottom);\r\n elOffset.left = Math.round(elOffset.left);\r\n elOffset.right = Math.round(elOffset.right);\r\n }\r\n\r\n return elOffset;\r\n }\r\n\r\n public positionElements(\r\n hostElement: HTMLElement,\r\n targetElement: HTMLElement,\r\n placement: string,\r\n appendToBody?: boolean\r\n ): ClientRect {\r\n const hostElPosition = appendToBody\r\n ? this.offset(hostElement, false)\r\n : this.position(hostElement, false);\r\n const targetElStyles = this.getAllStyles(targetElement);\r\n const shiftWidth: any = {\r\n left: hostElPosition.left,\r\n center:\r\n hostElPosition.left +\r\n hostElPosition.width / 2 -\r\n targetElement.offsetWidth / 2,\r\n right: hostElPosition.left + hostElPosition.width\r\n };\r\n const shiftHeight: any = {\r\n top: hostElPosition.top,\r\n center:\r\n hostElPosition.top +\r\n hostElPosition.height / 2 -\r\n targetElement.offsetHeight / 2,\r\n bottom: hostElPosition.top + hostElPosition.height\r\n };\r\n const targetElBCR = targetElement.getBoundingClientRect();\r\n let placementPrimary = placement.split(' ')[0] || 'top';\r\n const placementSecondary = placement.split(' ')[1] || 'center';\r\n\r\n let targetElPosition: ClientRect = {\r\n height: targetElBCR.height || targetElement.offsetHeight,\r\n width: targetElBCR.width || targetElement.offsetWidth,\r\n top: 0,\r\n bottom: targetElBCR.height || targetElement.offsetHeight,\r\n left: 0,\r\n right: targetElBCR.width || targetElement.offsetWidth\r\n };\r\n\r\n if (placementPrimary === 'auto') {\r\n let newPlacementPrimary = this.autoPosition(\r\n targetElPosition,\r\n hostElPosition,\r\n targetElement,\r\n placementSecondary\r\n );\r\n if (!newPlacementPrimary)\r\n newPlacementPrimary = this.autoPosition(\r\n targetElPosition,\r\n hostElPosition,\r\n targetElement\r\n );\r\n if (newPlacementPrimary) placementPrimary = newPlacementPrimary;\r\n targetElement.classList.add(placementPrimary);\r\n }\r\n\r\n switch (placementPrimary) {\r\n case 'top':\r\n targetElPosition.top =\r\n hostElPosition.top -\r\n (targetElement.offsetHeight +\r\n parseFloat(targetElStyles.marginBottom));\r\n targetElPosition.bottom +=\r\n hostElPosition.top - targetElement.offsetHeight;\r\n targetElPosition.left = shiftWidth[placementSecondary];\r\n targetElPosition.right += shiftWidth[placementSecondary];\r\n break;\r\n case 'bottom':\r\n targetElPosition.top = shiftHeight[placementPrimary];\r\n targetElPosition.bottom += shiftHeight[placementPrimary];\r\n targetElPosition.left = shiftWidth[placementSecondary];\r\n targetElPosition.right += shiftWidth[placementSecondary];\r\n break;\r\n case 'left':\r\n targetElPosition.top = shiftHeight[placementSecondary];\r\n targetElPosition.bottom += shiftHeight[placementSecondary];\r\n targetElPosition.left =\r\n hostElPosition.left -\r\n (targetElement.offsetWidth + parseFloat(targetElStyles.marginRight));\r\n targetElPosition.right +=\r\n hostElPosition.left - targetElement.offsetWidth;\r\n break;\r\n case 'right':\r\n targetElPosition.top = shiftHeight[placementSecondary];\r\n targetElPosition.bottom += shiftHeight[placementSecondary];\r\n targetElPosition.left = shiftWidth[placementPrimary];\r\n targetElPosition.right += shiftWidth[placementPrimary];\r\n break;\r\n }\r\n\r\n targetElPosition.top = Math.round(targetElPosition.top);\r\n targetElPosition.bottom = Math.round(targetElPosition.bottom);\r\n targetElPosition.left = Math.round(targetElPosition.left);\r\n targetElPosition.right = Math.round(targetElPosition.right);\r\n\r\n return targetElPosition;\r\n }\r\n\r\n private autoPosition(\r\n targetElPosition: ClientRect,\r\n hostElPosition: ClientRect,\r\n targetElement: HTMLElement,\r\n preferredPosition?: string\r\n ) {\r\n if (\r\n (!preferredPosition || preferredPosition === 'right') &&\r\n targetElPosition.left + hostElPosition.left - targetElement.offsetWidth <\r\n 0\r\n ) {\r\n return 'right';\r\n } else if (\r\n (!preferredPosition || preferredPosition === 'top') &&\r\n targetElPosition.bottom +\r\n hostElPosition.bottom +\r\n targetElement.offsetHeight >\r\n window.innerHeight\r\n ) {\r\n return 'top';\r\n } else if (\r\n (!preferredPosition || preferredPosition === 'bottom') &&\r\n targetElPosition.top + hostElPosition.top - targetElement.offsetHeight < 0\r\n ) {\r\n return 'bottom';\r\n } else if (\r\n (!preferredPosition || preferredPosition === 'left') &&\r\n targetElPosition.right +\r\n hostElPosition.right +\r\n targetElement.offsetWidth >\r\n window.innerWidth\r\n ) {\r\n return 'left';\r\n }\r\n return null;\r\n }\r\n\r\n private getAllStyles(element: HTMLElement) {\r\n return window.getComputedStyle(element);\r\n }\r\n\r\n private getStyle(element: HTMLElement, prop: string): string {\r\n return (this.getAllStyles(element) as any)[prop];\r\n }\r\n\r\n private isStaticPositioned(element: HTMLElement): boolean {\r\n return (this.getStyle(element, 'position') || 'static') === 'static';\r\n }\r\n\r\n private offsetParent(element: HTMLElement): HTMLElement {\r\n let offsetParentEl =\r\n <HTMLElement>element.offsetParent || document.documentElement;\r\n\r\n while (\r\n offsetParentEl &&\r\n offsetParentEl !== document.documentElement &&\r\n this.isStaticPositioned(offsetParentEl)\r\n ) {\r\n offsetParentEl = <HTMLElement>offsetParentEl.offsetParent;\r\n }\r\n\r\n return offsetParentEl || document.documentElement;\r\n }\r\n}\r\n\r\nconst positionService = new Positioning();\r\n\r\nexport function positionElements(\r\n hostElement: HTMLElement,\r\n targetElement: HTMLElement,\r\n placement: string,\r\n appendToBody?: boolean\r\n): void {\r\n const pos = positionService.positionElements(\r\n hostElement,\r\n targetElement,\r\n placement,\r\n appendToBody\r\n );\r\n\r\n targetElement.style.top = `${pos.top}px`;\r\n targetElement.style.left = `${pos.left}px`;\r\n}\r\n","import { Injectable, ElementRef } from '@angular/core';\r\nimport { positionElements } from './ng-positioning';\r\n\r\nexport interface PositioningOptions {\r\n /** The DOM element, ElementRef, or a selector string of an element which will be moved */\r\n element?: HTMLElement | ElementRef | string;\r\n\r\n /** The DOM element, ElementRef, or a selector string of an element which the element will be attached to */\r\n target?: HTMLElement | ElementRef | string;\r\n\r\n /**\r\n * A string of the form 'vert-attachment horiz-attachment' or 'placement'\r\n * - placement can be \"top\", \"bottom\", \"left\", \"right\"\r\n * not yet supported:\r\n * - vert-attachment can be any of 'top', 'middle', 'bottom'\r\n * - horiz-attachment can be any of 'left', 'center', 'right'\r\n */\r\n attachment?: string;\r\n\r\n /** A string similar to `attachment`. The one difference is that, if it's not provided,\r\n * `targetAttachment` will assume the mirror image of `attachment`.\r\n */\r\n targetAttachment?: string;\r\n\r\n /** A string of the form 'vert-offset horiz-offset'\r\n * - vert-offset and horiz-offset can be of the form \"20px\" or \"55%\"\r\n */\r\n offset?: string;\r\n\r\n /** A string similar to `offset`, but referring to the offset of the target */\r\n targetOffset?: string;\r\n\r\n /** If true component will be attached to body */\r\n appendToBody?: boolean;\r\n}\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class PositioningService {\r\n position(options: PositioningOptions): void {\r\n const {element, target, attachment, appendToBody} = options;\r\n positionElements(\r\n _getHtmlElement(target),\r\n _getHtmlElement(element),\r\n attachment,\r\n appendToBody\r\n );\r\n }\r\n\r\n}\r\n\r\nfunction _getHtmlElement(element: HTMLElement | ElementRef | string): HTMLElement {\r\n // it means that we got a selector\r\n if (typeof element === 'string') {\r\n return document.querySelector(element) as HTMLElement;\r\n }\r\n\r\n if (element instanceof ElementRef) {\r\n return element.nativeElement;\r\n }\r\n\r\n return element as HTMLElement;\r\n}\r\n","import {\r\n ApplicationRef, ComponentFactoryResolver, ElementRef, Injectable, Injector,\r\n NgZone, Renderer2, ViewContainerRef\r\n} from '@angular/core';\r\nimport {ComponentLoader} from './component-loader.class';\r\nimport {PositioningService} from '../positioning/index';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class ComponentLoaderFactory {\r\n constructor(private _componentFactoryResolver: ComponentFactoryResolver,\r\n private _ngZone: NgZone,\r\n private _injector: Injector,\r\n private _posService: PositioningService,\r\n private _applicationRef: ApplicationRef) {\r\n }\r\n\r\n /**\r\n *\r\n * @param _elementRef\r\n * @param _viewContainerRef\r\n * @param _renderer\r\n * @returns {ComponentLoader}\r\n */\r\n createLoader<T>(_elementRef: ElementRef,\r\n _viewContainerRef: ViewContainerRef,\r\n _renderer: Renderer2): ComponentLoader<T> {\r\n return new ComponentLoader<T>(\r\n _viewContainerRef,\r\n _renderer,\r\n _elementRef,\r\n this._injector,\r\n this._componentFactoryResolver,\r\n this._ngZone,\r\n this._applicationRef,\r\n this._posService\r\n );\r\n }\r\n}\r\n","import { isDevMode } from '@angular/core';\r\nconst _messagesHash: { [key: string]: boolean } = {};\r\nconst _hideMsg = typeof console === 'undefined' || !('warn' in console);\r\n\r\nexport function warnOnce(msg: string): void {\r\n if (!isDevMode() || _hideMsg || msg in _messagesHash) {\r\n return;\r\n }\r\n\r\n _messagesHash[msg] = true;\r\n /*tslint:disable-next-line*/\r\n console.warn(msg);\r\n}\r\n","// tslint:disable:deprecation\r\nimport {\r\n Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output,\r\n Renderer2, TemplateRef, ViewContainerRef\r\n} from '@angular/core';\r\nimport { TooltipContainerComponent } from './tooltip-container.component';\r\nimport { TooltipConfig } from './tooltip.config';\r\nimport { ComponentLoader, ComponentLoaderFactory } from '../utils/component-loader/index';\r\nimport { OnChange } from '../utils/decorators';\r\nimport { warnOnce } from '../utils/warn-once';\r\nimport { parseTriggers } from '../utils/triggers';\r\nimport { Observable } from 'rxjs/Observable';\r\nimport { timer } from 'rxjs';\r\n\r\n@Directive({\r\n selector: '[tooltip], [tooltipHtml]',\r\n exportAs: 'bs-tooltip'\r\n})\r\nexport class TooltipDirective implements OnInit, OnDestroy {\r\n /**\r\n * Content to be displayed as tooltip.\r\n */\r\n @OnChange()\r\n @Input()\r\n tooltip: string | TemplateRef<any>;\r\n /** Fired when tooltip content changes */\r\n @Output()\r\n tooltipChange: EventEmitter<string | TemplateRef<any>> = new EventEmitter();\r\n\r\n /**\r\n * Placement of a tooltip. Accepts: \"top\", \"bottom\", \"left\", \"right\"\r\n */\r\n @Input() placement: string;\r\n /**\r\n * Specifies events that should trigger. Supports a space separated list of\r\n * event names.\r\n */\r\n @Input() triggers: string;\r\n /**\r\n * A selector specifying the element the tooltip should be appended to.\r\n * Currently only supports \"body\".\r\n */\r\n @Input() container: string;\r\n\r\n /**\r\n * Returns whether or not the tooltip is currently being shown\r\n */\r\n @Input()\r\n get isOpen(): boolean {\r\n return this._tooltip.isShown;\r\n }\r\n\r\n set isOpen(value: boolean) {\r\n if (value) {\r\n this.show();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n\r\n /**\r\n * Allows to disable tooltip\r\n */\r\n @Input() isDisabled: boolean;\r\n\r\n /**\r\n * Css class for tooltip container\r\n */\r\n @Input() containerClass = '';\r\n /**\r\n * Delay before showing the tooltip\r\n */\r\n @Input() delay: number;\r\n\r\n /**\r\n * Emits an event when the tooltip is shown\r\n */\r\n @Output() onShown: EventEmitter<any>;\r\n /**\r\n * Emits an event when the tooltip is hidden\r\n */\r\n @Output() onHidden: EventEmitter<any>;\r\n\r\n /** @deprecated - please use `tooltip` instead */\r\n @Input('tooltipHtml')\r\n set htmlContent(value: string | TemplateRef<any>) {\r\n warnOnce('tooltipHtml was deprecated, please use `tooltip` instead');\r\n this.tooltip = value;\r\n }\r\n\r\n /** @deprecated - please use `placement` instead */\r\n @Input('tooltipPlacement')\r\n set _placement(value: string) {\r\n warnOnce('tooltipPlacement was deprecated, please use `placement` instead');\r\n this.placement = value;\r\n }\r\n\r\n /** @deprecated - please use `isOpen` instead*/\r\n @Input('tooltipIsOpen')\r\n set _isOpen(value: boolean) {\r\n warnOnce('tooltipIsOpen was deprecated, please use `isOpen` instead');\r\n this.isOpen = value;\r\n }\r\n\r\n get _isOpen(): boolean {\r\n warnOnce('tooltipIsOpen was deprecated, please use `isOpen` instead');\r\n return this.isOpen;\r\n }\r\n\r\n /** @deprecated - please use `isDisabled` instead */\r\n @Input('tooltipEnable')\r\n set _enable(value: boolean) {\r\n warnOnce('tooltipEnable was deprecated, please use `isDisabled` instead');\r\n this.isDisabled = value;\r\n }\r\n\r\n get _enable(): boolean {\r\n warnOnce('tooltipEnable was deprecated, please use `isDisabled` instead');\r\n return this.isDisabled;\r\n }\r\n\r\n /** @deprecated - please use `container=\"body\"` instead */\r\n @Input('tooltipAppendToBody')\r\n set _appendToBody(value: boolean) {\r\n warnOnce(\r\n 'tooltipAppendToBody was deprecated, please use `container=\"body\"` instead'\r\n );\r\n this.container = value ? 'body' : this.container;\r\n }\r\n\r\n get _appendToBody(): boolean {\r\n warnOnce(\r\n 'tooltipAppendToBody was deprecated, please use `container=\"body\"` instead'\r\n );\r\n return this.container === 'body';\r\n }\r\n\r\n /** @deprecated - removed, will be added to configuration */\r\n @Input('tooltipAnimation') _animation = true;\r\n\r\n /** @deprecated - will replaced with customClass */\r\n @Input('tooltipClass')\r\n set _popupClass(value: string) {\r\n warnOnce('tooltipClass deprecated');\r\n }\r\n\r\n /** @deprecated - removed */\r\n @Input('tooltipContext')\r\n set _tooltipContext(value: any) {\r\n warnOnce('tooltipContext deprecated');\r\n }\r\n\r\n /** @deprecated */\r\n @Input('tooltipPopupDelay')\r\n set _tooltipPopupDelay(value: number) {\r\n warnOnce('tooltipPopupDelay is deprecated, use `delay` instead');\r\n this.delay = value;\r\n }\r\n\r\n /** @deprecated */\r\n @Input('tooltipFadeDuration') _fadeDuration = 150;\r\n\r\n /** @deprecated - please use `triggers` instead */\r\n @Input('tooltipTrigger')\r\n get _tooltipTrigger(): string | string[] {\r\n warnOnce('tooltipTrigger was deprecated, please use `triggers` instead');\r\n return this.triggers;\r\n }\r\n\r\n set _tooltipTrigger(value: string | string[]) {\r\n warnOnce('tooltipTrigger was deprecated, please use `triggers` instead');\r\n this.triggers = (value || '').toString();\r\n }\r\n\r\n /** @deprecated */\r\n @Output()\r\n tooltipStateChanged: EventEmitter<boolean> = new EventEmitter<boolean>();\r\n protected _delayTimeoutId: number | any;\r\n protected _tooltipCancelShowFn: Function;\r\n\r\n private _tooltip: ComponentLoader<TooltipContainerComponent>;\r\n\r\n constructor(_viewContainerRef: ViewContainerRef,\r\n private _renderer: Renderer2,\r\n private _elementRef: ElementRef,\r\n cis: ComponentLoaderFactory,\r\n config: TooltipConfig) {\r\n this._tooltip = cis\r\n .createLoader<TooltipContainerComponent>(\r\n this._elementRef,\r\n _viewContainerRef,\r\n this._renderer\r\n )\r\n .provide({provide: TooltipConfig, useValue: config});\r\n\r\n Object.assign(this, config);\r\n this.onShown = this._tooltip.onShown;\r\n this.onHidden = this._tooltip.onHidden;\r\n }\r\n\r\n ngOnInit(): void {\r\n this._tooltip.listen({\r\n triggers: this.triggers,\r\n show: () => this.show()\r\n });\r\n this.tooltipChange.subscribe((value: any) => {\r\n if (!value) {\r\n this._tooltip.hide();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Toggles an element’s tooltip. This is considered a “manual” triggering of\r\n * the tooltip.\r\n */\r\n toggle(): void {\r\n if (this.isOpen) {\r\n return this.hide();\r\n }\r\n\r\n this.show();\r\n }\r\n\r\n /**\r\n * Opens an element’s tooltip. This is considered a “manual” triggering of\r\n * the tooltip.\r\n */\r\n show(): void {\r\n if (\r\n this.isOpen ||\r\n this.isDisabled ||\r\n this._delayTimeoutId ||\r\n !this.tooltip\r\n ) {\r\n return;\r\n }\r\n\r\n const showTooltip = () => {\r\n if (this._delayTimeoutId) {\r\n this._delayTimeoutId = undefined;\r\n }\r\n\r\n this._tooltip\r\n .attach(TooltipContainerComponent)\r\n .to(this.container)\r\n .position({attachment: this.placement})\r\n .show({\r\n content: this.tooltip,\r\n placement: this.placement,\r\n containerClass: this.containerClass\r\n });\r\n };\r\n const cancelDelayedTooltipShowing = () => {\r\n if (this._tooltipCancelShowFn) {\r\n this._tooltipCancelShowFn();\r\n }\r\n };\r\n\r\n if (this.delay) {\r\n const tipTimer = timer(this.delay).subscribe(() => {\r\n showTooltip();\r\n cancelDelayedTooltipShowing();\r\n });\r\n\r\n if (this.triggers) {\r\n const triggers = parseTriggers(this.triggers);\r\n this._tooltipCancelShowFn = this._renderer.listen(this._elementRef.nativeElement, triggers[0].close, () => {\r\n tipTimer.unsubscribe();\r\n cancelDelayedTooltipShowing();\r\n });\r\n }\r\n } else {\r\n showTooltip();\r\n }\r\n }\r\n\r\n /**\r\n * Closes an element’s tooltip. This is considered a “manual” triggering of\r\n * the tooltip.\r\n */\r\n hide(): void {\r\n if (this._delayTimeoutId) {\r\n clearTimeout(this._delayTimeoutId);\r\n this._delayTimeoutId = undefined;\r\n }\r\n\r\n if (!this._tooltip.isShown) {\r\n return;\r\n }\r\n\r\n this._tooltip.instance.classMap.in = false;\r\n setTimeout(() => {\r\n this._tooltip.hide();\r\n }, this._fadeDuration);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._tooltip.dispose();\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { TooltipContainerComponent } from './tooltip-container.component';\r\nimport { TooltipDirective } from './tooltip.directive';\r\nimport { TooltipConfig } from './tooltip.config';\r\nimport { ComponentLoaderFactory } from '../utils/component-loader/index';\r\nimport { PositioningService } from '../utils/positioning/index';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [TooltipDirective, TooltipContainerComponent],\r\n exports: [TooltipDirective],\r\n entryComponents: [TooltipContainerComponent]\r\n})\r\nexport class TooltipModule {\r\n static forRoot(): ModuleWithProviders {\r\n return {\r\n ngModule: TooltipModule,\r\n providers: [TooltipConfig, ComponentLoaderFactory, PositioningService]\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class BsModalRef {\r\n /**\r\n * Reference to a component inside the modal. Null if modal's been created with TemplateRef\r\n */\r\n content?: any | null;\r\n\r\n /**\r\n * Hides the modal\r\n */\r\n hide: () => void = Function;\r\n}\r\n","export class ModalBackdropOptions {\r\n animate = true;\r\n\r\n constructor(options: ModalBackdropOptions) {\r\n Object.assign(this, options);\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class ModalOptions {\r\n /**\r\n * Includes a modal-backdrop element. Alternatively,\r\n * specify static for a backdrop which doesn't close the modal on click.\r\n */\r\n backdrop?: boolean | 'static';\r\n /**\r\n * Closes the modal when escape key is pressed.\r\n */\r\n keyboard?: boolean;\r\n\r\n focus?: boolean;\r\n /**\r\n * Shows the modal when initialized.\r\n */\r\n show?: boolean;\r\n /**\r\n * Ignore the backdrop click\r\n */\r\n ignoreBackdropClick?: boolean;\r\n /**\r\n * Css class for opened modal\r\n */\r\n class?: string;\r\n /**\r\n * Toggle animation\r\n */\r\n animated?: boolean;\r\n /**\r\n * Modal data\r\n */\r\n initialState?: Object;\r\n}\r\n\r\n\r\nexport const modalConfigDefaults: ModalOptions = {\r\n backdrop: true,\r\n keyboard: true,\r\n focus: true,\r\n show: false,\r\n ignoreBackdropClick: false,\r\n class: '',\r\n animated: true,\r\n initialState: {}\r\n};\r\n\r\nexport const CLASS_NAME: any = {\r\n SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\r\n BACKDROP: 'modal-backdrop',\r\n OPEN: 'modal-open',\r\n FADE: 'fade',\r\n IN: 'in', // bs3\r\n SHOW: 'show' // bs4\r\n};\r\n\r\nexport const SELECTOR: any = {\r\n DIALOG: '.modal-dialog',\r\n DATA_TOGGLE: '[data-toggle=\"modal\"]',\r\n DATA_DISMISS: '[data-dismiss=\"modal\"]',\r\n FIXED_CONTENT: '.navbar-fixed-top, .navbar-fixed-bottom, .is-fixed'\r\n};\r\n\r\nexport const TRANSITION_DURATIONS: any = {\r\n MODAL: 300,\r\n BACKDROP: 150\r\n};\r\n\r\nexport const DISMISS_REASONS = {\r\n BACKRDOP: 'backdrop-click',\r\n ESC: 'esc'\r\n};\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n OnDestroy,\r\n OnInit,\r\n Renderer2\r\n} from '@angular/core';\r\nimport {\r\n CLASS_NAME,\r\n DISMISS_REASONS,\r\n ModalOptions,\r\n TRANSITION_DURATIONS\r\n} from './modal-options.class';\r\nimport { BsModalService } from './bs-modal.service';\r\nimport { isBs3 } from '../utils/theme-provider';\r\n\r\n@Component({\r\n selector: 'modal-container',\r\n template: `\r\n <div [class]=\"'modal-dialog' + (config.class ? ' ' + config.class : '')\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n `,\r\n host: {\r\n class: 'modal',\r\n role: 'dialog',\r\n tabindex: '-1',\r\n '[attr.aria-modal]': 'true'\r\n }\r\n})\r\nexport class ModalContainerComponent implements OnInit, OnDestroy {\r\n config: ModalOptions;\r\n isShown = false;\r\n level: number;\r\n isAnimated: boolean;\r\n bsModalService: BsModalService;\r\n private isModalHiding = false;\r\n\r\n constructor(options: ModalOptions,\r\n protected _element: ElementRef,\r\n private _renderer: Renderer2) {\r\n this.config = Object.assign({}, options);\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.isAnimated) {\r\n this._renderer.addClass(\r\n this._element.nativeElement,\r\n CLASS_NAME.FADE\r\n );\r\n }\r\n this._renderer.setStyle(\r\n this._element.nativeElement,\r\n 'display',\r\n 'block'\r\n );\r\n setTimeout(() => {\r\n this.isShown = true;\r\n this._renderer.addClass(\r\n this._element.nativeElement,\r\n isBs3() ? CLASS_NAME.IN : CLASS_NAME.SHOW\r\n );\r\n }, this.isAnimated ? TRANSITION_DURATIONS.BACKDROP : 0);\r\n if (document && document.body) {\r\n if (this.bsModalService.getModalsCount() === 1) {\r\n this.bsModalService.checkScrollbar();\r\n this.bsModalService.setScrollbar();\r\n }\r\n this._renderer.addClass(document.body, CLASS_NAME.OPEN);\r\n }\r\n if (this._element.nativeElement) {\r\n this._element.nativeElement.focus();\r\n }\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event: any): void {\r\n if (\r\n this.config.ignoreBackdropClick ||\r\n this.config.backdrop === 'static' ||\r\n event.target !== this._element.nativeElement\r\n ) {\r\n return;\r\n }\r\n this.bsModalService.setDismissReason(DISMISS_REASONS.BACKRDOP);\r\n this.hide();\r\n }\r\n\r\n @HostListener('window:keydown.esc', ['$event'])\r\n onEsc(event: any): void {\r\n if (!this.isShown) {\r\n return;\r\n }\r\n\r\n if (event.keyCode === 27) {\r\n event.preventDefault();\r\n }\r\n\r\n if (\r\n this.config.keyboard &&\r\n this.level === this.bsModalService.getModalsCount()\r\n ) {\r\n this.bsModalService.setDismissReason(DISMISS_REASONS.ESC);\r\n this.hide();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.isShown) {\r\n this.hide();\r\n }\r\n }\r\n\r\n hide(): void {\r\n if (this.isModalHiding || !this.isShown) {\r\n return;\r\n }\r\n this.isModalHiding = true;\r\n this._renderer.removeClass(\r\n this._element.nativeElement,\r\n isBs3() ? CLASS_NAME.IN : CLASS_NAME.SHOW\r\n );\r\n setTimeout(() => {\r\n this.isShown = false;\r\n if (\r\n document &&\r\n document.body &&\r\n this.bsModalService.getModalsCount() === 1\r\n ) {\r\n this._renderer.removeClass(document.body, CLASS_NAME.OPEN);\r\n }\r\n this.bsModalService.hide(this.level);\r\n this.isModalHiding = false;\r\n }, this.isAnimated ? TRANSITION_DURATIONS.MODAL : 0);\r\n }\r\n}\r\n","import { window } from './facade/browser';\r\n\r\nexport class Utils {\r\n public static reflow(element: any): void {\r\n ((bs: any): void => bs)(element.offsetHeight);\r\n }\r\n\r\n // source: https://github.com/jquery/jquery/blob/master/src/css/var/getStyles.js\r\n public static getStyles(elem: any): any {\r\n // Support: IE <=11 only, Firefox <=30 (#15098, #14150)\r\n // IE throws on elements created in popups\r\n // FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\r\n let view = elem.ownerDocument.defaultView;\r\n\r\n if (!view || !view.opener) {\r\n view = window;\r\n }\r\n\r\n return view.getComputedStyle(elem);\r\n }\r\n}\r\n","import { Component, ElementRef, OnInit, Renderer2 } from '@angular/core';\r\n\r\nimport { CLASS_NAME } from './modal-options.class';\r\nimport { isBs3 } from '../utils/theme-provider';\r\nimport { Utils } from '../utils/utils.class';\r\n\r\n\r\n/** This component will be added as background layout for modals if enabled */\r\n@Component({\r\n selector: 'bs-modal-backdrop',\r\n template: ' ',\r\n host: { class: CLASS_NAME.BACKDROP }\r\n})\r\nexport class ModalBackdropComponent implements OnInit {\r\n get isAnimated(): boolean {\r\n return this._isAnimated;\r\n }\r\n\r\n set isAnimated(value: boolean) {\r\n this._isAnimated = value;\r\n // this.renderer.setElementClass(this.element.nativeElement, `${ClassName.FADE}`, value);\r\n }\r\n\r\n get isShown(): boolean {\r\n return this._isShown;\r\n }\r\n\r\n set isShown(value: boolean) {\r\n this._isShown = value;\r\n if (value) {\r\n this.renderer.addClass(\r\n this.element.nativeElement,\r\n `${CLASS_NAME.IN}`\r\n );\r\n } else {\r\n this.renderer.removeClass(\r\n this.element.nativeElement,\r\n `${CLASS_NAME.IN}`\r\n );\r\n }\r\n if (!isBs3()) {\r\n if (value) {\r\n this.renderer.addClass(\r\n this.element.nativeElement,\r\n `${CLASS_NAME.SHOW}`\r\n );\r\n } else {\r\n this.renderer.removeClass(\r\n this.element.nativeElement,\r\n `${CLASS_NAME.SHOW}`\r\n );\r\n }\r\n }\r\n }\r\n\r\n element: ElementRef;\r\n renderer: Renderer2;\r\n\r\n protected _isAnimated: boolean;\r\n protected _isShown = false;\r\n\r\n constructor(element: ElementRef, renderer: Renderer2) {\r\n this.element = element;\r\n this.renderer = renderer;\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.isAnimated) {\r\n this.renderer.addClass(\r\n this.element.nativeElement,\r\n `${CLASS_NAME.FADE}`\r\n );\r\n Utils.reflow(this.element.nativeElement);\r\n }\r\n this.isShown = true;\r\n }\r\n}\r\n","/* tslint:disable:max-file-line-count */\r\n// todo: should we support enforce focus in?\r\n// todo: in original bs there are was a way to prevent modal from showing\r\n// todo: original modal had resize events\r\n\r\nimport {\r\n ComponentRef, Directive, ElementRef, EventEmitter, HostListener, Input,\r\n OnDestroy, OnInit, Output, Renderer2, ViewContainerRef\r\n} from '@angular/core';\r\n\r\nimport { document, window } from '../utils/facade/browser';\r\n\r\nimport { isBs3 } from '../utils/theme-provider';\r\nimport { Utils } from '../utils/utils.class';\r\nimport { ModalBackdropComponent } from './modal-backdrop.component';\r\nimport {\r\n CLASS_NAME, DISMISS_REASONS, modalConfigDefaults, ModalOptions\r\n} from './modal-options.class';\r\nimport { ComponentLoader } from '../utils/component-loader/component-loader.class';\r\nimport { ComponentLoaderFactory } from '../utils/component-loader/component-loader.factory';\r\n\r\nconst TRANSITION_DURATION = 300;\r\nconst BACKDROP_TRANSITION_DURATION = 150;\r\n\r\n/** Mark any code with directive to show it's content in modal */\r\n@Directive({\r\n selector: '[bsModal]',\r\n exportAs: 'bs-modal'\r\n})\r\nexport class ModalDirective implements OnDestroy, OnInit {\r\n /** allows to set modal configuration via element property */\r\n @Input()\r\n set config(conf: ModalOptions) {\r\n this._config = this.getConfig(conf);\r\n }\r\n\r\n get config(): ModalOptions {\r\n return this._config;\r\n }\r\n\r\n /** This event fires immediately when the `show` instance method is called. */\r\n @Output()\r\n onShow: EventEmitter<ModalDirective> = new EventEmitter<ModalDirective>();\r\n /** This event is fired when the modal has been made visible to the user\r\n * (will wait for CSS transitions to complete)\r\n */\r\n @Output()\r\n onShown: EventEmitter<ModalDirective> = new EventEmitter<ModalDirective>();\r\n /** This event is fired immediately when\r\n * the hide instance method has been called.\r\n */\r\n @Output()\r\n onHide: EventEmitter<ModalDirective> = new EventEmitter<ModalDirective>();\r\n /** This event is fired when the modal has finished being\r\n * hidden from the user (will wait for CSS transitions to complete).\r\n */\r\n @Output()\r\n onHidden: EventEmitter<ModalDirective> = new EventEmitter<ModalDirective>();\r\n\r\n /** This field contains last dismiss reason.\r\n * Possible values: `backdrop-click`, `esc` and `null`\r\n * (if modal was closed by direct call of `.hide()`).\r\n */\r\n dismissReason: string;\r\n\r\n get isShown(): boolean {\r\n return this._isShown;\r\n }\r\n\r\n protected _config: ModalOptions;\r\n protected _isShown = false;\r\n\r\n protected isBodyOverflowing = false;\r\n protected originalBodyPadding = 0;\r\n protected scrollbarWidth = 0;\r\n\r\n protected timerHideModal: any = 0;\r\n protected timerRmBackDrop: any = 0;\r\n\r\n // reference to backdrop component\r\n protected backdrop: ComponentRef<ModalBackdropComponent>;\r\n private _backdrop: ComponentLoader<ModalBackdropComponent>;\r\n\r\n private isNested = false;\r\n\r\n constructor(private _element: ElementRef,\r\n _viewContainerRef: ViewContainerRef,\r\n private _renderer: Renderer2,\r\n clf: ComponentLoaderFactory) {\r\n this._backdrop = clf.createLoader<ModalBackdropComponent>(\r\n _element,\r\n _viewContainerRef,\r\n _renderer\r\n );\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event: any): void {\r\n if (\r\n this.config.ignoreBackdropClick ||\r\n this.config.backdrop === 'static' ||\r\n event.target !== this._element.nativeElement\r\n ) {\r\n return;\r\n }\r\n this.dismissReason = DISMISS_REASONS.BACKRDOP;\r\n this.hide(event);\r\n }\r\n\r\n // todo: consider preventing default and stopping propagation\r\n @HostListener('keydown.esc', ['$event'])\r\n onEsc(event: any): void {\r\n if (!this._isShown) {\r\n return;\r\n }\r\n\r\n if (event.keyCode === 27) {\r\n event.preventDefault();\r\n }\r\n\r\n if (this.config.keyboard) {\r\n this.dismissReason = DISMISS_REASONS.ESC;\r\n this.hide();\r\n }\r\n }\r\n\r\n ngOnDestroy(): any {\r\n this.config = void 0;\r\n if (this._isShown) {\r\n this._isShown = false;\r\n this.hideModal();\r\n this._backdrop.dispose();\r\n }\r\n }\r\n\r\n ngOnInit(): any {\r\n this._config = this._config || this.getConfig();\r\n setTimeout(() => {\r\n if (this._config.show) {\r\n this.show();\r\n }\r\n }, 0);\r\n }\r\n\r\n /* Public methods */\r\n\r\n /** Allows to manually toggle modal visibility */\r\n toggle(): void {\r\n return this._isShown ? this.hide() : this.show();\r\n }\r\n\r\n /** Allows to manually open modal */\r\n show(): void {\r\n this.dismissReason = null;\r\n this.onShow.emit(this);\r\n if (this._isShown) {\r\n return;\r\n }\r\n clearTimeout(this.timerHideModal);\r\n clearTimeout(this.timerRmBackDrop);\r\n\r\n this._isShown = true;\r\n\r\n this.checkScrollbar();\r\n this.setScrollbar();\r\n\r\n if (document && document.body) {\r\n if (document.body.classList.contains(CLASS_NAME.OPEN)) {\r\n this.isNested = true;\r\n } else {\r\n this._renderer.addClass(document.body, CLASS_NAME.OPEN);\r\n }\r\n }\r\n\r\n this.showBackdrop(() => {\r\n this.showElement();\r\n });\r\n }\r\n\r\n /** Allows to manually close modal */\r\n hide(event?: Event): void {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n this.onHide.emit(this);\r\n\r\n // todo: add an option to prevent hiding\r\n if (!this._isShown) {\r\n return;\r\n }\r\n\r\n clearTimeout(this.timerHideModal);\r\n clearTimeout(this.timerRmBackDrop);\r\n\r\n this._isShown = false;\r\n this._renderer.removeClass(this._element.nativeElement, CLASS_NAME.IN);\r\n if (!isBs3()) {\r\n this._renderer.removeClass(this._element.nativeElement, CLASS_NAME.SHOW);\r\n }\r\n // this._addClassIn = false;\r\n\r\n if (this._config.animated) {\r\n this.timerHideModal = setTimeout(\r\n () => this.hideModal(),\r\n TRANSITION_DURATION\r\n );\r\n } else {\r\n this.hideModal();\r\n }\r\n }\r\n\r\n /** Private methods @internal */\r\n protected getConfig(config?: ModalOptions): ModalOptions {\r\n return Object.assign({}, modalConfigDefaults, config);\r\n }\r\n\r\n /**\r\n * Show dialog\r\n * @internal\r\n */\r\n protected showElement(): void {\r\n // todo: replace this with component loader usage\r\n if (\r\n !this._element.nativeElement.parentNode ||\r\n this._element.nativeElement.parentNode.nodeType !== Node.ELEMENT_NODE\r\n ) {\r\n // don't move modals dom position\r\n if (document && document.body) {\r\n document.body.appendChild(this._element.nativeElement);\r\n }\r\n }\r\n\r\n this._renderer.setAttribute(\r\n this._element.nativeElement,\r\n 'aria-hidden',\r\n 'false'\r\n );\r\n this._renderer.setAttribute(\r\n this._element.nativeElement,\r\n 'aria-modal',\r\n 'true'\r\n );\r\n this._renderer.setStyle(\r\n this._element.nativeElement,\r\n 'display',\r\n 'block'\r\n );\r\n this._renderer.setProperty(\r\n this._element.nativeElement,\r\n 'scrollTop',\r\n 0\r\n );\r\n\r\n if (this._config.animated) {\r\n Utils.reflow(this._element.nativeElement);\r\n }\r\n\r\n // this._addClassIn = true;\r\n this._renderer.addClass(this._element.nativeElement, CLASS_NAME.IN);\r\n if (!isBs3()) {\r\n this._renderer.addClass(this._element.nativeElement, CLASS_NAME.SHOW);\r\n }\r\n\r\n const transitionComplete = () => {\r\n if (this._config.focus) {\r\n this._element.nativeElement.focus();\r\n }\r\n this.onShown.emit(this);\r\n };\r\n\r\n if (this._config.animated) {\r\n setTimeout(transitionComplete, TRANSITION_DURATION);\r\n } else {\r\n transitionComplete();\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected hideModal(): void {\r\n this._renderer.setAttribute(\r\n this._element.nativeElement,\r\n 'aria-hidden',\r\n 'true'\r\n );\r\n this._renderer.setStyle(\r\n this._element.nativeElement,\r\n 'display',\r\n 'none'\r\n );\r\n this.showBackdrop(() => {\r\n if (!this.isNested) {\r\n if (document && document.body) {\r\n this._renderer.removeClass(document.body, CLASS_NAME.OPEN);\r\n }\r\n this.resetScrollbar();\r\n }\r\n this.resetAdjustments();\r\n this.focusOtherModal();\r\n this.onHidden.emit(this);\r\n });\r\n }\r\n\r\n // todo: original show was calling a callback when done, but we can use\r\n // promise\r\n /** @internal */\r\n protected showBackdrop(callback?: Function): void {\r\n if (\r\n this._isShown &&\r\n this.config.backdrop &&\r\n (!this.backdrop || !this.backdrop.instance.isShown)\r\n ) {\r\n this.removeBackdrop();\r\n this._backdrop\r\n .attach(ModalBackdropComponent)\r\n .to('body')\r\n .show({isAnimated: this._config.animated});\r\n this.backdrop = this._backdrop._componentRef;\r\n\r\n if (!callback) {\r\n return;\r\n }\r\n\r\n if (!this._config.animated) {\r\n callback();\r\n\r\n return;\r\n }\r\n\r\n setTimeout(callback, BACKDROP_TRANSITION_DURATION);\r\n } else if (!this._isShown && this.backdrop) {\r\n this.backdrop.instance.isShown = false;\r\n\r\n const callbackRemove = () => {\r\n this.removeBackdrop();\r\n if (callback) {\r\n callback();\r\n }\r\n };\r\n\r\n if (this.backdrop.instance.isAnimated) {\r\n this.timerRmBackDrop = setTimeout(\r\n callbackRemove,\r\n BACKDROP_TRANSITION_DURATION\r\n );\r\n } else {\r\n callbackRemove();\r\n }\r\n } else if (callback) {\r\n callback();\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected removeBackdrop(): void {\r\n this._backdrop.hide();\r\n }\r\n\r\n /** Events tricks */\r\n\r\n // no need for it\r\n // protected setEscapeEvent():void {\r\n // if (this._isShown && this._config.keyboard) {\r\n // $(this._element).on(Event.KEYDOWN_DISMISS, (event) => {\r\n // if (event.which === 27) {\r\n // this.hide()\r\n // }\r\n // })\r\n //\r\n // } else if (!this._isShown) {\r\n // $(this._element).off(Event.KEYDOWN_DISMISS)\r\n // }\r\n // }\r\n\r\n // protected setResizeEvent():void {\r\n // console.log(this.renderer.listenGlobal('', Event.RESIZE));\r\n // if (this._isShown) {\r\n // $(window).on(Event.RESIZE, $.proxy(this._handleUpdate, this))\r\n // } else {\r\n // $(window).off(Event.RESIZE)\r\n // }\r\n // }\r\n\r\n protected focusOtherModal() {\r\n if (this._element.nativeElement.parentElement == null) return;\r\n const otherOpenedModals = this._element.nativeElement.parentElement.querySelectorAll('.in[bsModal]');\r\n if (!otherOpenedModals.length) {\r\n return;\r\n }\r\n otherOpenedModals[otherOpenedModals.length - 1].focus();\r\n }\r\n\r\n /** @internal */\r\n protected resetAdjustments(): void {\r\n this._renderer.setStyle(\r\n this._element.nativeElement,\r\n 'paddingLeft',\r\n ''\r\n );\r\n this._renderer.setStyle(\r\n this._element.nativeElement,\r\n 'paddingRight',\r\n ''\r\n );\r\n }\r\n\r\n /** Scroll bar tricks */\r\n /** @internal */\r\n protected checkScrollbar(): void {\r\n this.isBodyOverflowing = document.body.clientWidth < window.innerWidth;\r\n this.scrollbarWidth = this.getScrollbarWidth();\r\n }\r\n\r\n protected setScrollbar(): void {\r\n if (!document) {\r\n return;\r\n }\r\n\r\n this.originalBodyPadding = parseInt(\r\n window\r\n .getComputedStyle(document.body)\r\n .getPropertyValue('padding-right') || 0,\r\n 10\r\n );\r\n\r\n if (this.isBodyOverflowing) {\r\n document.body.style.paddingRight = `${this.originalBodyPadding +\r\n this.scrollbarWidth}px`;\r\n }\r\n }\r\n\r\n protected resetScrollbar(): void {\r\n document.body.style.paddingRight = this.originalBodyPadding + 'px';\r\n }\r\n\r\n // thx d.walsh\r\n protected getScrollbarWidth(): number {\r\n const scrollDiv = this._renderer.createElement('div');\r\n this._renderer.addClass(scrollDiv, CLASS_NAME.SCROLLBAR_MEASURER);\r\n this._renderer.appendChild(document.body, scrollDiv);\r\n const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\r\n this._renderer.removeChild(document.body, scrollDiv);\r\n\r\n return scrollbarWidth;\r\n }\r\n}\r\n","import {\r\n ComponentRef,\r\n Injectable,\r\n TemplateRef,\r\n EventEmitter, Renderer2, RendererFactory2\r\n} from '@angular/core';\r\n\r\nimport { ComponentLoader } from '../utils/component-loader/component-loader.class';\r\nimport { ComponentLoaderFactory } from '../utils/component-loader/component-loader.factory';\r\nimport { ModalBackdropComponent } from './modal-backdrop.component';\r\nimport { ModalContainerComponent } from './modal-container.component';\r\nimport {\r\n CLASS_NAME,\r\n modalConfigDefaults,\r\n ModalOptions,\r\n TRANSITION_DURATIONS\r\n} from './modal-options.class';\r\nimport { BsModalRef } from './bs-modal-ref.service';\r\n\r\n@Injectable()\r\nexport class BsModalService {\r\n // constructor props\r\n config: ModalOptions = modalConfigDefaults;\r\n\r\n onShow: EventEmitter<any> = new EventEmitter();\r\n onShown: EventEmitter<any> = new EventEmitter();\r\n onHide: EventEmitter<any> = new EventEmitter();\r\n onHidden: EventEmitter<any> = new EventEmitter();\r\n\r\n protected isBodyOverflowing = false;\r\n protected originalBodyPadding = 0;\r\n\r\n protected scrollbarWidth = 0;\r\n\r\n protected backdropRef: ComponentRef<ModalBackdropComponent>;\r\n private _backdropLoader: ComponentLoader<ModalBackdropComponent>;\r\n private modalsCount = 0;\r\n private lastDismissReason = '';\r\n\r\n private loaders: ComponentLoader<ModalContainerComponent>[] = [];\r\n\r\n private _renderer: Renderer2;\r\n\r\n constructor(rendererFactory: RendererFactory2, private clf: ComponentLoaderFactory) {\r\n this._backdropLoader = this.clf.createLoader<ModalBackdropComponent>(\r\n null,\r\n null,\r\n null\r\n );\r\n this._renderer = rendererFactory.createRenderer(null, null);\r\n }\r\n\r\n /** Shows a modal */\r\n show(content: string | TemplateRef<any> | any, config?: ModalOptions): BsModalRef {\r\n this.modalsCount++;\r\n this._createLoaders();\r\n this.config = Object.assign({}, modalConfigDefaults, config);\r\n this._showBackdrop();\r\n this.lastDismissReason = null;\r\n\r\n return this._showModal(content);\r\n }\r\n\r\n hide(level: number) {\r\n if (this.modalsCount === 1) {\r\n this._hideBackdrop();\r\n this.resetScrollbar();\r\n }\r\n this.modalsCount = this.modalsCount >= 1 ? this.modalsCount - 1 : 0;\r\n setTimeout(() => {\r\n this._hideModal(level);\r\n this.removeLoaders(level);\r\n }, this.config.animated ? TRANSITION_DURATIONS.BACKDROP : 0);\r\n }\r\n\r\n _showBackdrop(): void {\r\n const isBackdropEnabled =\r\n this.config.backdrop || this.config.backdrop === 'static';\r\n const isBackdropInDOM =\r\n !this.backdropRef || !this.backdropRef.instance.isShown;\r\n\r\n if (this.modalsCount === 1) {\r\n this.removeBackdrop();\r\n\r\n if (isBackdropEnabled && isBackdropInDOM) {\r\n this._backdropLoader\r\n .attach(ModalBackdropComponent)\r\n .to('body')\r\n .show({ isAnimated: this.config.animated });\r\n this.backdropRef = this._backdropLoader._componentRef;\r\n }\r\n }\r\n }\r\n\r\n _hideBackdrop(): void {\r\n if (!this.backdropRef) {\r\n return;\r\n }\r\n this.backdropRef.instance.isShown = false;\r\n const duration = this.config.animated ? TRANSITION_DURATIONS.BACKDROP : 0;\r\n setTimeout(() => this.removeBackdrop(), duration);\r\n }\r\n\r\n _showModal(content: any): BsModalRef {\r\n const modalLoader = this.loaders[this.loaders.length - 1];\r\n const bsModalRef = new BsModalRef();\r\n const modalContainerRef = modalLoader\r\n .provide({ provide: ModalOptions, useValue: this.config })\r\n .provide({ provide: BsModalRef, useValue: bsModalRef })\r\n .attach(ModalContainerComponent)\r\n .to('body')\r\n .show({content, isAnimated: this.config.animated, initialState: this.config.initialState, bsModalService: this});\r\n modalContainerRef.instance.level = this.getModalsCount();\r\n bsModalRef.hide = () => {\r\n modalContainerRef.instance.hide();\r\n };\r\n bsModalRef.content = modalLoader.getInnerComponent() || null;\r\n\r\n return bsModalRef;\r\n }\r\n\r\n _hideModal(level: number): void {\r\n const modalLoader = this.loaders[level - 1];\r\n if (modalLoader) {\r\n modalLoader.hide();\r\n }\r\n }\r\n\r\n getModalsCount(): number {\r\n return this.modalsCount;\r\n }\r\n\r\n setDismissReason(reason: string) {\r\n this.lastDismissReason = reason;\r\n }\r\n\r\n removeBackdrop(): void {\r\n this._backdropLoader.hide();\r\n this.backdropRef = null;\r\n }\r\n\r\n /** AFTER PR MERGE MODAL.COMPONENT WILL BE USING THIS CODE */\r\n /** Scroll bar tricks */\r\n /** @internal */\r\n checkScrollbar(): void {\r\n this.isBodyOverflowing = document.body.clientWidth < window.innerWidth;\r\n this.scrollbarWidth = this.getScrollbarWidth();\r\n }\r\n\r\n setScrollbar(): void {\r\n if (!document) {\r\n return;\r\n }\r\n\r\n this.originalBodyPadding = parseInt(\r\n window\r\n .getComputedStyle(document.body)\r\n .getPropertyValue('padding-right') || '0',\r\n 10\r\n );\r\n\r\n if (this.isBodyOverflowing) {\r\n document.body.style.paddingRight = `${this.originalBodyPadding +\r\n this.scrollbarWidth}px`;\r\n }\r\n }\r\n\r\n private resetScrollbar(): void {\r\n document.body.style.paddingRight = `${this.originalBodyPadding}px`;\r\n }\r\n\r\n // thx d.walsh\r\n private getScrollbarWidth(): number {\r\n const scrollDiv = this._renderer.createElement('div');\r\n this._renderer.addClass(scrollDiv, CLASS_NAME.SCROLLBAR_MEASURER);\r\n this._renderer.appendChild(document.body, scrollDiv);\r\n const scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\r\n this._renderer.removeChild(document.body, scrollDiv);\r\n\r\n return scrollbarWidth;\r\n }\r\n\r\n private _createLoaders(): void {\r\n const loader = this.clf.createLoader<ModalContainerComponent>(\r\n null,\r\n null,\r\n null\r\n );\r\n this.copyEvent(loader.onBeforeShow, this.onShow);\r\n this.copyEvent(loader.onShown, this.onShown);\r\n this.copyEvent(loader.onBeforeHide, this.onHide);\r\n this.copyEvent(loader.onHidden, this.onHidden);\r\n this.loaders.push(loader);\r\n }\r\n\r\n private removeLoaders(level: number): void {\r\n this.loaders.splice(level - 1, 1);\r\n this.loaders.forEach(\r\n (loader: ComponentLoader<ModalContainerComponent>, i: number) => {\r\n loader.instance.level = i + 1;\r\n }\r\n );\r\n }\r\n\r\n private copyEvent(from: EventEmitter<any>, to: EventEmitter<any>) {\r\n from.subscribe(() => {\r\n to.emit(this.lastDismissReason);\r\n });\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\n\r\nimport { ModalBackdropComponent } from './modal-backdrop.component';\r\nimport { ModalDirective } from './modal.directive';\r\nimport { PositioningService } from '../utils/positioning/index';\r\nimport { ComponentLoaderFactory } from '../utils/component-loader/index';\r\nimport { ModalContainerComponent } from './modal-container.component';\r\nimport { BsModalService } from './bs-modal.service';\r\n\r\n@NgModule({\r\n declarations: [\r\n ModalBackdropComponent,\r\n ModalDirective,\r\n ModalContainerComponent\r\n ],\r\n exports: [ModalBackdropComponent, ModalDirective],\r\n entryComponents: [ModalBackdropComponent, ModalContainerComponent]\r\n})\r\nexport class ModalModule {\r\n static forRoot(): ModuleWithProviders {\r\n return {\r\n ngModule: ModalModule,\r\n providers: [BsModalService, ComponentLoaderFactory, PositioningService]\r\n };\r\n }\r\n}\r\n","import {ElementRef, EventEmitter, Injectable, OnDestroy} from '@angular/core';\r\nimport {BsDropdownDirective} from '../dropdown/index';\r\nimport {Subscription} from 'rxjs/Subscription';\r\nimport {BsDropdownState} from '../dropdown/dropdown.state';\r\nimport {DropdownItemDirective} from '../dropdown/dropdown-item.directive';\r\n\r\n@Injectable()\r\nexport class NavbarState implements OnDestroy {\r\n private dropdownInstances: BsDropdownDirective[] = [];\r\n private menuItems: DropdownItemDirective[] = [];\r\n private subscriptions: Subscription[] = [];\r\n\r\n private level1Dropdown: BsDropdownDirective; // 当前下拉菜单的主菜单,\r\n private level2Dropdown: BsDropdownDirective; // 当前下拉菜单的子菜单\r\n\r\n onItemClick = new EventEmitter<string>();\r\n\r\n autoClose: boolean;\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n addDropdown(dropdown: BsDropdownDirective): void {\r\n if (!this.dropdownInstances.find((item) => item === dropdown)) {\r\n this.dropdownInstances.push(dropdown);\r\n this.subscribeDropdown(dropdown);\r\n dropdown.onShown.subscribe(() => setTimeout(() => {\r\n dropdown.childDropdowns.forEach((item: BsDropdownDirective) => this.addDropdown(item));\r\n }));\r\n }\r\n }\r\n\r\n addMenuItem(menuItem: DropdownItemDirective): void {\r\n if (!this.menuItems.find((item) => item === menuItem)) {\r\n this.menuItems.push(menuItem);\r\n this.subscribeMenuItem(menuItem);\r\n }\r\n }\r\n\r\n private subscribeDropdown(dropdown: BsDropdownDirective): void {\r\n // 在下拉菜单显示、隐藏时,记录下显示状态。\r\n // this.subscriptions.push(\r\n // dropdown.onShown.subscribe((value) => {\r\n // debugger;\r\n // if(dropdown.isSubMenu) {\r\n //\r\n // }\r\n // })\r\n // );\r\n //\r\n // this.subscriptions.push(\r\n // dropdown.onHidden.subscribe((value) => {\r\n //\r\n // })\r\n // );\r\n\r\n this.subscriptions.push(\r\n dropdown.state.onClick.subscribe((event: Event) => {\r\n if (dropdown.level === 1) {\r\n if (dropdown.isOpen && this.level1Dropdown === dropdown) {\r\n this.innerHideL1Dropdown();\r\n } else {\r\n this.innerShowL1Dropdown(dropdown);\r\n }\r\n } else if (dropdown.level === 2) {\r\n if (!dropdown.isOpen || this.level2Dropdown !== dropdown) {\r\n this.innerShowL2Dropdown(dropdown);\r\n }\r\n }\r\n event.stopPropagation();\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n dropdown.state.onHover.subscribe(() => {\r\n if (!this.level1Dropdown) {\r\n // 菜单没展开,鼠标悬停没有效果\r\n return;\r\n }\r\n this.show(dropdown);\r\n })\r\n );\r\n }\r\n\r\n private subscribeMenuItem(menuItem: DropdownItemDirective): void {\r\n this.subscriptions.push(\r\n menuItem.onHover.subscribe(() => {\r\n if (!this.level1Dropdown) {\r\n return;\r\n }\r\n if (this.level1Dropdown.containsItem(menuItem)) {\r\n this.innerHideL2Dropdown();\r\n }\r\n })\r\n );\r\n\r\n this.subscriptions.push(\r\n menuItem.onClick.subscribe((command: string) => {\r\n this.onItemClick.emit(command);\r\n })\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.subscriptions.forEach((sub) => {\r\n sub.unsubscribe();\r\n });\r\n }\r\n\r\n hideCurrentDropdown(): void {\r\n if (this.level2Dropdown) {\r\n this.innerHideL2Dropdown();\r\n } else {\r\n this.innerHideL1Dropdown();\r\n }\r\n }\r\n\r\n hideAllDropdown(): void {\r\n this.innerHideL2Dropdown();\r\n this.innerHideL1Dropdown();\r\n }\r\n\r\n show(dropdown: BsDropdownDirective): void {\r\n if (dropdown.level === 1) {\r\n if (dropdown !== this.level1Dropdown) {\r\n this.innerShowL1Dropdown(dropdown);\r\n }\r\n this.innerHideL2Dropdown();\r\n } else if (dropdown.level === 2) {\r\n if (dropdown !== this.level2Dropdown) {\r\n this.innerShowL2Dropdown(dropdown);\r\n }\r\n }\r\n\r\n\r\n\r\n ///////////////////////////////\r\n /*if (this.isMenuShown && this.isSubMenuShown && this.parentDropdown && this.parentDropdown.containsItem(dropdown)) {\r\n // 要显示的是子菜单,不是当前子菜单\r\n if (this.currentDropdown && this.currentDropdown !== dropdown) {\r\n this.currentDropdown.hide();\r\n }\r\n dropdown.show();\r\n this.currentDropdown = dropdown;\r\n this.isSubMenuShown = true;\r\n } else if (this.isMenuShown && !this.isSubMenuShown && this.currentDropdown && this.currentDropdown.containsItem(dropdown)) {\r\n\r\n } else {\r\n // 主菜单\r\n if (this.isSubMenuShown && this.currentDropdown && this.parentDropdown) {\r\n this.currentDropdown.hide();\r\n this.currentDropdown = null;\r\n this.isSubMenuShown = false;\r\n }\r\n if (this.isMenuShown && this.currentDropdown && this.currentDropdown !== dropdown) {\r\n this.currentDropdown.hide();\r\n }\r\n dropdown.show();\r\n this.currentDropdown = dropdown;\r\n this.isMenuShown = true;\r\n }*/\r\n }\r\n\r\n hide(dropdown: BsDropdownDirective): void {\r\n // if\r\n }\r\n\r\n private innerShowL1Dropdown(target: BsDropdownDirective): void {\r\n if (this.level1Dropdown) {\r\n this.level1Dropdown.hide();\r\n }\r\n target.show();\r\n this.level1Dropdown = target;\r\n }\r\n\r\n private innerHideL1Dropdown(): void {\r\n if (this.level1Dropdown) {\r\n this.level1Dropdown.hide();\r\n this.level1Dropdown = null;\r\n }\r\n }\r\n\r\n private innerShowL2Dropdown(target: BsDropdownDirective): void {\r\n if (this.level2Dropdown) {\r\n this.level2Dropdown.hide();\r\n }\r\n target.show();\r\n this.level2Dropdown = target;\r\n }\r\n\r\n private innerHideL2Dropdown(): void {\r\n if (this.level2Dropdown) {\r\n this.level2Dropdown.hide();\r\n this.level2Dropdown = null;\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n/** Default dropdown configuration */\r\n@Injectable()\r\nexport class BsDropdownConfig {\r\n /** default dropdown auto closing behavior */\r\n autoClose = true;\r\n}\r\n","import {ElementRef, EventEmitter, Injectable} from '@angular/core';\r\nimport { BsComponentRef } from '../utils/component-loader/bs-component-ref.class';\r\n\r\n@Injectable()\r\nexport class BsDropdownState {\r\n direction: 'down' | 'up' = 'down';\r\n autoClose: boolean;\r\n isOpenChange = new EventEmitter<boolean>();\r\n isDisabledChange = new EventEmitter<boolean>();\r\n toggleClick = new EventEmitter<boolean>();\r\n onHover = new EventEmitter<any>();\r\n onClick = new EventEmitter<Event>();\r\n\r\n /**\r\n * Content to be displayed as popover.\r\n */\r\n dropdownMenu: Promise<BsComponentRef<any>>;\r\n resolveDropdownMenu: (componentRef: BsComponentRef<any>) => void;\r\n\r\n constructor() {\r\n this.dropdownMenu = new Promise((resolve) => {\r\n this.resolveDropdownMenu = resolve;\r\n });\r\n }\r\n }\r\n","import { window } from './facade/browser';\r\n\r\nexport function isBs3(): boolean {\r\n return window.__theme === 'bs4';\r\n}\r\n","import {\r\n ChangeDetectionStrategy, Component, OnDestroy, HostBinding, ChangeDetectorRef, Renderer2,\r\n ElementRef\r\n} from '@angular/core';\r\nimport { BsDropdownState } from './dropdown.state';\r\nimport {isBs3} from '../utils/ng2-bootstrap-config';\r\n\r\n@Component({\r\n selector: 'mdb-dropdown-container',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n template: `\r\n <div [class.dropup]=\"direction === 'up'\"\r\n [class.dropdown]=\"direction === 'down'\"\r\n [class.show]=\"isOpen\"\r\n [class.open]=\"isOpen\">\r\n <ng-content></ng-content>\r\n </div>\r\n `\r\n})\r\nexport class BsDropdownContainerComponent implements OnDestroy {\r\n isOpen = false;\r\n\r\n @HostBinding('style.display') display = 'block';\r\n @HostBinding('style.position') position = 'absolute';\r\n\r\n get direction(): 'down' | 'up' {\r\n return this._state.direction;\r\n }\r\n\r\n private _subscription: any;\r\n\r\n constructor(\r\n private _state: BsDropdownState,\r\n private cd: ChangeDetectorRef,\r\n private _renderer: Renderer2,\r\n _element: ElementRef\r\n ) {\r\n this._subscription = _state.isOpenChange.subscribe((value: boolean) => {\r\n this.isOpen = value;\r\n const dropdown = _element.nativeElement.querySelector('.dropdown-menu');\r\n if (dropdown && !isBs3()) {\r\n this._renderer.addClass(dropdown, 'show');\r\n if (dropdown.classList.contains('dropdown-menu-right')) {\r\n this._renderer.setStyle(dropdown, 'left', 'auto');\r\n this._renderer.setStyle(dropdown, 'right', '0');\r\n }\r\n if (this.direction === 'up') {\r\n this._renderer.setStyle(dropdown, 'top', 'auto');\r\n this._renderer.setStyle(\r\n dropdown,\r\n 'transform',\r\n 'translateY(-101%)'\r\n );\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._subscription.unsubscribe();\r\n }\r\n}\r\n","// tslint:disable:max-file-line-count\r\nimport {\r\n ContentChildren,\r\n Directive, ElementRef, EmbeddedViewRef, EventEmitter, Input, OnDestroy,\r\n OnInit, Output, Renderer2, ViewContainerRef\r\n} from '@angular/core';\r\nimport { filter } from 'rxjs/operators';\r\nimport { Subscription } from 'rxjs/Subscription';\r\nimport { ComponentLoader, ComponentLoaderFactory } from '../utils/component-loader/index';\r\n\r\nimport { BsDropdownConfig } from './dropdown.config';\r\nimport { BsDropdownContainerComponent } from './dropdown-container.component';\r\nimport { BsDropdownState } from './dropdown.state';\r\nimport { BsComponentRef } from '../utils/component-loader/bs-component-ref.class';\r\nimport { BsDropdownMenuDirective } from '.';\r\nimport { isBs3 } from '../utils/ng2-bootstrap-config';\r\nimport {DropdownItemDirective} from './dropdown-item.directive';\r\n\r\n@Directive({\r\n selector: '[mdbDropdown],[dropdown]',\r\n exportAs: 'bs-dropdown',\r\n providers: [BsDropdownState],\r\n host: {\r\n '[class.dropup]': 'dropup',\r\n '[class.open]': 'isOpen',\r\n '[class.show]': 'isOpen && isBs4'\r\n }\r\n})\r\nexport class BsDropdownDirective implements OnInit, OnDestroy {\r\n /**\r\n * Placement of a popover. Accepts: \"top\", \"bottom\", \"left\", \"right\"\r\n */\r\n @Input() placement: string;\r\n /**\r\n * Specifies events that should trigger. Supports a space separated list of\r\n * event names.\r\n */\r\n @Input() triggers: string;\r\n /**\r\n * A selector specifying the element the popover should be appended to.\r\n * Currently only supports \"body\".\r\n */\r\n @Input() container: string;\r\n\r\n /**\r\n * This attribute indicates that the dropdown should be opened upwards\r\n */\r\n @Input() dropup: boolean;\r\n\r\n /**\r\n * Indicates that dropdown will be closed on item or document click,\r\n * and after pressing ESC\r\n */\r\n @Input()\r\n set autoClose(value: boolean) {\r\n this._state.autoClose = value;\r\n }\r\n\r\n get autoClose(): boolean {\r\n return this._state.autoClose;\r\n }\r\n\r\n /**\r\n * Disables dropdown toggle and hides dropdown menu if opened\r\n */\r\n @Input()\r\n set isDisabled(value: boolean) {\r\n this._isDisabled = value;\r\n this._state.isDisabledChange.emit(value);\r\n if (value) {\r\n this.hide();\r\n }\r\n }\r\n\r\n get isDisabled(): boolean {\r\n return this._isDisabled;\r\n }\r\n\r\n /**\r\n * Returns whether or not the popover is currently being shown\r\n */\r\n @Input()\r\n get isOpen(): boolean {\r\n if (this._showInline) {\r\n return this._isInlineOpen;\r\n }\r\n\r\n return this._dropdown.isShown;\r\n }\r\n\r\n set isOpen(value: boolean) {\r\n if (value) {\r\n this.show();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n\r\n get state(): BsDropdownState {\r\n return this._state;\r\n }\r\n\r\n private _level: number;\r\n\r\n @Input('dropdown')\r\n set level(value: number) {\r\n this._level = value;\r\n }\r\n\r\n get level(): number {\r\n return this._level || 1;\r\n }\r\n\r\n get elementRef(): ElementRef {\r\n return this._elementRef;\r\n }\r\n\r\n /**\r\n * Emits an event when isOpen change\r\n */\r\n @Output() isOpenChange: EventEmitter<any>;\r\n\r\n /**\r\n * Emits an event when the popover is shown\r\n */\r\n @Output() onShown: EventEmitter<any>;\r\n\r\n /**\r\n * Emits an event when the popover is hidden\r\n */\r\n @Output() onHidden: EventEmitter<any>;\r\n\r\n @ContentChildren(BsDropdownDirective) childDropdowns;\r\n\r\n get isBs4(): boolean {\r\n return !isBs3();\r\n }\r\n\r\n // todo: move to component loader\r\n private _isInlineOpen = false;\r\n\r\n private get _showInline(): boolean {\r\n return !this.container;\r\n }\r\n\r\n // private _inlinedMenu: EmbeddedViewRef<BsDropdownMenuDirective>;\r\n private _inlinedMenu: EmbeddedViewRef<BsDropdownContainerComponent>;\r\n\r\n private _isDisabled: boolean;\r\n private _dropdown: ComponentLoader<BsDropdownContainerComponent>;\r\n private _subscriptions: Subscription[] = [];\r\n private _isInited = false;\r\n\r\n constructor(private _elementRef: ElementRef,\r\n private _renderer: Renderer2,\r\n private _viewContainerRef: ViewContainerRef,\r\n private _cis: ComponentLoaderFactory,\r\n private _config: BsDropdownConfig,\r\n private _state: BsDropdownState) {\r\n\r\n // set initial dropdown state from config\r\n this._state.autoClose = this._config.autoClose;\r\n\r\n // create dropdown component loader\r\n this._dropdown = this._cis\r\n .createLoader<BsDropdownContainerComponent>(\r\n this._elementRef,\r\n this._viewContainerRef,\r\n this._renderer\r\n )\r\n .provide({provide: BsDropdownState, useValue: this._state});\r\n\r\n this.onShown = this._dropdown.onShown;\r\n this.onHidden = this._dropdown.onHidden;\r\n this.isOpenChange = this._state.isOpenChange;\r\n // this.onToggleHover = this._state.onHover;\r\n // barState.addDropdown(this);\r\n }\r\n\r\n ngOnInit(): void {\r\n // fix: seems there are an issue with `routerLinkActive`\r\n // which result in duplicated call ngOnInit without call to ngOnDestroy\r\n // read more: https://github.com/valor-software/ngx-bootstrap/issues/1885\r\n if (this._isInited) {\r\n return;\r\n }\r\n this._isInited = true;\r\n\r\n // attach DOM listeners\r\n this._dropdown.listen({\r\n // because of dropdown inline mode\r\n outsideClick: false,\r\n triggers: this.triggers,\r\n show: () => this.show(), toggle: (value: boolean) => this.toggle(value)\r\n });\r\n\r\n // toggle visibility on toggle element click\r\n this._subscriptions.push(\r\n this._state.toggleClick.subscribe((value: boolean) => this.toggle(value))\r\n );\r\n\r\n // hide dropdown if set disabled while opened\r\n this._subscriptions.push(\r\n this._state.isDisabledChange.pipe(\r\n filter((value: boolean) => value)\r\n )\r\n .subscribe((value: boolean) => this.hide())\r\n );\r\n }\r\n\r\n /**\r\n * Opens an element’s popover. This is considered a “manual” triggering of\r\n * the popover.\r\n */\r\n show(): void {\r\n if (this.isOpen || this.isDisabled) {\r\n return;\r\n }\r\n\r\n if (this._showInline) {\r\n if (!this._inlinedMenu) {\r\n this._state.dropdownMenu.then(\r\n (dropdownMenu: BsComponentRef<BsDropdownMenuDirective>) => {\r\n const _placement = this.placement || 'bottom left';\r\n this._dropdown.attachInline(\r\n dropdownMenu.viewContainer,\r\n dropdownMenu.templateRef\r\n );\r\n this._inlinedMenu = this._dropdown._inlineViewRef;\r\n this.addBs4Polyfills();\r\n }\r\n )\r\n // swallow errors\r\n .catch();\r\n }\r\n this.addBs4Polyfills();\r\n this._isInlineOpen = true;\r\n this.onShown.emit(true);\r\n this._state.isOpenChange.emit(true);\r\n\r\n return;\r\n }\r\n this._state.dropdownMenu.then(dropdownMenu => {\r\n // check direction in which dropdown should be opened\r\n const _dropup =\r\n this.dropup ||\r\n (typeof this.dropup !== 'undefined' && this.dropup);\r\n this._state.direction = _dropup ? 'up' : 'down';\r\n const _placement =\r\n this.placement || (_dropup ? 'top left' : 'bottom left');\r\n\r\n // show dropdown\r\n this._dropdown\r\n .attach(BsDropdownContainerComponent)\r\n .to(this.container)\r\n .position({attachment: _placement})\r\n .show({\r\n content: dropdownMenu.templateRef,\r\n placement: _placement\r\n });\r\n\r\n this._state.isOpenChange.emit(true);\r\n })\r\n // swallow error\r\n .catch();\r\n }\r\n\r\n /**\r\n * Closes an element’s popover. This is considered a “manual” triggering of\r\n * the popover.\r\n */\r\n hide(): void {\r\n if (!this.isOpen) {\r\n return;\r\n }\r\n\r\n if (this._showInline) {\r\n this.removeShowClass();\r\n this.removeDropupStyles();\r\n this._isInlineOpen = false;\r\n this.onHidden.emit(true);\r\n } else {\r\n this._dropdown.hide();\r\n }\r\n\r\n this._state.isOpenChange.emit(false);\r\n }\r\n\r\n /**\r\n * Toggles an element’s popover. This is considered a “manual” triggering of\r\n * the popover. With parameter <code>true</code> allows toggling, with parameter <code>false</code>\r\n * only hides opened dropdown. Parameter usage will be removed in ngx-bootstrap v3\r\n */\r\n toggle(value?: boolean): void {\r\n if (this.isOpen || !value) {\r\n return this.hide();\r\n }\r\n\r\n return this.show();\r\n }\r\n\r\n containsItem(item: BsDropdownDirective | DropdownItemDirective): boolean {\r\n return this._elementRef.nativeElement.contains(item.elementRef.nativeElement);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // clean up subscriptions and destroy dropdown\r\n for (const sub of this._subscriptions) {\r\n sub.unsubscribe();\r\n }\r\n this._dropdown.dispose();\r\n }\r\n\r\n private addBs4Polyfills(): void {\r\n if (!isBs3()) {\r\n this.addShowClass();\r\n this.checkRightAlignment();\r\n this.addDropupStyles();\r\n }\r\n }\r\n\r\n private addShowClass(): void {\r\n if (this._inlinedMenu && this._inlinedMenu.rootNodes[0]) {\r\n this._renderer.addClass(this._inlinedMenu.rootNodes[0], 'show');\r\n }\r\n }\r\n\r\n private removeShowClass(): void {\r\n if (this._inlinedMenu && this._inlinedMenu.rootNodes[0]) {\r\n this._renderer.removeClass(this._inlinedMenu.rootNodes[0], 'show');\r\n }\r\n }\r\n\r\n private checkRightAlignment(): void {\r\n if (this._inlinedMenu && this._inlinedMenu.rootNodes[0]) {\r\n const isRightAligned = this._inlinedMenu.rootNodes[0].classList.contains(\r\n 'dropdown-menu-right'\r\n );\r\n this._renderer.setStyle(\r\n this._inlinedMenu.rootNodes[0],\r\n 'left',\r\n isRightAligned ? 'auto' : '0'\r\n );\r\n this._renderer.setStyle(\r\n this._inlinedMenu.rootNodes[0],\r\n 'right',\r\n isRightAligned ? '0' : 'auto'\r\n );\r\n }\r\n }\r\n\r\n private addDropupStyles(): void {\r\n if (this._inlinedMenu && this._inlinedMenu.rootNodes[0]) {\r\n // a little hack to not break support of bootstrap 4 beta\r\n this._renderer.setStyle(\r\n this._inlinedMenu.rootNodes[0],\r\n 'top',\r\n this.dropup ? 'auto' : '100%'\r\n );\r\n this._renderer.setStyle(\r\n this._inlinedMenu.rootNodes[0],\r\n 'transform',\r\n this.dropup ? 'translateY(-101%)' : 'translateY(0)'\r\n );\r\n }\r\n }\r\n\r\n private removeDropupStyles(): void {\r\n if (this._inlinedMenu && this._inlinedMenu.rootNodes[0]) {\r\n this._renderer.removeStyle(this._inlinedMenu.rootNodes[0], 'top');\r\n this._renderer.removeStyle(this._inlinedMenu.rootNodes[0], 'transform');\r\n }\r\n }\r\n}\r\n","import { Directive, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { BsDropdownState } from './dropdown.state';\r\n\r\n@Directive({\r\n selector: '[mdbDropdownMenu],[dropdownMenu]',\r\n exportAs: 'bs-dropdown-menu'\r\n})\r\nexport class BsDropdownMenuDirective {\r\n constructor(_state: BsDropdownState,\r\n _viewContainer: ViewContainerRef,\r\n _templateRef: TemplateRef<any>) {\r\n _state.resolveDropdownMenu({\r\n templateRef: _templateRef,\r\n viewContainer: _viewContainer\r\n });\r\n }\r\n}\r\n","import {Directive, ElementRef, HostBinding, HostListener, OnDestroy} from '@angular/core';\r\nimport {Subscription} from 'rxjs/Subscription';\r\n\r\nimport {BsDropdownState} from './dropdown.state';\r\n\r\n@Directive({\r\n selector: '[mdbDropdownToggle],[dropdownToggle]',\r\n exportAs: 'bs-dropdown-toggle'\r\n})\r\nexport class BsDropdownToggleDirective implements OnDestroy {\r\n @HostBinding('attr.aria-haspopup') ariaHaspopup = true;\r\n @HostBinding('attr.disabled') isDisabled: boolean = null;\r\n // @HostBinding('class.active')\r\n @HostBinding('attr.aria-expanded') isOpen: boolean;\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n constructor(private _state: BsDropdownState, private _element: ElementRef) {\r\n // sync is open value with state\r\n this._subscriptions.push(\r\n this._state.isOpenChange.subscribe(\r\n (value: boolean) => (this.isOpen = value)\r\n )\r\n );\r\n // populate disabled state\r\n this._subscriptions.push(\r\n this._state.isDisabledChange.subscribe(\r\n (value: boolean) => (this.isDisabled = value || null)\r\n )\r\n );\r\n }\r\n\r\n @HostListener('click', [])\r\n onClick(): void {\r\n if (this.isDisabled) {\r\n return;\r\n }\r\n this._state.toggleClick.emit(true);\r\n }\r\n\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: any): void {\r\n if (\r\n this._state.autoClose &&\r\n event.button !== 2 &&\r\n !this._element.nativeElement.contains(event.target)\r\n ) {\r\n this._state.toggleClick.emit(false);\r\n }\r\n }\r\n\r\n @HostListener('keyup.esc')\r\n onEsc(): void {\r\n if (this._state.autoClose) {\r\n this._state.toggleClick.emit(false);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n for (const sub of this._subscriptions) {\r\n sub.unsubscribe();\r\n }\r\n }\r\n}\r\n","import {Directive, ElementRef, HostBinding, HostListener, Input, OnDestroy} from '@angular/core';\r\nimport {Subscription} from 'rxjs/Subscription';\r\nimport {BsDropdownState} from './dropdown.state';\r\n\r\n@Directive({\r\n selector: '[dropdownButton]'\r\n})\r\nexport class DropdownButtonDirective implements OnDestroy {\r\n\r\n private _subscriptions: Subscription[] = [];\r\n\r\n @HostBinding('class.disabled') @Input() isDisabled: boolean = null;\r\n @HostBinding('attr.aria-expanded') isOpen: boolean;\r\n\r\n @HostListener('click', ['$event'])\r\n onClick(event: Event): void {\r\n if (this.isDisabled) {\r\n return;\r\n }\r\n this._state.onClick.emit(event);\r\n }\r\n\r\n @HostListener('mouseover')\r\n onHover(): void {\r\n if (this.isDisabled) {\r\n return;\r\n }\r\n this._state.onHover.emit();\r\n }\r\n\r\n constructor(private _state: BsDropdownState,\r\n private _element: ElementRef) {\r\n // 同步菜单的打开状态\r\n this._subscriptions.push(this._state.isOpenChange\r\n .subscribe((value: boolean) => this.isOpen = value)\r\n );\r\n // 同步菜单的禁用状态\r\n this._subscriptions.push(this._state.isDisabledChange\r\n .subscribe((value: boolean) => this.isDisabled = value || null)\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n for (const sub of this._subscriptions) {\r\n sub.unsubscribe();\r\n }\r\n }\r\n\r\n}\r\n","import {Directive, ElementRef, EventEmitter, HostBinding, HostListener, Input} from '@angular/core';\r\nimport {NavbarState} from '../navbar/navbar.state';\r\n\r\n@Directive({\r\n selector: '[dropdownItem]',\r\n exportAs: 'dropdownItem'\r\n})\r\nexport class DropdownItemDirective {\r\n\r\n @HostBinding('class.disabled') @Input() isDisabled: boolean = null;\r\n\r\n @Input('dropdownItem') command;\r\n\r\n get elementRef(): ElementRef {\r\n return this._elementRef;\r\n }\r\n\r\n\r\n onHover = new EventEmitter<any>();\r\n onClick = new EventEmitter<string>();\r\n\r\n constructor(private _elementRef: ElementRef,\r\n private barState: NavbarState) {\r\n this.barState.addMenuItem(this);\r\n }\r\n\r\n @HostListener('mouseover')\r\n onMouseOver(): void {\r\n this.onHover.emit();\r\n }\r\n\r\n @HostListener('click')\r\n onItemClick(): void {\r\n if (this.isDisabled) {\r\n return;\r\n }\r\n this.onClick.emit(this.command);\r\n }\r\n}\r\n","import {ModuleWithProviders, NgModule} from '@angular/core';\r\nimport {ComponentLoaderFactory} from '../utils/component-loader/index';\r\n\r\nimport {PositioningService} from '../utils/positioning/index';\r\nimport {BsDropdownContainerComponent} from './dropdown-container.component';\r\nimport {BsDropdownMenuDirective} from './dropdown-menu.directive';\r\nimport {BsDropdownToggleDirective} from './dropdown-toggle.directive';\r\nimport {BsDropdownConfig} from './dropdown.config';\r\n\r\nimport {BsDropdownDirective} from './dropdown.directive';\r\nimport {BsDropdownState} from './dropdown.state';\r\nimport {NavbarState} from '../navbar/navbar.state';\r\nimport { DropdownButtonDirective } from './dropdown-button.directive';\r\nimport { DropdownItemDirective } from './dropdown-item.directive';\r\n\r\n@NgModule({\r\n declarations: [\r\n BsDropdownMenuDirective,\r\n BsDropdownToggleDirective,\r\n BsDropdownContainerComponent,\r\n BsDropdownDirective,\r\n DropdownButtonDirective,\r\n DropdownItemDirective\r\n ],\r\n exports: [\r\n BsDropdownMenuDirective,\r\n BsDropdownToggleDirective,\r\n BsDropdownDirective,\r\n DropdownButtonDirective,\r\n DropdownItemDirective\r\n ],\r\n entryComponents: [BsDropdownContainerComponent]\r\n})\r\nexport class BsDropdownModule {\r\n public static forRoot(config?: any): ModuleWithProviders {\r\n return {\r\n ngModule: BsDropdownModule, providers: [\r\n ComponentLoaderFactory,\r\n PositioningService,\r\n BsDropdownState,\r\n {provide: BsDropdownConfig, useValue: config ? config : {autoClose: true}}\r\n ]\r\n };\r\n }\r\n}\r\n","import {\r\n AfterContentChecked,\r\n AfterViewChecked, AfterViewInit,\r\n ContentChildren,\r\n Directive,\r\n EventEmitter,\r\n HostListener, OnChanges,\r\n OnInit,\r\n QueryList, ViewChildren\r\n} from '@angular/core';\r\nimport {NavbarState} from './navbar.state';\r\nimport {ElementRef} from '@angular/core';\r\nimport {BsDropdownConfig} from '../dropdown/dropdown.config';\r\nimport {BsDropdownDirective} from '../dropdown/index';\r\n\r\n@Directive({\r\n selector: '[navbar]',\r\n exportAs: 'navbar',\r\n providers: [NavbarState]\r\n})\r\nexport class NavbarDirective implements OnInit, AfterViewInit {\r\n\r\n onItemClick: EventEmitter<string>;\r\n\r\n @ContentChildren(BsDropdownDirective) childDropdowns: QueryList<BsDropdownDirective>;\r\n @ViewChildren(BsDropdownDirective) childDropdowns2: QueryList<BsDropdownDirective>;\r\n @HostListener('document:click', ['$event'])\r\n onDocumentClick(event: any): void {\r\n this._state.hideAllDropdown();\r\n }\r\n\r\n @HostListener('keyup.esc')\r\n onEsc(): void {\r\n if (this._state.autoClose) {\r\n this._state.hideCurrentDropdown();\r\n }\r\n }\r\n\r\n constructor(private _elementRef: ElementRef,\r\n private _config: BsDropdownConfig,\r\n private _state: NavbarState) {\r\n this._state.autoClose = this._config.autoClose;\r\n this.onItemClick = this._state.onItemClick;\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.childDropdowns.forEach((item: BsDropdownDirective) => this._state.addDropdown(item));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { NavbarDirective } from './navbar.directive';\r\nimport { NavbarState } from './navbar.state';\r\n\r\n@NgModule({\r\n declarations: [NavbarDirective],\r\n providers: [NavbarState],\r\n exports: [NavbarDirective]\r\n})\r\nexport class NavbarModule { }\r\n","export const TREE_EVENTS = {\r\n onToggle: 'onToggle',\r\n onActiveChanged: 'onActiveChanged',\r\n onActivate: 'onActivate',\r\n onDeactivate: 'onDeactivate',\r\n onFocus: 'onFocus',\r\n onBlur: 'onBlur',\r\n onDoubleClick: 'onDoubleClick',\r\n onContextMenu: 'onContextMenu',\r\n onInitialized: 'onInitialized',\r\n onUpdateData: 'onUpdateData',\r\n onMoveNode: 'onMoveNode',\r\n onAddNode: 'onAddNode',\r\n onRemoveNode: 'onRemoveNode',\r\n onRightMenuClicked: 'onRightMenuClicked'\r\n}","import { ElementRef } from '@angular/core';\r\nimport { TreeModel } from './tree-model';\r\nimport { TREE_EVENTS } from '../constants/events';\r\nimport { TreeOptions } from './tree-options';\r\n\r\nexport class TreeNode{\r\n private _isExpanded: boolean;\r\n get isExpanded(){return this._isExpanded}\r\n set isExpanded(value){this._isExpanded = value}\r\n get isCollapsed(){return !this._isExpanded}\r\n\r\n treeModel: TreeModel;\r\n parent: TreeNode;\r\n level: number;\r\n isVirtualRoot: boolean = false;\r\n elementRef:ElementRef;\r\n \r\n _isActive: boolean = false;\r\n get isActive(){\r\n return this._isActive;\r\n }\r\n set isActive(value){\r\n this._isActive = value;\r\n }\r\n\r\n constructor(public data, parent: TreeNode = null, treeModel: TreeModel){\r\n \r\n Object.assign( this, data, {parent,treeModel} );\r\n \r\n this.treeModel = treeModel;\r\n this.parent = parent;\r\n this.level = this.parent ? this.parent.level + 1 : 0;\r\n if(this.isExpandedField) {\r\n this.isExpanded = true;\r\n }\r\n \r\n // 验证字段添加\r\n // console.log(this.idField);\r\n // console.log(this.typeField);\r\n \r\n this.childrenField = this.childrenField.map(child => new TreeNode(child,this,treeModel) );\r\n }\r\n\r\n // Proxy of treeModel\r\n get options(): TreeOptions{ \r\n return this.treeModel.options \r\n }\r\n fireEvent(event) { \r\n this.treeModel.fireEvent(event)\r\n }\r\n\r\n // 表现的更像一个字段,将其封装成属性,并根据开放的读写权限,设置get/set\r\n get idField() {\r\n return this[this.options.idField];\r\n }\r\n \r\n set idField(value) {\r\n this[this.options.idField] = value;\r\n }\r\n\r\n get childrenField() {\r\n return this[this.options.childrenField] || [];\r\n }\r\n \r\n set childrenField(value) {\r\n this[this.options.childrenField] = value;\r\n }\r\n\r\n get displayField(){\r\n return this[this.options.displayField];\r\n }\r\n\r\n get typeField(){\r\n return this[this.options.typeField];\r\n }\r\n\r\n set typeField(value){\r\n this[this.options.typeField] = value;\r\n }\r\n\r\n get isExpandedField(){\r\n return this[this.options.isExpandedField];\r\n }\r\n set isExpandedField(value){\r\n this[this.options.isExpandedField] = value;\r\n }\r\n\r\n allowDrag() {//表现的更像一个动作,将其封装成方法\r\n return this.options.allowDrag;\r\n }\r\n\r\n enableCustomContextMenu() {\r\n return this.options.enableCustomContextMenu;\r\n }\r\n\r\n get isRoot() { return this.parent.isVirtualRoot }//父节点为空,表示这个一个根节点\r\n get realParent() { return this.isRoot ? null : this.parent }\r\n get isLeaf() { return !this.childrenField.length }\r\n get hasChildren() { return !this.isLeaf }\r\n get isFocused(){return this.treeModel.focusedNode == this}\r\n\r\n getFirstChild() {\r\n return this.childrenField && this.childrenField[0];\r\n }\r\n\r\n getLastChild() {\r\n return this.childrenField && this.childrenField[this.childrenField.length-1];\r\n }\r\n \r\n private _getIndexInParent() {\r\n return this.parent && this.parent.childrenField.indexOf(this);\r\n }\r\n\r\n findAdjacentSibling(steps) {\r\n let index = this._getIndexInParent();\r\n return this.parent && this.parent.childrenField[index + steps];\r\n }\r\n \r\n findNextSibling() {\r\n return this.findAdjacentSibling(+1);\r\n }\r\n findPreviousSibling() {\r\n return this.findAdjacentSibling(-1);\r\n }\r\n\r\n findNextNode(goInside = true) {// 查找Next Node时,默认进行内部查找\r\n return goInside && this.isExpanded && this.getFirstChild() ||\r\n this.findNextSibling() ||\r\n this.parent && this.parent.findNextNode(false);\r\n }\r\n\r\n findPreviousNode() {\r\n let previousSibling = this.findPreviousSibling();\r\n if (!previousSibling) {\r\n return this.realParent;\r\n }\r\n return previousSibling.isCollapsed\r\n ? previousSibling\r\n : previousSibling.getLastChild();\r\n }\r\n\r\n isDescendantOf(node: TreeNode) {\r\n if (this === node){\r\n return true;\r\n } else {\r\n return this.parent && this.parent.isDescendantOf(node);\r\n }\r\n }\r\n\r\n // 切换方法\r\n // 切换节点的折叠(Collapsed)与扩展(Expanded)状态\r\n toggle() {\r\n this.isExpanded = !this.isExpanded;\r\n this.fireEvent({ eventName: TREE_EVENTS.onToggle, node: this, isExpanded: this.isExpanded });\r\n }\r\n\r\n private _activate() {\r\n this._isActive = true;\r\n this.fireEvent({ eventName: TREE_EVENTS.onActivate, node: this });\r\n this.focus();\r\n }\r\n \r\n private _deactivate() {\r\n this._isActive = false;\r\n this.fireEvent({ eventName: TREE_EVENTS.onDeactivate, node: this });\r\n }\r\n\r\n toggleActivated() {\r\n if (this.isActive) {\r\n this._deactivate();\r\n this.treeModel.activeNode = null;\r\n }\r\n else {\r\n if (this.treeModel.activeNode) {\r\n this.treeModel.activeNode._deactivate();\r\n }\r\n this._activate();\r\n this.treeModel.activeNode = this;\r\n }\r\n this.fireEvent({ eventName: TREE_EVENTS.onActiveChanged, node: this, isActive: this.isActive });\r\n }\r\n\r\n focus() {\r\n let previousNode = this.treeModel.focusedNode;\r\n this.treeModel.focusedNode = this;\r\n if (previousNode) {\r\n this.fireEvent({ eventName: TREE_EVENTS.onBlur, node: previousNode });\r\n }\r\n this.fireEvent({ eventName: TREE_EVENTS.onFocus, node: this });\r\n }\r\n\r\n blur() {\r\n let previousNode = this.treeModel.focusedNode;\r\n this.treeModel.focusedNode = null;\r\n if (previousNode) {\r\n this.fireEvent({ eventName: TREE_EVENTS.onBlur, node: this });\r\n }\r\n }\r\n \r\n // 双击事件\r\n doublClick(rawEvent: MouseEvent) {\r\n this.fireEvent({ eventName: TREE_EVENTS.onDoubleClick, node: this, rawEvent: rawEvent });\r\n }\r\n\r\n // 右键快捷菜单\r\n contextMenu(rawEvent: MouseEvent) {\r\n if (this.enableCustomContextMenu()) {//启用右键菜单功能后,禁用默认的右键菜单\r\n rawEvent.preventDefault();\r\n }\r\n\r\n this.fireEvent({ eventName: TREE_EVENTS.onContextMenu, node: this, rawEvent: rawEvent }); \r\n }\r\n\r\n dropMouseAction($event, data: any = null){\r\n // 1.设置focus\r\n this.treeModel.setFocus(true);\r\n // 2.执行事件处理器\r\n this._dropEventHandler(this.treeModel, this, $event, data);\r\n // 3.完成drop操作后,重置drag状态\r\n this.treeModel.cancelDrag();\r\n }\r\n\r\n private _dropEventHandler(tree: TreeModel, node: TreeNode, $event: any , \r\n to: { parentNode: TreeNode, index: number}){\r\n tree.moveNode({ from: tree.getDragNode(), to });\r\n // console.log(\"dropEventHandler:\"+tree.roots);\r\n }\r\n \r\n // 点击右键菜单项\r\n rightMenuClicked( event ) {\r\n this.fireEvent({ eventName: TREE_EVENTS.onRightMenuClicked, node: this, rawEvent: event });\r\n }\r\n}","import { ITreeOptions } from '../defs/api';\r\n\r\nexport class TreeOptions {\r\n // 字段不应直接暴露\r\n get idField(): string { return this.options.childrenField || 'id'}\r\n get displayField(): string { return this.options.displayField || 'name'}\r\n get typeField():string {return this.options.typeField || 'type'}\r\n get childrenField(): string { return this.options.childrenField || 'children'}\r\n get isExpandedField(): string { return this.options.isExpandedField || 'isExpanded'}\r\n get treeNodeTemplate(): any { return this.options.treeNodeTemplate || '{{ node.displayField }}' }//插值表达式\r\n get allowDrag(): boolean { return this.options.allowDrag }//是否启用拖拽功能\r\n get enableCustomContextMenu(): boolean{ return this.options.enableCustomContextMenu }//是否启用快捷菜单\r\n\r\n constructor(private options: ITreeOptions = {}) {//option是一个对象\r\n // nothing need to do\r\n }\r\n}","import { Injectable } from '@angular/core';\r\nimport { TreeNode } from './tree-node';\r\nimport { TreeOptions } from './tree-options';\r\nimport { TREE_EVENTS } from '../constants/events';\r\nimport { first, last, indexOf, findIndex, sortBy } from 'lodash-es';\r\n\r\n@Injectable()\r\nexport class TreeModel {\r\n roots: TreeNode[];\r\n options: TreeOptions = new TreeOptions();\r\n static focusedTree = null;\r\n // focused Node may be not actived \r\n // actived Node must be focused\r\n focusedNode: TreeNode = null;// be chosen node\r\n activeNode: TreeNode = null;// be chosen and actived node\r\n private events:any;\r\n eventNames = Object.keys(TREE_EVENTS);\r\n\r\n firstUpdate = true;\r\n _dragNode: { parentNode: TreeNode, index: number } = null;\r\n _dropLocation:{ component: any, parentNode: TreeNode, index: number } = null;\r\n\r\n setData({nodes, options, events}){\r\n\r\n this.options = new TreeOptions(options);\r\n this.events = events;\r\n\r\n this.update(nodes);\r\n }\r\n\r\n virtualRoot: TreeNode;\r\n update(nodes){\r\n // Update the tree:\r\n\r\n this.virtualRoot = new TreeNode({ isVirtualRoot: true }, null,this);\r\n\r\n this.roots = nodes && nodes.map(child => new TreeNode(child, this.virtualRoot, this));\r\n\r\n this.virtualRoot[this.options.childrenField] = this.roots;\r\n \r\n this._loadTreeNodeContentComponent();\r\n \r\n // Fire event:\r\n if (this.firstUpdate) {\r\n if (this.roots) {\r\n this.fireEvent({ eventName: TREE_EVENTS.onInitialized });\r\n this.firstUpdate = false;\r\n }\r\n } else {\r\n this.fireEvent({ eventName: TREE_EVENTS.onUpdateData });\r\n }\r\n }\r\n\r\n //Used for code test\r\n addStaticTreeNode(){\r\n this.createAndAddTreeNode({ \r\n id: 1,\r\n name: 'root1',\r\n subTitle: 'the root',\r\n type: 'type1'\r\n },this.focusedNode);\r\n }\r\n\r\n createAndAddTreeNode(data, parentNode: TreeNode, index?){\r\n const createdNode = this.createTreeNode(data, parentNode);\r\n this.addTreeNode(createdNode, parentNode, index);\r\n }\r\n\r\n createTreeNode(data, parent: TreeNode): TreeNode{\r\n let createdNode = new TreeNode(data, parent, this);\r\n return createdNode;\r\n }\r\n \r\n addTreeNode(addedNode: TreeNode, parentNode: TreeNode, index?){\r\n if (addedNode == null) {\r\n return;\r\n }\r\n\r\n if (parentNode == null) {// 增加顶级树节点(没有父节点的树节点)\r\n this.roots.push(addedNode);\r\n } else {\r\n if (index === null || index === undefined) {\r\n parentNode.childrenField.push(addedNode);\r\n } else {\r\n parentNode.childrenField.splice(index, 0, addedNode);\r\n }\r\n }\r\n\r\n this.update(this.roots);\r\n\r\n this.fireEvent({ eventName: TREE_EVENTS.onAddNode, addedNode, parentNode});\r\n }\r\n\r\n removeFocusedTreeNode(){\r\n this.removeTreeNode(this.focusedNode);\r\n }\r\n \r\n //移除选中的已知节点\r\n removeTreeNode(selectedTreeNode: TreeNode){\r\n if(selectedTreeNode == null){\r\n return;\r\n }\r\n\r\n const parent = selectedTreeNode.parent;\r\n if(parent == null){//移除顶级树节点(没有父节点的树节点)\r\n let index = this.roots.indexOf(selectedTreeNode);\r\n this.roots.splice(index, 1);//移除数组中某一指定节点\r\n }else{\r\n if(parent.childrenField.length <= 0){\r\n console.log(\"RemoveTreeNode Warning: it is impossible to remove element from an empty array\");\r\n return;\r\n }\r\n //移除数组中某一指定节点\r\n let index = parent.childrenField.indexOf(selectedTreeNode);\r\n parent.childrenField.splice(index, 1);\r\n }\r\n\r\n this.update(this.roots);\r\n\r\n this.fireEvent({ eventName: TREE_EVENTS.onRemoveNode, selectedTreeNode, parent});\r\n }\r\n\r\n /**\r\n * 定位指定树节点\r\n * @param needLocatedNode 待定位节点 \r\n */\r\n locateTreeNode(needLocatedNode: TreeNode){\r\n if(needLocatedNode == null){\r\n return;\r\n }\r\n\r\n let parentNode = needLocatedNode.parent;\r\n while( parentNode != null){\r\n parentNode.isExpanded = true;\r\n parentNode = parentNode.parent;\r\n }\r\n \r\n needLocatedNode.isActive = false;\r\n needLocatedNode.toggleActivated();\r\n }\r\n\r\n /**\r\n * 通过ID定位树节点\r\n * @param nodeID 待查找并定位节点的ID\r\n */\r\n locateNodeByID(nodeID: string): boolean{\r\n let node = this.searchTreeNodeByID(nodeID);\r\n if(node == null) {\r\n return false;\r\n }\r\n this.locateTreeNode(node);\r\n return true;\r\n }\r\n \r\n /**\r\n * 查找指定树节点\r\n * @param nodeID 待查找节点ID\r\n */\r\n searchTreeNodeByID(nodeID: string): TreeNode{\r\n return this.searchTreeNode(this.roots, nodeID);\r\n }\r\n\r\n \r\n /**\r\n * 在指定集合中,根据ID查找树节点\r\n * @param nodes 树集合\r\n * @param nodeID 待查找节点ID\r\n */\r\n searchTreeNode(nodes: TreeNode[], nodeID: string): TreeNode{\r\n\r\n if(nodes == null || nodes.length <= 0){\r\n return null;\r\n }\r\n\r\n if(nodeID == null || nodeID.length < 0){\r\n return null;\r\n }\r\n\r\n let searchedTreeNode: TreeNode = null;\r\n \r\n nodes.forEach(node => {\r\n if(node.idField == nodeID){ //回归\r\n searchedTreeNode = node;\r\n return;\r\n }\r\n\r\n if(node.childrenField == null || node.childrenField.length < 0){ //回归\r\n return;\r\n }\r\n\r\n const searchedNodeInChildren = this.searchTreeNode(node.childrenField, nodeID);//递推\r\n if(searchedNodeInChildren != null){\r\n searchedTreeNode = searchedNodeInChildren;\r\n }\r\n return;//回归\r\n });\r\n\r\n return searchedTreeNode; //返回\r\n }\r\n \r\n private _treeNodeContentComponent:any;\r\n get treeNodeContentComponent() { return this._treeNodeContentComponent };\r\n // if treeNodeTemplate is a component - use it,\r\n // otherwise - it's a template, so wrap it with an AdHoc component\r\n _loadTreeNodeContentComponent() {\r\n this._treeNodeContentComponent = this.options.treeNodeTemplate;\r\n if (typeof this._treeNodeContentComponent === 'string') {\r\n // this._treeNodeContentComponent = this._createAdHocComponent(this._treeNodeContentComponent);\r\n }\r\n }\r\n\r\n // _createAdHocComponent(templateStr) {\r\n // @Component({\r\n // selector: 'TreeNodeTemplate',\r\n // template: templateStr\r\n // })\r\n // class AdHocTreeNodeTemplateComponent {\r\n // @Input() node: TreeNode;\r\n // }\r\n // return AdHocTreeNodeTemplateComponent;\r\n // }\r\n\r\n get isFocused()\r\n {\r\n return TreeModel.focusedTree === this;\r\n }\r\n setFocus(value){\r\n TreeModel.focusedTree = value ? this : null;\r\n }\r\n getFirstRoot(){\r\n return first(this.roots);\r\n }\r\n getLastRoot(){\r\n return last(this.roots);\r\n }\r\n focusNextNode() {\r\n let previousNode = this.focusedNode;\r\n let nextNode = previousNode ? previousNode.findNextNode() : this.getFirstRoot();\r\n nextNode && nextNode.focus() // Short-circuit evaluation\r\n }\r\n\r\n focusPreviousNode() {\r\n let previousNode = this.focusedNode;\r\n let nextNode = previousNode ? previousNode.findPreviousNode() : this.getLastRoot();\r\n nextNode && nextNode.focus();\r\n }\r\n\r\n focusDrillUp(){\r\n let previousNode = this.focusedNode;\r\n let nextNode = previousNode && previousNode.realParent;\r\n nextNode && nextNode.focus();\r\n }\r\n\r\n focusDrillDown() {\r\n let previousNode = this.focusedNode;\r\n let nextNode = previousNode && previousNode.getFirstChild();\r\n nextNode && nextNode.focus();\r\n }\r\n\r\n fireEvent(event) {\r\n // https://stackoverflow.com/questions/35840576/differencse-between-eventemitter-next-and-eventemitter-emit-in-angular-2\r\n // abandon next() function, begin to use emit() function\r\n // this.events[event.eventName].next(event);\r\n // this.events[event.eventName].emit(event,alert(event.eventName));//发射事件,并传递事件的对象\r\n this.events[event.eventName].emit(event);\r\n\r\n }\r\n\r\n /**\r\n * 判断是否执行移动节点操作,可以移动返回true,否则返回false\r\n * @param param0 param0.from 待移动节点的原有父节点\r\n * param0.to 待移动节点的新父节点\r\n */\r\n canMoveNode({ from, to }) {\r\n // same node\r\n if (from.parentNode === to.parentNode && from.index === to.index) {\r\n return false;\r\n }\r\n \r\n const fromChildren = from.parentNode.children;\r\n const fromNode = fromChildren[from.index];\r\n \r\n return !to.parentNode.isDescendantOf(fromNode);\r\n }\r\n\r\n /**\r\n * 移动节点\r\n * @param param0 param0.from 待移动节点的原有父节点\r\n * param0.to 待移动节点的新父节点\r\n */\r\n moveNode({ from, to }) {\r\n if (!this.canMoveNode({ from , to })) return;\r\n \r\n const fromChildren = from.parentNode.childrenField;\r\n \r\n // If node doesn't have children - create children array\r\n if (!to.parentNode.childrenField) {\r\n to.parentNode.childrenField = [];\r\n }\r\n const toChildren = to.parentNode.childrenField;\r\n \r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice\r\n // The splice() method changes the contents of an array by removing existing elements and/or adding new elements.\r\n const node = fromChildren.splice(from.index, 1)[0];\r\n \r\n // Compensate for index if already removed from parent:\r\n let toIndex = (from.parentNode === to.parentNode && to.index > from.index) ? to.index - 1 : to.index;\r\n \r\n toChildren.splice(toIndex, 0, node);\r\n\r\n // console.log(\"toChildren:\" + toChildren);\r\n\r\n // console.log(\"AfterMoveNode:\" + this.roots);\r\n \r\n this.update(this.roots);// 实现node moved后,重新刷新这棵树\r\n \r\n this.fireEvent({ eventName: TREE_EVENTS.onMoveNode, node, to });\r\n }\r\n \r\n // TODO: move to a different service:\r\n setDragNode(dragNode:{ parentNode: TreeNode, index: number }) {\r\n this._dragNode = dragNode;\r\n }\r\n \r\n getDragNode():{ parentNode: TreeNode, index:number } {\r\n return this._dragNode || { parentNode: null, index: null };\r\n }\r\n \r\n isDragging() {\r\n return this.getDragNode().parentNode;\r\n }\r\n \r\n setDropLocation(dropLocation: { component: any, parentNode: TreeNode, index: number }) {\r\n this._dropLocation = dropLocation;\r\n }\r\n \r\n getDropLocation(): { component: any, parentNode: TreeNode, index: number } {\r\n return this._dropLocation || {component: null, parentNode: null, index: null};\r\n }\r\n \r\n isDraggingOver(component) {\r\n return this.getDropLocation().component === component;\r\n }\r\n \r\n cancelDrag() {\r\n this.setDropLocation(null);\r\n this.setDragNode(null);\r\n }\r\n}","// keys used in the angular tree component\r\nexport const KEYS = {\r\n LEFT: 37,\r\n UP: 38,\r\n RIGHT: 39,\r\n DOWN: 40,\r\n ENTER: 13,\r\n SPACE: 32\r\n}","import { Component, OnChanges, Input, Output, EventEmitter, HostListener } from '@angular/core';\r\nimport { TreeModel } from '../../models/tree-model';\r\nimport { TreeOptions } from '../../models/tree-options';\r\nimport { KEYS } from '../../constants/keys';\r\nimport { pick, includes } from 'lodash-es';//将lodash安装到node-modules中,实现按需引入\r\nimport { TreeNode } from '../../models/tree-node';\r\n\r\n//约定使用下划线表示lodash,就像用$表示jQuery一样\r\n//1.require关键字不被识别:\r\n// https://stackoverflow.com/questions/31173738/typescript-getting-error-ts2304-cannot-find-name-require\r\n// declare var require: any\r\n// const _ = require('lodash');\r\n//2.安装lodash的es版本:\r\n// (1) $>npm i lodash-es\r\n// (2) $>npm install --save @types/lodash\r\n@Component({\r\n selector: 'ng2tree',\r\n templateUrl: './tree.component.html',\r\n styleUrls: ['./tree.component.css'],\r\n providers:[\r\n TreeModel\r\n ]\r\n})\r\nexport class TreeComponent implements OnChanges {\r\n // delegating to TreeModel service:\r\n _nodes:any[];\r\n @Input() set nodes(nodes:any[]) { };\r\n _options:TreeOptions;\r\n @Input() set options(options:TreeOptions) { };\r\n \r\n @Input() set focused(value:boolean) {\r\n this.treeModel.setFocus(value);\r\n // alert('focused on the tree');\r\n }\r\n\r\n @Output() onToggle;\r\n @Output() onActiveChanged;\r\n @Output() onActivate;\r\n @Output() onDeactivate;\r\n @Output() onFocus;\r\n @Output() onBlur;\r\n @Output() onDoubleClick;\r\n @Output() onContextMenu;\r\n @Output() onRightMenuClicked;\r\n \r\n constructor(public treeModel:TreeModel) { \r\n treeModel.eventNames.forEach((name) => this[name] = new EventEmitter());//customEventName -> new EventEmitter()\r\n }\r\n\r\n ngOnChanges(changes) {\r\n this.treeModel.setData({\r\n nodes: changes.nodes && changes.nodes.currentValue,\r\n options: changes.options && changes.options.currentValue,\r\n events: pick(this, this.treeModel.eventNames)\r\n });\r\n }\r\n // 优先使用HostListener装饰器绑定事件,而不是使用Directive或Component的host元数据\r\n // When binding events to Directive or Component, Angular suggests to prefer to HostListener decorator, \r\n // rather than host metadata.\r\n @HostListener('body: keydown', ['$event']) onKeydown($event) {\r\n // alert('Pressed a key');\r\n let focusedNode = this.treeModel.focusedNode;\r\n\r\n if (!this.treeModel.isFocused) {\r\n return;\r\n }\r\n\r\n if (includes([KEYS.DOWN, KEYS.UP, KEYS.LEFT,\r\n KEYS.RIGHT, KEYS.ENTER, KEYS.SPACE], $event.keyCode)) {\r\n $event.preventDefault();//取消事件的默认动作,实现仅对includes键响应\r\n }\r\n \r\n switch ($event.keyCode) {\r\n case KEYS.DOWN:\r\n return this.treeModel.focusNextNode();\r\n \r\n case KEYS.UP:\r\n return this.treeModel.focusPreviousNode();\r\n \r\n case KEYS.LEFT:\r\n // alert('Focus Drill Up');\r\n if (focusedNode.isExpanded) {\r\n focusedNode.toggle();\r\n }\r\n else {\r\n this.treeModel.focusDrillUp();\r\n }\r\n return;\r\n \r\n case KEYS.RIGHT:\r\n // alert('Focus Drill Down');\r\n if (focusedNode.isCollapsed) {\r\n focusedNode.toggle();\r\n }\r\n else {\r\n this.treeModel.focusDrillDown();\r\n }\r\n return;\r\n \r\n case KEYS.ENTER:\r\n case KEYS.SPACE:\r\n // alert('Enter or Space key.');\r\n return focusedNode && focusedNode.toggleActivated();\r\n }\r\n }\r\n\r\n @HostListener('body: mousedown', ['$event']) onMousedown($event) {\r\n // alert('click');\r\n let insideClick = $event.target.closest('ng2tree');//判断当前dom树上下文中是否包含树组件\r\n if (!insideClick) {\r\n this.treeModel.setFocus(false);\r\n }\r\n }\r\n\r\n searchAndLocationNodeById(elementId) {\r\n // console.log('succeeded to search and location Node By Id in treeComponent:', elementId);\r\n this.treeModel.locateNodeByID(elementId);\r\n }\r\n\r\n searchNodeById(elementId): TreeNode {\r\n // console.log('succeeded to search and location Node By Id in treeComponent:', elementId);\r\n return this.treeModel.searchTreeNodeByID(elementId);\r\n }\r\n}","import { Directive, ViewContainerRef } from '@angular/core';\r\n\r\n// 定义辅助指令TreeNodeContent,用来在模板中标记插入点\r\n@Directive({\r\n selector: '[treeNodeContent-host]'\r\n})\r\n\r\nexport class TreeNodeContentDirective {\r\n\r\n // 依赖注入ViewContainerRef,获取对容器视图的访问权限\r\n constructor(public viewContainerRef: ViewContainerRef) {\r\n\r\n }\r\n}","import { Type } from '@angular/core';\r\n\r\nexport class TreeNodeContentItem {\r\n constructor(public component: Type<any>, public displayData:any) {}\r\n}","import { Component, Input, Output, EventEmitter, OnInit, ComponentFactoryResolver, ViewContainerRef, ViewChild } from '@angular/core';\r\nimport { ITreeNodeContent } from './ITreeNodeContent';\r\n\r\n@Component({\r\n selector: 'ng2tree-node-content',\r\n templateUrl: './tree-node-content.component.html',\r\n styleUrls: ['./tree-node-content.component.css']\r\n})\r\nexport class TreeNodeContentComponent implements ITreeNodeContent, OnInit {\r\n\r\n @Input() displayData: any;\r\n @Input() originData: any;\r\n @Output() rightMenuClicked = new EventEmitter<any>();\r\n\r\n @ViewChild('rightMenuContainer', { read: ViewContainerRef }) rightMenuContainer: ViewContainerRef;\r\n constructor(private componentFactoryResolver: ComponentFactoryResolver) {\r\n\r\n }\r\n ngOnInit() {\r\n // 右键菜单相关\r\n this.rightMenuContainer.clear();\r\n if (this.originData.hasRightClickMenu) {\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(this.originData.rightClickMenuComponent);\r\n const componentRef = this.rightMenuContainer.createComponent(componentFactory);\r\n componentRef.instance['nodeData'] = this.originData;\r\n componentRef.instance['rightMenuClicked'].subscribe((event) => {\r\n this.rightMenuClicked.emit(event);\r\n });\r\n }\r\n }\r\n}\r\n","import { Component, ViewChild, OnInit, Input, ComponentFactoryResolver, ViewContainerRef } from '@angular/core';\r\nimport { TreeNode } from '../../models/tree-node';\r\nimport { TreeModel } from '../../models/tree-model';\r\nimport { TreeNodeContentDirective } from '../../directives/tree-node-content.directive';\r\nimport { TreeNodeContentItem } from '../../models/tree-node-content-item';\r\nimport { TreeNodeContentComponent } from '../tree-node-content/tree-node-content.component';\r\n\r\n@Component({\r\n selector: 'ng2tree-node',\r\n templateUrl: './tree-node.component.html',\r\n styleUrls: ['./tree-node.component.css']\r\n})\r\nexport class TreeNodeComponent implements OnInit {\r\n\r\n @Input() node: TreeNode;\r\n @Input() nodeIndex: number;\r\n\r\n // TODO: move to draggable directive\r\n onDragStart($event) {\r\n // 设置DragNode: 选择dragNode的父节点作为DragNode,通过index定位到指定的节点\r\n setTimeout(() => this.node.treeModel.setDragNode({ parentNode: this.node.parent, index: this.nodeIndex }), 30);\r\n }\r\n\r\n onDragEnd() {\r\n this.node.treeModel.setDragNode(null);\r\n }\r\n\r\n onDragOver($event) {\r\n $event.preventDefault();\r\n this.node.treeModel.setDropLocation({ component: this, parentNode: this.node, index: 0 });\r\n }\r\n\r\n onDrop($event) {\r\n $event.preventDefault();\r\n // this.node.mouseAction('drop', $event, { node: this.node, index: 0 });\r\n this.node.treeModel.setFocus(true);\r\n this.node.dropMouseAction($event,{ parentNode: this.node, index: 0 });\r\n console.log(\"onDrop: tree-node-component\");\r\n }\r\n\r\n onDragLeave(nodeContentWrapper, $event) {\r\n if (!this.node.treeModel.isDraggingOver(this)) {\r\n return;\r\n }\r\n \r\n const rect = nodeContentWrapper.getBoundingClientRect();\r\n\r\n // If outside the element\r\n if ($event.clientX < rect.left || $event.clientX > rect.right ||\r\n $event.clientY < rect.top || $event.clientY > rect.bottom) {\r\n\r\n this.node.treeModel.setDropLocation(null);\r\n }\r\n }\r\n\r\n // ViewChild 是属性装饰器,用来从模板视图中获取匹配的元素\r\n @ViewChild(TreeNodeContentDirective) treeNodeContentHost: TreeNodeContentDirective;\r\n\r\n constructor(private componentFactoryResolver: ComponentFactoryResolver,\r\n viewContainerRef: ViewContainerRef) {\r\n \r\n }\r\n\r\n ngOnInit() {\r\n this._loadTreeNodeContent();\r\n }\r\n\r\n ngOnChanges() {\r\n\r\n }\r\n\r\n // 解决使用动态组件出现ExpressionChangedAfterItHasBeenCheckedError问题:\r\n // https://github.com/angular/angular/issues/17572\r\n _loadTreeNodeContent() {\r\n\r\n // 使用Item从逻辑上将TreeNodeContentComponent和data关联起来\r\n let treeNodeContentItem: TreeNodeContentItem = new TreeNodeContentItem(\r\n TreeNodeContentComponent,this.node.displayField);\r\n \r\n // 使用 ComponentFactoryResolver 来为每个具体的组件解析出一个 ComponentFactory \r\n // 然后 ComponentFactory 会为每一个组件创建一个实例\r\n let componentFactory = this.componentFactoryResolver.resolveComponentFactory(treeNodeContentItem.component);\r\n\r\n let viewContainerRef = this.treeNodeContentHost.viewContainerRef;\r\n viewContainerRef.clear();\r\n\r\n let componentRef = viewContainerRef.createComponent(componentFactory);\r\n\r\n componentRef.instance.displayData = treeNodeContentItem.displayData; // 传入数据\r\n componentRef.instance.originData = this.node.data;\r\n componentRef.instance.rightMenuClicked.subscribe(event => {\r\n this.node.rightMenuClicked(event);\r\n });\r\n\r\n }\r\n\r\n}\r\n","import { Component, Input } from '@angular/core';\r\nimport { TreeNode } from '../../models/tree-node';\r\n\r\n@Component({\r\n selector: 'ng2tree-node-drop-slot',\r\n templateUrl: './tree-node-drop-slot.component.html',\r\n styleUrls: ['./tree-node-drop-slot.component.css']\r\n})\r\nexport class TreeNodeDropSlotComponent {\r\n\r\n @Input() node: TreeNode;\r\n @Input() dropIndex: number;\r\n\r\n onDragOver($event) {\r\n $event.preventDefault();\r\n this.node.treeModel.setDropLocation({ component: this, parentNode: this.node, index: this.dropIndex });\r\n }\r\n\r\n onDragLeave() {\r\n if (this.node.treeModel.isDraggingOver(this)) {\r\n this.node.treeModel.setDropLocation(null);\r\n }\r\n }\r\n\r\n onDrop($event) {\r\n $event.preventDefault();\r\n // this.node.mouseAction('drop', $event, { node: this.node, index: this.dropIndex });\r\n console.log('onDropEvent: tree-node-drop-slot');\r\n this.node.dropMouseAction($event, {parentNode: this.node, index: this.dropIndex });\r\n }\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { TreeComponent } from './components/tree/tree.component';\r\nimport { TreeNodeComponent } from './components/tree-node/tree-node.component';\r\nimport { TreeNodeContentComponent } from './components/tree-node-content/tree-node-content.component';\r\nimport { TreeNodeContentDirective } from './directives/tree-node-content.directive';\r\nimport { TreeNodeDropSlotComponent } from './components/tree-node-drop-slot/tree-node-drop-slot.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n TreeComponent,\r\n TreeNodeComponent,\r\n TreeNodeContentComponent,\r\n TreeNodeContentDirective,\r\n TreeNodeDropSlotComponent\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n providers: [\r\n ],\r\n entryComponents: [\r\n TreeNodeContentComponent\r\n ],\r\n exports:[\r\n TreeComponent,\r\n TreeNodeComponent,\r\n TreeNodeContentComponent,\r\n TreeNodeContentDirective,\r\n TreeNodeDropSlotComponent\r\n ]\r\n})\r\nexport class TreeModule { }","import { InjectionToken } from '@angular/core';\r\n\r\n// injectionToken作用说明\r\n// https://segmentfault.com/a/1190000008626348\r\nexport const ANGULAR_MONACO_EDITOR_CONFIG = new InjectionToken('ANGULAR_MONACO_EDITOR_CONFIG');\r\n\r\nexport interface AngularMonacoEditorConfig {\r\n baseUrl?: string;\r\n defaultOptions?: { [key: string]: any; };\r\n onMonacoLoad?: Function;\r\n}\r\n","export const CODE_EDITOR_EVENTS = {\r\n onInit: 'onInit'\r\n};\r\n","import { Injectable } from '@angular/core';\r\n\r\nimport { assign } from 'lodash-es';\r\n\r\nimport { CODE_EDITOR_EVENTS } from '../constant/events';\r\n\r\n@Injectable()\r\nexport class CodeEditorEventService {\r\n public eventNames = Object.keys(CODE_EDITOR_EVENTS);\r\n private _events: any = {}; // 使用事件\r\n\r\n /**\r\n * 设置启用事件\r\n * @param 事件\r\n */\r\n addEvent(event) {\r\n assign(this._events, event);\r\n // console.log(this.events);\r\n }\r\n\r\n fireEvent(event) {\r\n this._events[event.eventName].emit(event);\r\n // console.log(\"Emit Event:\" + event);\r\n }\r\n}\r\n","import { AfterViewInit, ElementRef, Input, OnDestroy, Output, ViewChild, EventEmitter } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { pick } from 'lodash-es';\r\n\r\nimport { AngularMonacoEditorConfig } from './config';\r\nimport { CodeEditorEventService } from '../service/code-editor.event.service';\r\n\r\nlet loadedMonaco = false;\r\nlet loadPromise: Promise<void>;\r\n\r\nexport abstract class BaseMonacoEditor implements AfterViewInit, OnDestroy {\r\n\r\n protected _editor: any;\r\n private _options: any;\r\n protected _windowResizeSubscription: Subscription;\r\n\r\n @ViewChild('codeEditor') _editorComponent: ElementRef; // 动态添加代码编辑器\r\n\r\n // tslint:disable-next-line:no-output-on-prefix\r\n @Output() onInit;\r\n\r\n @Input('options')\r\n set options(options: any) {\r\n // 默认options(this.config.defaultOptions) + 自定义options(options)\r\n this._options = Object.assign({}, this.config.defaultOptions, options);\r\n if (this._editor) {\r\n this._editor.dispose();\r\n this.initMonaco(options);\r\n }\r\n }\r\n get options(): any {\r\n return this._options;\r\n }\r\n\r\n constructor(private codeEditorEventService: CodeEditorEventService, private config: AngularMonacoEditorConfig) {\r\n // 初始化自定义事件\r\n const self = this;\r\n codeEditorEventService.eventNames.forEach((name) => {\r\n // 创建自定义事件,此处作用等效于: @Output() onInit = new EventEmitter<any>()\r\n self[name] = new EventEmitter<any>();\r\n const eventPair = pick(self, name);\r\n codeEditorEventService.addEvent(eventPair);\r\n });\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n if (loadedMonaco) {\r\n // Wait until monaco editor is available\r\n loadPromise.then(() => {\r\n this.initMonaco(this.options);\r\n });\r\n } else {\r\n loadedMonaco = true;\r\n loadPromise = new Promise<void>((resolve: any) => {\r\n const baseUrl = this.config.baseUrl || '/assets';\r\n // if (typeof((<any>window).monaco) === 'object') {\r\n // resolve();\r\n // return;\r\n // }\r\n const onGotAmdLoader: any = () => {\r\n // Load monaco\r\n (<any>window).require.config({ paths: { 'vs': `${baseUrl}/monaco/vs` } });\r\n (<any>window).require(['vs/editor/editor.main'], () => {\r\n if (typeof this.config.onMonacoLoad === 'function') {\r\n this.config.onMonacoLoad();\r\n }\r\n this.initMonaco(this.options);\r\n resolve();\r\n });\r\n };\r\n\r\n // Load AMD loader if necessary\r\n if (!(<any>window).require) {\r\n const loaderScript: HTMLScriptElement = document.createElement('script');\r\n loaderScript.type = 'text/javascript';\r\n loaderScript.src = `${baseUrl}/monaco/vs/loader.js`;\r\n loaderScript.addEventListener('load', onGotAmdLoader);\r\n document.body.appendChild(loaderScript);\r\n } else {\r\n onGotAmdLoader();\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Monaco Editor Initializer\r\n protected abstract initMonaco(options: any): void ;\r\n\r\n ngOnDestroy() {\r\n if (this._windowResizeSubscription) {\r\n this._windowResizeSubscription.unsubscribe();\r\n }\r\n\r\n if (this._editor) {\r\n this._editor.dispose();\r\n this._editor = undefined;\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\ndeclare const monaco: any;\r\n\r\n// Angular Monaco Editor Component Variables\r\n// 汇总Angular monaco editor component 组件暴露的变量\r\n@Injectable()\r\nexport class AngularMonacoEditorService {\r\n\r\n private _existError = false;//默认没有错误\r\n get existError() {\r\n return this._existError;\r\n }\r\n\r\n handleModelMarkers() {\r\n var self = this;\r\n // https://github.com/Microsoft/monaco-editor/issues/30\r\n const setModelMarkers = monaco.editor.setModelMarkers;\r\n monaco.editor.setModelMarkers = function (model, owner, markers) {\r\n setModelMarkers.call(monaco.editor, model, owner, markers);\r\n if (markers.length === 0) {\r\n // there are no errors(synx error and validate error)\r\n // console.log('continue');\r\n } else {\r\n // there are errors\r\n self._existError = true;\r\n }\r\n };\r\n }\r\n}\r\n","import { Component, Input, Output } from '@angular/core';\r\nimport { forwardRef, Inject, NgZone } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { fromEvent } from 'rxjs/observable/fromEvent';\r\n\r\nimport { ANGULAR_MONACO_EDITOR_CONFIG, AngularMonacoEditorConfig } from '../model/config';\r\nimport { CodeEditorEventService } from '../service/code-editor.event.service';\r\nimport { CODE_EDITOR_EVENTS } from '../constant/events';\r\nimport { AngularEditorModel } from '../model/types';\r\nimport { BaseMonacoEditor } from '../model/base-monaco-editor';\r\nimport { AngularMonacoEditorService } from '../service/angular-monaco-editor.service';\r\n\r\ndeclare const monaco: any;\r\n\r\n// 自定义输入控件:1.封装ControlValueAccessor\r\n// https://code-examples.net/zh-CN/q/2154761\r\nexport const CODE_EDITOR_INPUT_VALUE_ACCESSOR: any = {\r\n // https://blog.csdn.net/wangdan_2013/article/details/81314959\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => AngularMonacoEditorComponent),\r\n multi: true\r\n};\r\n\r\n@Component({\r\n // tslint:disable-next-line:component-selector\r\n selector: 'angular-monaco-editor',\r\n templateUrl: './angular-monaco-editor.component.html',\r\n styleUrls: ['./angular-monaco-editor.component.css'],\r\n // 自定义输入控件:2.引入依赖服务ControlValueAccessor\r\n providers: [\r\n CODE_EDITOR_INPUT_VALUE_ACCESSOR,\r\n CodeEditorEventService,\r\n AngularMonacoEditorService\r\n ]\r\n})\r\n\r\n// 自定义输入控件 <-> Monaco Edtor\r\n\r\n// 自定义输入控件:3.1 implements ControlValueAccessor\r\nexport class AngularMonacoEditorComponent extends BaseMonacoEditor implements ControlValueAccessor {\r\n\r\n @Input('model')\r\n set model(model: AngularEditorModel) {\r\n this.options.model = model;\r\n if (this._editor) {\r\n this._editor.dispose();\r\n this.initMonaco(this.options);\r\n }\r\n }\r\n\r\n private _value = '';\r\n\r\n // tslint:disable-next-line:max-line-length\r\n constructor(private angularMonacoEditorService: AngularMonacoEditorService,\r\n private zone: NgZone,\r\n private editorEventService: CodeEditorEventService,\r\n @Inject(ANGULAR_MONACO_EDITOR_CONFIG) private angularEditorconfig: AngularMonacoEditorConfig) {\r\n super(editorEventService, angularEditorconfig);\r\n }\r\n\r\n // todo: 提取options公共类\r\n protected initMonaco(options: any): void {\r\n const enableModel = !!options.model;\r\n if (enableModel) {\r\n const searchedModel = monaco.editor.getModel(options.model.uri);\r\n if (null !== searchedModel) {\r\n searchedModel.dispose();\r\n }\r\n\r\n options.model = monaco.editor.createModel(options.model.value, options.model.language, options.model.uri);\r\n }\r\n\r\n this._editor = monaco.editor.create(this._editorComponent.nativeElement, options);\r\n\r\n if (!enableModel) {\r\n this._editor.setValue(this._value);\r\n }\r\n \r\n if (enableModel) {\r\n this.angularMonacoEditorService.handleModelMarkers();\r\n }\r\n\r\n // monaco editor -> outside component\r\n this._editor.onDidChangeModelContent((e: any) => this.onChangeModelContentHandler(e));\r\n\r\n this._editor.onDidBlurEditorText((e: any) => this.onBlurEditorTextHandler(e));\r\n\r\n this._editor.onDidLayoutChange((e: any) => this.onLayoutChangeHandler(e));\r\n\r\n // refresh layout on resize event.\r\n this.refreshLayoutWhenWindowResize();\r\n\r\n this.editorEventService.fireEvent({\r\n eventName: CODE_EDITOR_EVENTS.onInit,\r\n target: this,\r\n editor: this._editor\r\n });\r\n }\r\n\r\n /**\r\n * refresh layout when resized the window\r\n */\r\n refreshLayoutWhenWindowResize() {\r\n if (this._windowResizeSubscription) {\r\n this._windowResizeSubscription.unsubscribe();\r\n }\r\n // fromEvent用于兼听事件,事件触发时,将事件event转成可流动的Observable进行传输\r\n // https://www.jianshu.com/p/46894deb870a\r\n this._windowResizeSubscription = fromEvent(window, 'resize').subscribe(() => this._editor.layout());\r\n }\r\n\r\n onChangeModelContentHandler(e) {\r\n const _value = this._editor.getValue();\r\n\r\n // monaco editor -> outside component\r\n // https://github.com/JTangming/tm/issues/4 ngZone详解\r\n this.zone.run(() => this.value = _value); // value is not propagated to parent when executing outside zone.\r\n }\r\n\r\n onBlurEditorTextHandler(e) {\r\n\r\n this.onControlTouched();\r\n }\r\n\r\n onLayoutChangeHandler(e) {\r\n console.log('Layout changed:\\n' + e);\r\n }\r\n\r\n // get accessor\r\n get value(): any {\r\n return this._value;\r\n }\r\n\r\n // set accessor including call the onchange callback\r\n set value(v: any) {\r\n if (v !== this.value) {// 注意这种写法,值得学习\r\n this._value = v;\r\n }\r\n\r\n this.onControlValueChange(this.value); // 在属性修饰器里调用onControlValueChange方法\r\n }\r\n\r\n // 自定义输入控件:3.2 implements ControlValueAccesso\r\n\r\n // outside component -> monaco editor\r\n\r\n // From ControlValueAccessor interface\r\n writeValue(value: any) {\r\n const self = this;\r\n self.value = value || '';\r\n\r\n // Fix for value change while dispose in process.\r\n setTimeout(() => {\r\n if (self._editor /*&& !this.options.model*/) {\r\n self._editor.setValue(self._value);\r\n }\r\n });\r\n }\r\n\r\n // From ControlValueAccessor interface\r\n registerOnChange(fn: any) {\r\n this.onControlValueChange = fn;\r\n }\r\n\r\n // From ControlValueAccessor interface\r\n registerOnTouched(fn: any) {\r\n this.onControlTouched = fn;\r\n }\r\n\r\n // ControlValueAccessor提供的事件回调\r\n onControlValueChange = (_: any) => {\r\n }\r\n\r\n // ControlValueAccessor提供的事件回调\r\n onControlTouched = () => {\r\n }\r\n\r\n}\r\n","import { CommonModule } from '@angular/common';\r\n\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { ANGULAR_MONACO_EDITOR_CONFIG, AngularMonacoEditorConfig } from './model/config';\r\nimport { AngularMonacoEditorComponent } from './angular-monaco-editor/angular-monaco-editor.component';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ],\r\n declarations: [\r\n AngularMonacoEditorComponent\r\n ],\r\n exports: [\r\n AngularMonacoEditorComponent\r\n ],\r\n providers: [\r\n ]\r\n})\r\n\r\nexport class AngularMonacoEditorModule {\r\n public static forRoot(config: AngularMonacoEditorConfig = {}): ModuleWithProviders {\r\n return {\r\n ngModule: AngularMonacoEditorModule,\r\n providers: [\r\n { provide: ANGULAR_MONACO_EDITOR_CONFIG, useValue: config }\r\n ]\r\n };\r\n }\r\n}\r\n","import {Directive, EventEmitter, Input, Optional, Output, TemplateRef} from '@angular/core';\r\n// import {ShContextMenuComponent} from './sh-context-menu.component';\r\nimport {ShContextMenuClickEvent} from './sh-context-menu.models';\r\n\r\nexport class MenuItemContext {\r\n $implicit: any;\r\n\r\n constructor() {\r\n this.$implicit = {};\r\n }\r\n}\r\n\r\n@Directive({\r\n selector: '[shContextMenuItem]'\r\n})\r\nexport class ShContextMenuItemDirective {\r\n @Input() subMenu;\r\n @Input() divider: boolean;\r\n @Input() visible: (event: ShContextMenuClickEvent) => boolean;\r\n @Input() disabled: (event: ShContextMenuClickEvent) => boolean;\r\n @Input() closeOnClick = true;\r\n\r\n @Output() click = new EventEmitter<ShContextMenuClickEvent>();\r\n\r\n context: MenuItemContext = new MenuItemContext();\r\n\r\n private _active: boolean;\r\n\r\n constructor(@Optional() public template: TemplateRef<MenuItemContext>) {\r\n }\r\n\r\n setNotActive() {\r\n this._active = false;\r\n if (this.subMenu) {\r\n this.subMenu.setNotActive();\r\n }\r\n }\r\n\r\n setActive() {\r\n this._active = true;\r\n }\r\n}\r\n","import {ElementRef, Injectable, OnDestroy} from '@angular/core';\r\nimport {ShContextMenuComponent} from './sh-context-menu.component';\r\nimport {CloseScrollStrategy, Overlay} from '@angular/cdk/overlay';\r\nimport {TemplatePortal} from '@angular/cdk/portal';\r\nimport {ConnectedPositionStrategy} from '@angular/cdk/overlay/typings/position/connected-position-strategy';\r\nimport {ShContextMenuEvent, ShContextSubMenuEvent} from './sh-context-menu.models';\r\nimport {OverlayRef} from '@angular/cdk/overlay';\r\nimport {fromEvent} from 'rxjs/observable/fromEvent';\r\nimport {Subscription} from 'rxjs/Subscription';\r\n\r\n@Injectable()\r\nexport class ShContextMenuService implements OnDestroy {\r\n activeOverlays: OverlayRef[] = [];\r\n backDropSub: Subscription;\r\n\r\n activeMenu: ShContextMenuComponent;\r\n\r\n constructor(private overlay: Overlay) {\r\n }\r\n\r\n openMenu(ctxEvent: ShContextMenuEvent) {\r\n this.closeCurrentOverlays();\r\n const {menu, mouseEvent, targetElement, data} = ctxEvent;\r\n\r\n this.activeMenu = menu;\r\n\r\n mouseEvent.preventDefault();\r\n mouseEvent.stopPropagation();\r\n\r\n this.overrideGetBoundingClientRect(targetElement, mouseEvent);\r\n\r\n const scrollStrategy = this.buildCloseScrollStrategy();\r\n const positionStrategy = this.buildConnectedPositionStrategy(targetElement);\r\n\r\n this.attachContextToItems(menu, data);\r\n\r\n const overlayRef = this.createAndAttachOverlay(positionStrategy, scrollStrategy, menu, true);\r\n this.attachOverlayRef(menu, overlayRef);\r\n\r\n this.registerBackdropEvents(overlayRef);\r\n }\r\n\r\n openSubMenu(ctxEvent: ShContextSubMenuEvent): any {\r\n const {menu, mouseEvent, targetElement, data, parentMenu} = ctxEvent;\r\n\r\n mouseEvent.preventDefault();\r\n mouseEvent.stopPropagation();\r\n\r\n const scrollStrategy = this.buildCloseScrollStrategy();\r\n const positionStrategy = this.buildConnectedPositionStrategyForSubMenu(targetElement);\r\n const overlayRef = this.createAndAttachOverlay(positionStrategy, scrollStrategy, menu, false);\r\n\r\n this.attachContextToItems(menu, data);\r\n this.attachThisContext(menu, parentMenu);\r\n this.attachOverlayRef(menu, overlayRef);\r\n }\r\n\r\n destroy() {\r\n this.closeCurrentOverlays();\r\n this.backDropSub.unsubscribe();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n closeSubMenus(menu: ShContextMenuComponent) {\r\n const itemsWithSubMenus = menu\r\n .menuItems\r\n .filter(i => !!i.subMenu && !!i.subMenu.overlayRef);\r\n\r\n if (itemsWithSubMenus.length) {\r\n itemsWithSubMenus.forEach(sm => this.closeSubMenus(sm.subMenu));\r\n\r\n const overlayRefs = itemsWithSubMenus\r\n .map(i => i.subMenu.overlayRef);\r\n\r\n overlayRefs.forEach(r => r.dispose());\r\n }\r\n }\r\n\r\n private registerBackdropEvents(overlayRef: OverlayRef) {\r\n const elm = overlayRef.backdropElement;\r\n\r\n this.backDropSub = fromEvent(elm, 'mousedown')\r\n .subscribe(this.closeCurrentOverlays.bind(this));\r\n }\r\n\r\n private createAndAttachOverlay(positionStrategy: ConnectedPositionStrategy,\r\n scrollStrategy: CloseScrollStrategy,\r\n menu: ShContextMenuComponent,\r\n hasBackdrop: boolean = true) {\r\n\r\n const overlayRef = this.overlay.create({\r\n positionStrategy,\r\n scrollStrategy,\r\n hasBackdrop: hasBackdrop,\r\n backdropClass: 'sh-backdrop'\r\n });\r\n\r\n /*\r\n TODO: try passing the TemplatePortal context (data)\r\n and then injecting it to the *ngTemplateOutlet in the component template\r\n */\r\n const menuPortal = new TemplatePortal(menu.menuTemplate, menu.menuContainer);\r\n overlayRef.attach(menuPortal);\r\n\r\n this.activeOverlays.push(overlayRef);\r\n\r\n return overlayRef;\r\n }\r\n\r\n private buildCloseScrollStrategy() {\r\n return this.overlay.scrollStrategies.close();\r\n }\r\n\r\n private buildConnectedPositionStrategy(elm: ElementRef): ConnectedPositionStrategy {\r\n return this\r\n .overlay\r\n .position()\r\n .connectedTo(elm,\r\n {originX: 'start', originY: 'bottom'},\r\n {overlayX: 'start', overlayY: 'top'})\r\n .withFallbackPosition(\r\n {originX: 'start', originY: 'top'},\r\n {overlayX: 'start', overlayY: 'bottom'})\r\n .withFallbackPosition(\r\n {originX: 'end', originY: 'top'},\r\n {overlayX: 'start', overlayY: 'top'})\r\n .withFallbackPosition(\r\n {originX: 'start', originY: 'top'},\r\n {overlayX: 'end', overlayY: 'top'})\r\n .withFallbackPosition(\r\n {originX: 'end', originY: 'center'},\r\n {overlayX: 'start', overlayY: 'center'})\r\n .withFallbackPosition(\r\n {originX: 'start', originY: 'center'},\r\n {overlayX: 'end', overlayY: 'center'});\r\n }\r\n\r\n private buildConnectedPositionStrategyForSubMenu(elm: ElementRef): ConnectedPositionStrategy {\r\n return this\r\n .overlay\r\n .position()\r\n .connectedTo(elm,\r\n {originX: 'end', originY: 'top'},\r\n {overlayX: 'start', overlayY: 'top'})\r\n .withFallbackPosition(\r\n {originX: 'start', originY: 'top'},\r\n {overlayX: 'end', overlayY: 'top'})\r\n .withFallbackPosition(\r\n {originX: 'end', originY: 'bottom'},\r\n {overlayX: 'start', overlayY: 'bottom'})\r\n .withFallbackPosition(\r\n {originX: 'start', originY: 'bottom'},\r\n {overlayX: 'end', overlayY: 'bottom'});\r\n }\r\n\r\n /*\r\n we need to override getBoundingClientRect() to return the position of the menu.\r\n this is done because @angular/cdk use this function internally to determine where the overlay should be positioned\r\n https://github.com/angular/material2/blob/master/src/cdk/overlay/position/connected-position-strategy.ts#L288\r\n */\r\n private overrideGetBoundingClientRect(elm: ElementRef, event: MouseEvent) {\r\n const {clientX, clientY} = event;\r\n\r\n elm.nativeElement.getBoundingClientRect = (): ClientRect => {\r\n return {\r\n bottom: clientY,\r\n height: 0,\r\n left: clientX,\r\n right: clientX,\r\n top: clientY,\r\n width: 0\r\n };\r\n };\r\n }\r\n\r\n private closeCurrentOverlays() {\r\n this.activeOverlays.forEach((o) => {\r\n o.detach();\r\n o.dispose();\r\n });\r\n\r\n this.activeOverlays = [];\r\n\r\n // TODO: create close subject and emit.\r\n // subscribe in component\r\n if (this.activeMenu) {\r\n this.activeMenu.close();\r\n }\r\n }\r\n\r\n private attachContextToItems(menu: ShContextMenuComponent, data: any) {\r\n menu.menuItems.forEach(i => i.context.$implicit = data);\r\n }\r\n\r\n private attachThisContext(menu: ShContextMenuComponent, parentMenu: ShContextMenuComponent) {\r\n menu.thisContext = parentMenu.thisContext;\r\n }\r\n\r\n private attachOverlayRef(menu: ShContextMenuComponent, overlayRef: OverlayRef) {\r\n menu.overlayRef = overlayRef;\r\n }\r\n}\r\n","import {\r\n Component, ContentChildren, ElementRef, Input, OnDestroy, QueryList, TemplateRef, ViewChild, ViewChildren,\r\n ViewContainerRef,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport {ShContextMenuItemDirective} from './sh-context-menu-item.directive';\r\nimport {ShContextMenuService} from './sh-context-menu.service';\r\nimport {OverlayRef} from '@angular/cdk/overlay';\r\n\r\n@Component({\r\n selector: 'sh-context-menu',\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: ['sh-context-menu.css'],\r\n template: `\r\n <ng-container #menuContainer></ng-container>\r\n <ng-template #menuTemplate>\r\n <div class=\"sh-context-menu\">\r\n <div\r\n *ngFor=\"let menuItem of menuItems\"\r\n #itemElement\r\n [ngClass]=\"{'sh-sub-anchor': menuItem.subMenu && menuItem.visible,\r\n 'sh-context-menu--item__disable': !menuItem.visible,\r\n 'sh-context-menu--item__divider': menuItem.divider,\r\n 'sh-context-menu--item__sub-active': subActive && menuItem.active}\"\r\n class=\"sh-context-menu--item\"\r\n (mouseenter)=\"onEnter($event, menuItem, itemElement)\"\r\n (click)=\"onClick($event, menuItem)\">\r\n <ng-container *ngIf=\"!menuItem.divider || !isVisible(menuItem)\">\r\n <ng-content *ngTemplateOutlet=\"menuItem.template; context: menuItem.context\"></ng-content>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </ng-template>\r\n `\r\n})\r\nexport class ShContextMenuComponent implements OnDestroy {\r\n @Input('this') thisContext: any;\r\n\r\n @ContentChildren(ShContextMenuItemDirective, {read: ShContextMenuItemDirective}) contentChildrenItems;\r\n @ViewChildren(ShContextMenuItemDirective, {read: ShContextMenuItemDirective}) viewChildrenItems;\r\n\r\n @ViewChild('menuTemplate', {read: TemplateRef}) menuTemplate;\r\n @ViewChild('menuContainer', {read: ViewContainerRef}) menuContainer;\r\n\r\n public overlayRef: OverlayRef;\r\n subActive: boolean;\r\n\r\n constructor(private ctxService: ShContextMenuService) {\r\n this.contentChildrenItems = new QueryList<ShContextMenuItemDirective>();\r\n this.viewChildrenItems = new QueryList<ShContextMenuItemDirective>();\r\n }\r\n\r\n get menuItems(): QueryList<ShContextMenuItemDirective> {\r\n // when using the ShContextMenuComponent as menu, the ContentChildren is the source\r\n if (this.contentChildrenItems.length) {\r\n return this.contentChildrenItems;\r\n }\r\n\r\n // when using a custom component as menu the ViewChildren is the source\r\n return this.viewChildrenItems;\r\n }\r\n\r\n onEnter($event: MouseEvent, item: ShContextMenuItemDirective, elm: HTMLElement) {\r\n this.ctxService.closeSubMenus(this);\r\n this.setNotActive();\r\n\r\n if (!item.subMenu || !item.visible) {\r\n return;\r\n }\r\n\r\n this.setActive(item);\r\n this.ctxService.openSubMenu({\r\n data: item.context.$implicit,\r\n targetElement: new ElementRef(elm),\r\n menu: item.subMenu,\r\n mouseEvent: $event,\r\n parentMenu: this\r\n });\r\n }\r\n\r\n private setActive(item: ShContextMenuItemDirective) {\r\n item.setActive();\r\n this.subActive = true;\r\n }\r\n\r\n onClick(event: MouseEvent, item: ShContextMenuItemDirective) {\r\n // TODO: move click handling to service\r\n\r\n if (item.divider) {\r\n return;\r\n }\r\n\r\n if (!item.subMenu && item.closeOnClick) {\r\n this.ctxService.destroy();\r\n\r\n item.click.emit({\r\n data: item.context.$implicit,\r\n event\r\n });\r\n }\r\n }\r\n\r\n private callWithContext(fn, fallbackContext, data, event) {\r\n return fn.call(this.thisContext ? this.thisContext : fallbackContext, {data, event});\r\n }\r\n\r\n close(): void {\r\n this.setNotActive();\r\n this.menuContainer.detach();\r\n if(this.overlayRef) {\r\n this.overlayRef.detach();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.close();\r\n }\r\n\r\n setNotActive() {\r\n this.subActive = false;\r\n this.menuItems.forEach(i => i.setNotActive());\r\n }\r\n\r\n isVisible(item: ShContextMenuItemDirective) {\r\n if (!item.visible) {\r\n return true;\r\n }\r\n\r\n return this.callWithContext(item.visible, this, item.context.$implicit, null);\r\n }\r\n}\r\n","import {Directive, ElementRef, Input, OnDestroy, OnInit} from '@angular/core';\r\nimport {ShContextMenuService} from './sh-context-menu.service';\r\nimport {ShContextMenuComponent} from './sh-context-menu.component';\r\nimport {Subscription} from 'rxjs/Subscription';\r\nimport {fromEvent} from 'rxjs/observable/fromEvent';\r\nimport {merge} from 'rxjs/observable/merge';\r\n\r\n@Directive({\r\n selector: '[shAttachMenu]'\r\n})\r\nexport class ShAttachMenuDirective implements OnDestroy, OnInit {\r\n @Input('shAttachMenu') menu: ShContextMenuComponent;\r\n @Input('shMenuTriggers') triggers: string[];\r\n @Input('shMenuData') data: any;\r\n sub: Subscription;\r\n\r\n constructor(private ctxService: ShContextMenuService, private elm: ElementRef) {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.setupEvents();\r\n }\r\n\r\n private setupEvents() {\r\n const observables = [];\r\n\r\n if (!this.triggers) {\r\n observables.push(fromEvent(this.elm.nativeElement, 'contextmenu'));\r\n } else {\r\n this.triggers.forEach((t) => {\r\n observables.push(fromEvent(this.elm.nativeElement, t));\r\n });\r\n }\r\n\r\n this.sub = merge(...observables).subscribe(this.openMenu.bind(this));\r\n }\r\n\r\n openMenu(event: MouseEvent) {\r\n this.ctxService.openMenu({\r\n menu: this.menu,\r\n mouseEvent: event,\r\n targetElement: this.elm,\r\n data: this.data\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.sub.unsubscribe();\r\n }\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\n\r\nimport {ShContextMenuComponent} from './sh-context-menu.component';\r\nimport {ShAttachMenuDirective} from './sh-attach-menu.directive';\r\nimport {ShContextMenuService} from './sh-context-menu.service';\r\nimport {ShContextMenuItemDirective} from './sh-context-menu-item.directive';\r\nimport {OverlayModule} from '@angular/cdk/overlay';\r\n\r\n@NgModule({\r\n declarations: [\r\n ShAttachMenuDirective,\r\n ShContextMenuComponent,\r\n ShContextMenuItemDirective\r\n ],\r\n exports: [\r\n ShAttachMenuDirective,\r\n ShContextMenuComponent,\r\n ShContextMenuItemDirective\r\n ],\r\n providers: [\r\n ShContextMenuService\r\n ],\r\n imports: [\r\n CommonModule,\r\n OverlayModule\r\n ],\r\n entryComponents: [\r\n ShContextMenuComponent\r\n ]\r\n})\r\nexport class ShContextMenuModule {\r\n}\r\n","import {\r\n Component, OnInit, Input, ViewChild, ComponentRef, ViewContainerRef, ComponentFactoryResolver,\r\n Output, EventEmitter\r\n} from '@angular/core';\r\nimport { find, findIndex, merge } from 'lodash-es';\r\n\r\n@Component({\r\n selector: 'app-wizard',\r\n templateUrl: './wizard.component.html',\r\n styleUrls: ['./wizard.component.css']\r\n})\r\nexport class WizardComponent implements OnInit {\r\n @Output() clickCancelBtn = new EventEmitter<any>();\r\n @Output() clickFinishBtn = new EventEmitter<any>();\r\n\r\n @Input() title = '';\r\n @Input() steps = [];\r\n curStep;\r\n curStepIndex = 0;\r\n curComponentRef: ComponentRef<any>;\r\n // finishedSteps = [];\r\n @ViewChild('stepContainer', { read: ViewContainerRef }) stepContainer: ViewContainerRef;\r\n\r\n constructor(private viewContainerRef: ViewContainerRef,\r\n private componentFactoryResolver: ComponentFactoryResolver) { }\r\n\r\n ngOnInit() {\r\n if (this.steps && this.steps.length > 0) {\r\n this.curStep = this.steps[this.curStepIndex];\r\n this.createStepComponent(this.steps[this.curStepIndex]);\r\n }\r\n }\r\n createStepComponent(step) {\r\n this.stepContainer.clear();\r\n const componentFactory = this.componentFactoryResolver.resolveComponentFactory(step.component);\r\n this.curComponentRef = this.stepContainer.createComponent(componentFactory);\r\n this.curComponentRef.instance.data = step.data;\r\n\r\n // 新增步骤\r\n if (this.curComponentRef.instance.addStep) {\r\n this.curComponentRef.instance.addStep.subscribe((stepList) => {\r\n\r\n const curIndex = findIndex(this.steps, this.curStep);\r\n this.steps.splice(curIndex + 1, 0, ...stepList);\r\n\r\n this.curStep.nextStep = stepList[0].stepId;\r\n this.curStep.showFinishBtn = false;\r\n this.curStep.showNextStepBtn = true;\r\n\r\n });\r\n }\r\n // 删除步骤\r\n if (this.curComponentRef.instance.removeStep) {\r\n this.curComponentRef.instance.removeStep.subscribe((data) => {\r\n merge(this.curStep, data.curStep);\r\n data.removeSteps.forEach(removeStep => {\r\n const index = findIndex(this.steps, removeStep);\r\n this.steps.splice(index, 1);\r\n });\r\n });\r\n }\r\n // 变更步骤\r\n if (this.curComponentRef.instance.changeStep) {\r\n this.curComponentRef.instance.changeStep.subscribe((stepList) => {\r\n stepList.forEach(changeStep => {\r\n const oldStep = find(this.steps, function (s) { return s.stepId === changeStep.stepId; });\r\n merge(oldStep, changeStep);\r\n });\r\n });\r\n }\r\n\r\n }\r\n jumpStep(nextStep) {\r\n // 判断跳转方向\r\n if (nextStep === this.curStep) {\r\n return;\r\n }\r\n const nextIndex = findIndex(this.steps, function (s) { return s.stepId === nextStep.stepId; });\r\n if (nextIndex === this.curStepIndex) {\r\n return;\r\n }\r\n if (nextIndex < this.curStepIndex) { // 向前跳\r\n this.curStep = nextStep;\r\n this.curStepIndex = nextIndex;\r\n this.createStepComponent(nextStep);\r\n return;\r\n }\r\n if (nextStep.stepId === this.curStep.nextStep) { // 下一步\r\n this.nextStep();\r\n return;\r\n }\r\n // else if (this.finishedSteps.indexOf(nextStep.stepId) > -1) { // 已完成的后续步骤\r\n // this.curStep = nextStep;\r\n // this.curStepIndex = nextIndex;\r\n // this.createStepComponent(nextStep);\r\n // }\r\n\r\n }\r\n /**\r\n * 点击上一步\r\n */\r\n lastStep() {\r\n const self = this;\r\n this.curStepIndex = findIndex(this.steps, function (s) { return s.nextStep === self.curStep.stepId; });\r\n this.curStep = this.steps[this.curStepIndex];\r\n this.createStepComponent(this.curStep);\r\n }\r\n\r\n /**\r\n * 点击下一步\r\n */\r\n nextStep() {\r\n // 校验\r\n const validationFunc = this.curComponentRef.instance.validation;\r\n if (validationFunc && typeof (validationFunc) === 'function') {\r\n const result = validationFunc();\r\n if (!result) { return; }\r\n }\r\n // 执行各Component定义的nextStepClick事件\r\n const clickNextStep = this.curComponentRef.instance.clickNextStep;\r\n if (clickNextStep && typeof (clickNextStep) === 'function') {\r\n const result = clickNextStep(); // 返回值接收boolean或observable类型\r\n if (typeof (result) === 'boolean') {\r\n this.moveToNextStep(result);\r\n } else {\r\n result.subscribe(data => {\r\n this.moveToNextStep(data);\r\n });\r\n }\r\n } else {\r\n this.moveToNextStep(true);\r\n }\r\n }\r\n\r\n moveToNextStep(data) {\r\n if (!data) {\r\n return;\r\n }\r\n const curStep = this.curStep;\r\n if (curStep.nextStep === '') {\r\n return;\r\n }\r\n // this.finishedSteps.push(curStep.stepId);\r\n this.curStepIndex = findIndex(this.steps, function (s) { return s.stepId === curStep.nextStep; });\r\n if (this.curStepIndex > -1) {\r\n this.curStep = this.steps[this.curStepIndex];\r\n this.createStepComponent(this.curStep);\r\n }\r\n\r\n }\r\n /**\r\n * 取消\r\n */\r\n clickCancel() {\r\n this.clickCancelBtn.emit();\r\n }\r\n /**\r\n * 完成\r\n */\r\n finishWizard() {\r\n const validationFunc = this.curComponentRef.instance.validation;\r\n if (validationFunc && typeof (validationFunc) === 'function') {\r\n const result = validationFunc();\r\n if (!result) { return; }\r\n }\r\n\r\n const beforeFinish = this.curComponentRef.instance.beforeFinish;\r\n if (beforeFinish && typeof (beforeFinish) === 'function') {\r\n const result = beforeFinish();\r\n if (!result) { return; }\r\n }\r\n this.clickFinishBtn.emit();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { PerfectScrollbarModule } from '@farris/ui-perfect-scrollbar';\r\nimport { WizardComponent } from './component/wizard.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n WizardComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n PerfectScrollbarModule\r\n ],\r\n exports: [WizardComponent]\r\n})\r\nexport class WizardModule {\r\n constructor() { }\r\n}\r\n","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Configuration service for the Popover directive.\r\n * You can inject this service, typically in your root component, and customize\r\n * the values of its properties in order to provide default values for all the\r\n * popovers used in the application.\r\n */\r\n@Injectable({providedIn: 'root'})\r\nexport class PopoverConfig {\r\n /**\r\n * Placement of a popover. Accepts: \"top\", \"bottom\", \"left\", \"right\", \"auto\"\r\n */\r\n placement = 'top';\r\n /**\r\n * Specifies events that should trigger. Supports a space separated list of\r\n * event names.\r\n */\r\n triggers = 'click';\r\n\r\n outsideClick = false;\r\n /**\r\n * A selector specifying the element the popover should be appended to.\r\n * Currently only supports \"body\".\r\n */\r\n container: string;\r\n}\r\n","import { ChangeDetectionStrategy, Input, Component } from '@angular/core';\r\nimport { PopoverConfig } from './popover.config';\r\nimport { isBs3 } from '../utils/theme-provider';\r\n\r\n@Component({\r\n selector: 'popover-container',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n // tslint:disable-next-line\r\n host: {\r\n '[class]':\r\n '\"popover in popover-\" + placement + \" \" + \"bs-popover-\" + placement + \" \" + placement + \" \" + containerClass',\r\n '[class.show]': '!isBs3',\r\n role: 'tooltip',\r\n style: 'display:block;'\r\n },\r\n styles: [\r\n `\r\n :host.bs-popover-top .arrow, :host.bs-popover-bottom .arrow {\r\n left: 50%;\r\n margin-left: -8px;\r\n }\r\n :host.bs-popover-left .arrow, :host.bs-popover-right .arrow {\r\n top: 50%;\r\n margin-top: -8px;\r\n }\r\n `\r\n ],\r\n templateUrl: './popover-container.component.html'\r\n})\r\nexport class PopoverContainerComponent {\r\n @Input() placement: string;\r\n @Input() title: string;\r\n containerClass: string;\r\n\r\n get isBs3(): boolean {\r\n return isBs3();\r\n }\r\n\r\n constructor(config: PopoverConfig) {\r\n Object.assign(this, config);\r\n }\r\n}\r\n","import {\r\n Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output,\r\n Renderer2, TemplateRef, ViewContainerRef\r\n} from '@angular/core';\r\nimport { PopoverConfig } from './popover.config';\r\nimport { ComponentLoader, ComponentLoaderFactory } from '../utils/component-loader/index';\r\nimport { PopoverContainerComponent } from './popover-container.component';\r\n\r\n/**\r\n * A lightweight, extensible directive for fancy popover creation.\r\n */\r\n@Directive({selector: '[popover]', exportAs: 'bs-popover'})\r\nexport class PopoverDirective implements OnInit, OnDestroy {\r\n /**\r\n * Content to be displayed as popover.\r\n */\r\n @Input() popover: string | TemplateRef<any>;\r\n /**\r\n * Context to be used if popover is a template.\r\n */\r\n @Input() popoverContext: any;\r\n /**\r\n * Title of a popover.\r\n */\r\n @Input() popoverTitle: string;\r\n /**\r\n * Placement of a popover. Accepts: \"top\", \"bottom\", \"left\", \"right\"\r\n */\r\n @Input() placement: 'top' | 'bottom' | 'left' | 'right' | 'auto';\r\n /**\r\n * Close popover on outside click\r\n */\r\n @Input() outsideClick = false;\r\n /**\r\n * Specifies events that should trigger. Supports a space separated list of\r\n * event names.\r\n */\r\n @Input() triggers: string;\r\n /**\r\n * A selector specifying the element the popover should be appended to.\r\n * Currently only supports \"body\".\r\n */\r\n @Input() container: string;\r\n\r\n /**\r\n * Css class for popover container\r\n */\r\n @Input() containerClass = '';\r\n\r\n /**\r\n * Returns whether or not the popover is currently being shown\r\n */\r\n @Input()\r\n get isOpen(): boolean {\r\n return this._popover.isShown;\r\n }\r\n\r\n set isOpen(value: boolean) {\r\n if (value) {\r\n this.show();\r\n } else {\r\n this.hide();\r\n }\r\n }\r\n\r\n /**\r\n * Emits an event when the popover is shown\r\n */\r\n @Output() onShown: EventEmitter<any>;\r\n /**\r\n * Emits an event when the popover is hidden\r\n */\r\n @Output() onHidden: EventEmitter<any>;\r\n\r\n private _popover: ComponentLoader<PopoverContainerComponent>;\r\n private _isInited = false;\r\n\r\n constructor(_elementRef: ElementRef,\r\n _renderer: Renderer2,\r\n _viewContainerRef: ViewContainerRef,\r\n _config: PopoverConfig,\r\n cis: ComponentLoaderFactory) {\r\n this._popover = cis\r\n .createLoader<PopoverContainerComponent>(\r\n _elementRef,\r\n _viewContainerRef,\r\n _renderer\r\n )\r\n .provide({provide: PopoverConfig, useValue: _config});\r\n Object.assign(this, _config);\r\n this.onShown = this._popover.onShown;\r\n this.onHidden = this._popover.onHidden;\r\n\r\n // fix: no focus on button on Mac OS #1795\r\n if (typeof window !== 'undefined') {\r\n _elementRef.nativeElement.addEventListener('click', function () {\r\n try {\r\n _elementRef.nativeElement.focus();\r\n } catch (err) {\r\n return;\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Opens an element’s popover. This is considered a “manual” triggering of\r\n * the popover.\r\n */\r\n show(): void {\r\n if (this._popover.isShown || !this.popover) {\r\n return;\r\n }\r\n\r\n this._popover\r\n .attach(PopoverContainerComponent)\r\n .to(this.container)\r\n .position({attachment: this.placement})\r\n .show({\r\n content: this.popover,\r\n context: this.popoverContext,\r\n placement: this.placement,\r\n title: this.popoverTitle,\r\n containerClass: this.containerClass\r\n });\r\n this.isOpen = true;\r\n }\r\n\r\n /**\r\n * Closes an element’s popover. This is considered a “manual” triggering of\r\n * the popover.\r\n */\r\n hide(): void {\r\n if (this.isOpen) {\r\n this._popover.hide();\r\n this.isOpen = false;\r\n }\r\n }\r\n\r\n /**\r\n * Toggles an element’s popover. This is considered a “manual” triggering of\r\n * the popover.\r\n */\r\n toggle(): void {\r\n if (this.isOpen) {\r\n return this.hide();\r\n }\r\n\r\n this.show();\r\n }\r\n\r\n ngOnInit(): any {\r\n // fix: seems there are an issue with `routerLinkActive`\r\n // which result in duplicated call ngOnInit without call to ngOnDestroy\r\n // read more: https://github.com/valor-software/ngx-bootstrap/issues/1885\r\n if (this._isInited) {\r\n return;\r\n }\r\n this._isInited = true;\r\n\r\n this._popover.listen({\r\n triggers: this.triggers,\r\n outsideClick: this.outsideClick,\r\n show: () => this.show()\r\n });\r\n }\r\n\r\n ngOnDestroy(): any {\r\n this._popover.dispose();\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n// import { ComponentLoaderFactory } from '../utils/component-loader';\r\n// import { PositioningService } from '../utils/positioning';\r\nimport { PopoverConfig } from './popover.config';\r\nimport { PopoverDirective } from './popover.directive';\r\nimport { PopoverContainerComponent } from './popover-container.component';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [PopoverDirective, PopoverContainerComponent],\r\n exports: [PopoverDirective],\r\n // providers: [PopoverConfig, ComponentLoaderFactory, PositioningService],\r\n entryComponents: [PopoverContainerComponent]\r\n})\r\nexport class PopoverModule {\r\n static forRoot(): ModuleWithProviders {\r\n return {\r\n ngModule: PopoverModule,\r\n providers: [PopoverConfig]\r\n };\r\n }\r\n}\r\n","import { Type } from '@angular/core';\r\n\r\n// 控件全部配置\r\nexport class ElementPropertyConfig {\r\n categoryId: string;\r\n categoryName: string;\r\n hide?= false;\r\n hideTitle?= false;\r\n properties: PropertyEntity[];\r\n propertyData?: any;\r\n setPropertyRelates?: (changeObject, propertyData, parameters?) => void;\r\n}\r\n\r\n\r\n\r\n// 属性实体\r\nexport class PropertyEntity {\r\n propertyID: string; // 属性ID\r\n propertyName: string; // 属性显示的名称\r\n propertyType: string; // 属性的类型\r\n description?: string; // 属性描述\r\n defaultValue?: any; // 属性的默认值\r\n readonly?= false; // 是否只读\r\n visible?= true; // 是否可见\r\n iterator?: KeyMap[]; // 下拉框的枚举值\r\n min?: any; // 最小值\r\n max?: any; // 最大值\r\n\r\n numberFormat?: string; // 数字类型属性的格式,参考kendo numeric format\r\n decimals?: number; // 数字类型属性的小数位数\r\n\r\n\r\n\r\n /**\r\n * 级联属性\r\n */\r\n cascadeProperties?: PropertyEntity[]; // 级联属性配置\r\n isCollapse?= true; // 级联属性是否收起\r\n cascadeConverter?: TypeConverter; // 级联属性的汇总信息\r\n\r\n [propName: string]: any;\r\n\r\n /**\r\n * 模态框属性配置\r\n */\r\n editor?: Type<any>; // 属性自定义编辑器(以模态框的形式展示)\r\n editorParams?: any; // 自定义编辑器参数\r\n converter?: TypeConverter; // 属性值转换器,\r\n showClearButton?= false; // 是否展示清除图标\r\n\r\n // 打开模态框前的方法,一般用于校验逻辑,返回值中result=true,则进一步打开模态框,result=false则提示message内容,并不再打开模态框。\r\n beforeOpenModal?(): BeforeOpenModalResult {\r\n return new BeforeOpenModalResult();\r\n }\r\n\r\n // 点击清除按钮后的方法\r\n afterClickClearButton?(value: any): void;\r\n\r\n}\r\n\r\n// 转换器\r\nexport interface TypeConverter {\r\n convertTo(data: any, params?: any): string; // 由模态框转为属性框中展示的值\r\n}\r\n\r\nexport interface KeyMap {\r\n key: any;\r\n value: any;\r\n}\r\n\r\nexport class BeforeOpenModalResult {\r\n result: boolean;\r\n message?: string;\r\n}\r\n","import {\r\n Component, OnInit, Input, Output, OnChanges, SimpleChanges,\r\n EventEmitter, ComponentFactoryResolver, Injector, ElementRef\r\n} from '@angular/core';\r\nimport { PropertyEntity } from '../../entity/property-entity';\r\nimport { BsModalService } from '@farris/ui-modal';\r\nimport { NotifyService, NotifyOptions } from '@farris/ui-notify';\r\n\r\n@Component({\r\n selector: 'webide-property-item',\r\n templateUrl: './property-item.component.html',\r\n styleUrls: ['./property-item.component.css']\r\n})\r\nexport class PropertyItemComponent implements OnInit, OnChanges {\r\n @Input() elementConfig: PropertyEntity;\r\n @Input() elementValue: any;\r\n @Output() valueChanged = new EventEmitter<any>();\r\n @Output() submitModal = new EventEmitter<any>();\r\n\r\n elementShowValue: any; // 模态框类型的属性:属性框的展示值\r\n selectOptions = [];\r\n itemType = 'string';\r\n show = true;\r\n\r\n numberRestriction = {\r\n format: 'n2',\r\n min: '',\r\n max: ''\r\n };\r\n showClearButton = false;\r\n constructor(\r\n private resolver: ComponentFactoryResolver, private modalService: BsModalService,\r\n private injector: Injector, private notifyServ: NotifyService, public el: ElementRef) { }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.refresh();\r\n }\r\n\r\n ngOnInit() {\r\n this.refresh();\r\n }\r\n\r\n refresh() {\r\n // 是否显示,visible默认true\r\n if (Object.keys(this.elementConfig).indexOf('visible') < 0) {\r\n this.show = true;\r\n } else {\r\n this.show = this.elementConfig.visible;\r\n }\r\n\r\n\r\n // 显示格式\r\n const propertyType = this.itemType = this.elementConfig.propertyType;\r\n switch (propertyType) {\r\n case 'boolean': {\r\n this.itemType = 'select';\r\n this.selectOptions = [{ key: true, value: true }, { key: false, value: false }];\r\n break;\r\n }\r\n case 'select': {\r\n this.selectOptions = this.elementConfig.iterator;\r\n break;\r\n }\r\n case 'modal': {\r\n this._convertModalShowValue(this.elementValue);\r\n break;\r\n }\r\n case 'number': {\r\n // precision待优化为'n2'的格式,与kendo保持一致\r\n const precision = this.elementConfig.precision;\r\n if (precision !== undefined && precision > -1) {\r\n this.numberRestriction.format = 'n' + precision;\r\n }\r\n\r\n // 支持传入kendo Numeric format格式 :'n3' / 'p'\r\n if (this.elementConfig.numberFormat) {\r\n this.numberRestriction.format = this.elementConfig.numberFormat;\r\n }\r\n\r\n // 设置最大、最小值\r\n this.numberRestriction.min = this.elementConfig.min;\r\n this.numberRestriction.max = this.elementConfig.max;\r\n break;\r\n }\r\n case 'string': {\r\n if (this.elementConfig.readonly) {\r\n this._convertModalShowValue(this.elementValue);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n\r\n /**\r\n * 鼠标移入\r\n */\r\n onmouseover() {\r\n if (!this.elementConfig.showClearButton) {\r\n return;\r\n }\r\n if (!this.showClearButton) {\r\n this.showClearButton = true;\r\n }\r\n }\r\n\r\n /**\r\n * 鼠标离开\r\n */\r\n onmouseleave() {\r\n if (!this.elementConfig.showClearButton) {\r\n return;\r\n }\r\n this.showClearButton = false;\r\n }\r\n\r\n\r\n /**\r\n * 清除模态框内容\r\n */\r\n modalClear() {\r\n // 数据转换\r\n this._convertModalShowValue(null);\r\n\r\n // 若有清除后事件,先执行方法\r\n if (Object.keys(this.elementConfig).indexOf('afterClickClearButton') > -1 &&\r\n typeof (this.elementConfig.afterClickClearButton) === 'function') {\r\n this.elementConfig.afterClickClearButton(this.elementValue);\r\n }\r\n\r\n const changeObject = {\r\n propertyID: this.elementConfig.propertyID,\r\n propertyValue: null\r\n };\r\n this.submitModal.emit({ changeObject, parameters: null });\r\n }\r\n\r\n /**\r\n * 变更属性值\r\n */\r\n changeValue() {\r\n const changeObject = {\r\n propertyID: this.elementConfig.propertyID,\r\n propertyValue: this.elementValue\r\n };\r\n this.valueChanged.emit({ changeObject });\r\n }\r\n\r\n /**\r\n * 自定义编辑器使用模态框打开\r\n */\r\n openModal() {\r\n if (this.elementConfig.readonly) {\r\n return;\r\n }\r\n if (Object.keys(this.elementConfig).indexOf('beforeOpenModal') > -1 && typeof (this.elementConfig.beforeOpenModal) === 'function') {\r\n const result = this.elementConfig.beforeOpenModal();\r\n if (result && !result.result) {\r\n this.notifyServ.warning({\r\n title: '系统提示', msg: result.message, timeout: 3000\r\n } as NotifyOptions);\r\n return;\r\n }\r\n }\r\n this.createEditorComponent();\r\n }\r\n\r\n /**\r\n * 创建自定义编辑器\r\n */\r\n private createEditorComponent() {\r\n const editor = this.elementConfig.editor;\r\n if (!editor) {\r\n return;\r\n }\r\n // 创建模态框组件\r\n const compFactory = this.resolver.resolveComponentFactory(editor);\r\n const compRef = compFactory.create(this.injector);\r\n compRef.instance.value = this.elementValue;\r\n if (this.elementConfig.editorParams && compRef.instance.editorParams) { // 编辑器需要的额外参数\r\n compRef.instance.editorParams = this.elementConfig.editorParams;\r\n }\r\n let modalConfig = compRef.instance.modalConfig;\r\n if (!modalConfig) {\r\n modalConfig = {\r\n title: '属性配置',\r\n width: 800,\r\n height: 400,\r\n showButtons: false\r\n };\r\n } else if (modalConfig.showButtons) {\r\n modalConfig.buttons = compRef.instance.modalFooter;\r\n }\r\n\r\n const dialog = this.modalService.show(compRef, modalConfig);\r\n\r\n // 监听关闭模态框\r\n if (compRef.instance.closeModal && compRef.instance.closeModal instanceof EventEmitter) {\r\n compRef.instance.closeModal.subscribe((data) => {\r\n // 数据转换\r\n if (data) {\r\n this._convertModalShowValue(data);\r\n\r\n const changeObject = {\r\n propertyID: this.elementConfig.propertyID,\r\n propertyValue: data\r\n };\r\n this.valueChanged.emit({ changeObject });\r\n\r\n }\r\n\r\n dialog.close();\r\n });\r\n }\r\n\r\n\r\n\r\n // 弹出框关闭事件,带参数,格式为{ value, parameters }\r\n if (compRef.instance.submitModal && compRef.instance.submitModal instanceof EventEmitter) {\r\n compRef.instance.submitModal.subscribe(data => {\r\n if (!data) {\r\n dialog.close();\r\n return;\r\n }\r\n const { value, parameters } = data;\r\n // 数据转换\r\n this._convertModalShowValue(value);\r\n\r\n const changeObject = {\r\n propertyID: this.elementConfig.propertyID,\r\n propertyValue: value\r\n };\r\n this.submitModal.emit({ changeObject, parameters });\r\n\r\n dialog.close();\r\n });\r\n }\r\n\r\n }\r\n\r\n /**\r\n * 模态框场景下将属性值转换为输入框中显示的值\r\n * @param value\r\n */\r\n private _convertModalShowValue(value) {\r\n if (this.elementConfig.converter) {\r\n this.elementShowValue = this.elementConfig.converter.convertTo(value);\r\n return;\r\n }\r\n if (value && value instanceof Object) {\r\n this.elementShowValue = JSON.stringify(value);\r\n return;\r\n }\r\n this.elementShowValue = value;\r\n }\r\n}\r\n","import { Component, OnInit, Input, Output, EventEmitter, ViewChildren, OnChanges, SimpleChanges, ViewEncapsulation } from '@angular/core';\r\nimport { ElementPropertyConfig } from '../../entity/property-entity';\r\nimport { PropertyItemComponent } from '../property-item/property-item.component';\r\n\r\n@Component({\r\n selector: 'webide-property-item-list',\r\n templateUrl: './property-item-list.component.html',\r\n styleUrls: ['./property-item-list.component.css'],\r\n encapsulation: ViewEncapsulation.None\r\n\r\n})\r\nexport class PropertyItemListComponent implements OnChanges {\r\n @Input() category: ElementPropertyConfig; // 某一分类下的属性配置\r\n @Input() propertyData; // 属性值\r\n @Output() valueChanged = new EventEmitter<any>();\r\n @Output() submitModal = new EventEmitter<any>();\r\n\r\n @ViewChildren(PropertyItemComponent) items: Array<PropertyItemComponent>;\r\n\r\n data; // 实际属性值\r\n constructor() { }\r\n\r\n ngOnChanges(simpleChanges: SimpleChanges) {\r\n // 若分类下有propertyData,则取分类下的propertyData;否则取整体的propertyData\r\n if (this.category.propertyData) {\r\n this.data = this.category.propertyData;\r\n } else {\r\n this.data = this.propertyData;\r\n }\r\n }\r\n refresh() {\r\n // 若分类下有propertyData,则取分类下的propertyData;否则取整体的propertyData\r\n if (this.category.propertyData) {\r\n this.data = this.category.propertyData;\r\n } else {\r\n this.data = this.propertyData;\r\n }\r\n this.items.forEach(item => item.refresh());\r\n }\r\n\r\n /**\r\n * 一般属性变更\r\n * @param $event\r\n */\r\n _itemChanged($event) {\r\n const { changeObject } = $event;\r\n this.data[changeObject.propertyID] = changeObject.propertyValue;\r\n\r\n if (this.category.setPropertyRelates && typeof (this.category.setPropertyRelates) === 'function') {\r\n this.category.setPropertyRelates(changeObject, this.data);\r\n this.items.forEach(item => item.refresh());\r\n }\r\n changeObject.categoryId = this.category.categoryId;\r\n this.valueChanged.emit(changeObject);\r\n }\r\n\r\n /**\r\n * 模态框数据变更(TODO:待优化,合并valueChange事件)\r\n * @param $event\r\n */\r\n _submitModal($event) {\r\n const { changeObject, parameters } = $event;\r\n this.data[changeObject.propertyID] = changeObject.propertyValue;\r\n\r\n if (this.category.setPropertyRelates && typeof (this.category.setPropertyRelates) === 'function') {\r\n this.category.setPropertyRelates(changeObject, this.data, parameters);\r\n this.items.forEach(item => item.refresh());\r\n }\r\n\r\n changeObject.categoryId = this.category.categoryId;\r\n this.submitModal.emit($event);\r\n }\r\n\r\n /**\r\n * 级联属性变更\r\n * @param $event\r\n * @param parentPropertyID\r\n */\r\n _cascadeitemChanged($event, parentPropertyID) {\r\n if (!parentPropertyID) {\r\n return;\r\n }\r\n const { changeObject } = $event;\r\n if (!this.data[parentPropertyID]) {\r\n this.data[parentPropertyID] = {};\r\n }\r\n\r\n this.data[parentPropertyID][changeObject.propertyID] = changeObject.propertyValue;\r\n\r\n changeObject.categoryId = this.category.categoryId;\r\n changeObject.parentPropertyID = parentPropertyID;\r\n\r\n if (this.category.setPropertyRelates && typeof (this.category.setPropertyRelates) === 'function') {\r\n this.category.setPropertyRelates(changeObject, this.data);\r\n this.items.forEach(item => item.refresh());\r\n }\r\n this.valueChanged.emit(changeObject);\r\n }\r\n\r\n /**\r\n * 级联模态框属性变更\r\n * @param $event\r\n * @param parentPropertyID\r\n */\r\n __cascadeitemSubmitModal($event, parentPropertyID) {\r\n if (!parentPropertyID) {\r\n return;\r\n }\r\n const { changeObject, parameters } = $event;\r\n if (!this.data[parentPropertyID]) {\r\n this.data[parentPropertyID] = {};\r\n }\r\n\r\n this.data[parentPropertyID][changeObject.propertyID] = changeObject.propertyValue;\r\n\r\n changeObject.categoryId = this.category.categoryId;\r\n changeObject.parentPropertyID = parentPropertyID;\r\n\r\n if (this.category.setPropertyRelates && typeof (this.category.setPropertyRelates) === 'function') {\r\n this.category.setPropertyRelates(changeObject, this.data, parameters);\r\n this.items.forEach(item => item.refresh());\r\n }\r\n this.submitModal.emit($event);\r\n }\r\n /**\r\n * 级联属性的汇总信息\r\n * @param propItem\r\n * @param valueObject\r\n */\r\n _valueStringify(propItem, valueObject) {\r\n if (!propItem || !propItem.cascadeConfig || !valueObject) {\r\n return '';\r\n }\r\n if (!propItem.cascadeConverter || !propItem.cascadeConverter.convertTo) {\r\n return JSON.stringify(valueObject);\r\n }\r\n\r\n return propItem.cascadeConverter.convertTo(valueObject, propItem.cascadeConfig);\r\n\r\n\r\n }\r\n\r\n _checkCascadeVisible(propItem) {\r\n if (Object.keys(propItem).indexOf('visible') < 0) {\r\n return true;\r\n } else {\r\n return propItem.visible;\r\n }\r\n }\r\n}\r\n","import {\r\n Component, OnInit, Input, ViewChild, ElementRef, Output,\r\n EventEmitter, OnChanges, SimpleChanges, ViewChildren\r\n} from '@angular/core';\r\nimport { ElementPropertyConfig } from '../../entity/property-entity';\r\nimport { PropertyItemListComponent } from '../property-item-list/property-item-list.component';\r\n\r\n@Component({\r\n selector: 'app-property-panel',\r\n templateUrl: './property-panel.component.html',\r\n styleUrls: ['./property-panel.component.css']\r\n})\r\nexport class PropertyPanelComponent implements OnInit, OnChanges {\r\n @Input() width: number;\r\n @Input() height: number;\r\n\r\n @Input() isPersitOpenState = false; // 是否持有面板的隐藏显示状态\r\n @Input() isShowPanel = false; // isPersitOpenState=true时,控制面板是否隐藏显示\r\n @Output() closePropertyPanel = new EventEmitter<any>(); // isPersitOpenState=true时,抛出面板的关闭事件\r\n\r\n @Input() propertyConfig: ElementPropertyConfig[]; // 属性类型\r\n @Input() propertyData = {}; // 属性值\r\n\r\n @Output() propertyChanged = new EventEmitter<any>(); // 属性变更事件\r\n @Output() submitModal = new EventEmitter<any>(); // 模态框属性变更事件\r\n @Input() showCloseBtn = true;\r\n\r\n\r\n @ViewChild('east') private eastDiv: ElementRef;\r\n @ViewChildren(PropertyItemListComponent) itemLists: Array<PropertyItemListComponent>;\r\n isOpen = true;\r\n constructor() { }\r\n\r\n ngOnInit() {\r\n\r\n if (this.width) {\r\n this.eastDiv.nativeElement.style.width = this.width + 'px';\r\n } else {\r\n this.eastDiv.nativeElement.style.width = 'inherit';\r\n }\r\n if (this.height) {\r\n this.eastDiv.nativeElement.style.height = this.height + 'px';\r\n } else {\r\n this.eastDiv.nativeElement.style.height = '100%';\r\n }\r\n\r\n\r\n if (this.isPersitOpenState) {\r\n this.isOpen = this.isShowPanel;\r\n }\r\n }\r\n\r\n /**\r\n * 更改面板的隐藏显示状态,只有在isPersitOpenState=true时生效\r\n * @param simpleChanges\r\n */\r\n ngOnChanges(simpleChanges: SimpleChanges) {\r\n if (simpleChanges.isShowPanel && this.isPersitOpenState) {\r\n this.isOpen = this.isShowPanel;\r\n }\r\n }\r\n refreshPanel() {\r\n this.itemLists.forEach(item => item.refresh());\r\n }\r\n changeStatus(item: any) {\r\n if (this.propertyConfig.length < 2) {\r\n return;\r\n }\r\n if (!item.status || item.status === 'open') {\r\n item.status = 'closed';\r\n } else {\r\n item.status = 'open';\r\n }\r\n }\r\n\r\n // 隐藏面板\r\n collapse() {\r\n // isPersitOpenState=true时,由外部确定状态\r\n if (this.isPersitOpenState) {\r\n this.closePropertyPanel.emit();\r\n } else {\r\n this.isOpen = false;\r\n }\r\n }\r\n\r\n /**\r\n * 抛出属性变更事件\r\n * @param changeObject\r\n */\r\n _valueChanged(changeObject) {\r\n this.propertyChanged.emit(changeObject);\r\n }\r\n _submitModal($event) {\r\n this.submitModal.emit($event);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { PopoverModule } from '../popover/popover.module';\r\nimport { PropertyPanelComponent } from './components/property-panel/property-panel.component';\r\nimport { PropertyItemListComponent } from './components/property-item-list/property-item-list.component';\r\nimport { PropertyItemComponent } from './components/property-item/property-item.component';\r\nimport { InputsModule } from '@progress/kendo-angular-inputs';\r\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\r\nimport { FarrisDialogModule } from '@farris/ui-dialog';\r\nimport { FarrisPanelModule } from '@farris/ui-panel';\r\nimport { PerfectScrollbarModule } from '@farris/ui-perfect-scrollbar';\r\nimport { DateInputsModule } from '@progress/kendo-angular-dateinputs';\r\nimport { NotifyModule } from '@farris/ui-notify';\r\n@NgModule({\r\n declarations: [\r\n PropertyPanelComponent,\r\n PropertyItemListComponent,\r\n PropertyItemComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n PopoverModule/* .forRoot() */,\r\n PerfectScrollbarModule,\r\n InputsModule,\r\n DropDownsModule,\r\n FarrisDialogModule,\r\n DateInputsModule,\r\n FarrisPanelModule,\r\n NotifyModule.forRoot(),\r\n ],\r\n exports: [PropertyPanelComponent],\r\n entryComponents: [PropertyPanelComponent, PropertyItemComponent]\r\n})\r\nexport class PropertyPanelModule {\r\n constructor() { }\r\n}\r\n","import {Injectable} from '@angular/core';\r\n\r\n/**\r\n * Configuration service for the NgbTabset component.\r\n * You can inject this service, typically in your root component, and customize the values of its properties in\r\n * order to provide default values for all the tabsets used in the application.\r\n */\r\n@Injectable()\r\nexport class NgbTabsetConfig {\r\n justify: 'start' | 'center' | 'end' | 'fill' | 'justified' = 'start';\r\n orientation: 'horizontal' | 'vertical' = 'horizontal';\r\n type: 'tabs' | 'pills' = 'tabs';\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n ContentChildren,\r\n QueryList,\r\n Directive,\r\n TemplateRef,\r\n ContentChild,\r\n AfterContentChecked,\r\n Output,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { NgbTabsetConfig } from './tabset-config';\r\n\r\nlet nextId = 0;\r\n\r\n/**\r\n * This directive should be used to wrap tab titles that need to contain HTML markup or other directives.\r\n */\r\n@Directive({ selector: 'ng-template[ngbTabTitle]' })\r\n// tslint:disable-next-line:directive-class-suffix\r\nexport class NgbTabTitle {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n\r\n/**\r\n * This directive must be used to wrap content to be displayed in a tab.\r\n */\r\n@Directive({ selector: 'ng-template[ngbTabContent]' })\r\n// tslint:disable-next-line:directive-class-suffix\r\nexport class NgbTabContent {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n\r\n/**\r\n * A directive representing an individual tab.\r\n */\r\n@Directive({ selector: 'ngb-tab' })\r\n// tslint:disable-next-line:directive-class-suffix\r\nexport class NgbTab {\r\n /**\r\n * Unique tab identifier. Must be unique for the entire document for proper accessibility support.\r\n */\r\n @Input() id = `ngb-tab-${nextId++}`;\r\n /**\r\n * Simple (string only) title. Use the \"NgbTabTitle\" directive for more complex use-cases.\r\n */\r\n @Input() title: string;\r\n /**\r\n * Allows toggling disabled state of a given state. Disabled tabs can't be selected.\r\n */\r\n @Input() disabled = false;\r\n\r\n @ContentChild(NgbTabContent) contentTpl: NgbTabContent;\r\n @ContentChild(NgbTabTitle) titleTpl: NgbTabTitle;\r\n}\r\n\r\n/**\r\n * The payload of the change event fired right before the tab change\r\n */\r\nexport interface NgbTabChangeEvent {\r\n /**\r\n * Id of the currently active tab\r\n */\r\n activeId: string;\r\n\r\n /**\r\n * Id of the newly selected tab\r\n */\r\n nextId: string;\r\n\r\n /**\r\n * Function that will prevent tab switch if called\r\n */\r\n preventDefault: () => void;\r\n}\r\n\r\n/**\r\n * A component that makes it easy to create tabbed interface.\r\n */\r\n@Component({\r\n selector: 'ngb-tabset',\r\n exportAs: 'ngbTabset',\r\n template: `\r\n <ul [class]=\"'web-ide-content-tab-header nav nav-' + type + (orientation == 'horizontal'? ' '\r\n + justifyClass : ' flex-column')\" role=\"tablist\">\r\n <li class=\"nav-item\" *ngFor=\"let tab of tabs\">\r\n <a [id]=\"tab.id\" class=\"nav-link\" [class.active]=\"tab.id === activeId\" [class.disabled]=\"tab.disabled\"\r\n href (click)=\"select(tab.id)\" role=\"tab\" [attr.tabindex]=\"(tab.disabled ? '-1': undefined)\"\r\n [attr.aria-controls]=\"((!destroyOnHide || tab.id === activeId) ? tab.id + '-panel' : null)\"\r\n [attr.aria-expanded]=\"tab.id === activeId\" [attr.aria-disabled]=\"tab.disabled\">\r\n {{tab.title}}<ng-template [ngTemplateOutlet]=\"tab.titleTpl?.templateRef\"></ng-template>\r\n </a>\r\n </li>\r\n </ul>\r\n <div class=\"web-ide-content tab-content d-flex\">\r\n <ng-template ngFor let-tab [ngForOf]=\"tabs\">\r\n <div\r\n class=\"tab-pane {{tab.id === activeId ? 'active' : null}}\"\r\n *ngIf=\"!destroyOnHide || tab.id === activeId\"\r\n role=\"tabpanel\"\r\n [attr.aria-labelledby]=\"tab.id\" id=\"{{tab.id}}-panel\"\r\n [attr.aria-expanded]=\"tab.id === activeId\">\r\n <ng-template [ngTemplateOutlet]=\"tab.contentTpl.templateRef\"></ng-template>\r\n </div>\r\n </ng-template>\r\n </div>\r\n `,\r\n styleUrls: ['./tabset.css']\r\n})\r\n// tslint:disable-next-line:component-class-suffix\r\nexport class NgbTabset implements AfterContentChecked {\r\n justifyClass: string;\r\n\r\n @ContentChildren(NgbTab) tabs: QueryList<NgbTab>;\r\n\r\n /**\r\n * An identifier of an initially selected (active) tab. Use the \"select\" method to switch a tab programmatically.\r\n */\r\n @Input() activeId: string;\r\n\r\n /**\r\n * Whether the closed tabs should be hidden without destroying them\r\n */\r\n @Input() destroyOnHide = true;\r\n\r\n /**\r\n * The horizontal alignment of the nav with flexbox utilities. Can be one of 'start', 'center', 'end', 'fill' or\r\n * 'justified'\r\n * The default value is 'start'.\r\n */\r\n @Input()\r\n set justify(className: 'start' | 'center' | 'end' | 'fill' | 'justified') {\r\n if (className === 'fill' || className === 'justified') {\r\n this.justifyClass = `nav-${className}`;\r\n } else {\r\n this.justifyClass = `justify-content-${className}`;\r\n }\r\n }\r\n\r\n /**\r\n * The orientation of the nav (horizontal or vertical).\r\n * The default value is 'horizontal'.\r\n */\r\n @Input() orientation: 'horizontal' | 'vertical';\r\n\r\n /**\r\n * Type of navigation to be used for tabs. Can be one of 'tabs' or 'pills'.\r\n */\r\n @Input() type: 'tabs' | 'pills';\r\n\r\n /**\r\n * A tab change event fired right before the tab selection happens. See NgbTabChangeEvent for payload details\r\n */\r\n @Output() tabChange = new EventEmitter<NgbTabChangeEvent>();\r\n\r\n constructor(config: NgbTabsetConfig) {\r\n this.type = config.type;\r\n this.justify = config.justify;\r\n this.orientation = config.orientation;\r\n }\r\n\r\n /**\r\n * Selects the tab with the given id and shows its associated pane.\r\n * Any other tab that was previously selected becomes unselected and its associated pane is hidden.\r\n */\r\n select(tabId: string) {\r\n const selectedTab = this._getTabById(tabId);\r\n if (selectedTab && !selectedTab.disabled && this.activeId !== selectedTab.id) {\r\n let defaultPrevented = false;\r\n\r\n this.tabChange.emit(\r\n { activeId: this.activeId, nextId: selectedTab.id, preventDefault: () => { defaultPrevented = true; } });\r\n\r\n if (!defaultPrevented) {\r\n this.activeId = selectedTab.id;\r\n }\r\n }\r\n }\r\n\r\n ngAfterContentChecked() {\r\n // auto-correct activeId that might have been set incorrectly as input\r\n const activeTab = this._getTabById(this.activeId);\r\n this.activeId = activeTab ? activeTab.id : (this.tabs.length ? this.tabs.first.id : null);\r\n }\r\n\r\n private _getTabById(id: string): NgbTab {\r\n const tabsWithId: NgbTab[] = this.tabs.filter(tab => tab.id === id);\r\n return tabsWithId.length ? tabsWithId[0] : null;\r\n }\r\n}\r\n","import {NgModule, ModuleWithProviders} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\n\r\nimport {NgbTabset, NgbTab, NgbTabContent, NgbTabTitle, NgbTabChangeEvent} from './tabset';\r\nimport {NgbTabsetConfig} from './tabset-config';\r\n\r\nexport {NgbTabset, NgbTab, NgbTabContent, NgbTabTitle, NgbTabChangeEvent} from './tabset';\r\nexport {NgbTabsetConfig} from './tabset-config';\r\n\r\nconst NGB_TABSET_DIRECTIVES = [NgbTabset, NgbTab, NgbTabContent, NgbTabTitle];\r\n\r\n@NgModule({declarations: NGB_TABSET_DIRECTIVES, exports: NGB_TABSET_DIRECTIVES, imports: [CommonModule]})\r\nexport class NgbTabsetModule {\r\n static forRoot(): ModuleWithProviders { return {ngModule: NgbTabsetModule, providers: [NgbTabsetConfig]}; }\r\n}\r\n","import {Injectable} from '@angular/core';\r\n\r\n/**\r\n * Configuration service for the NgbNavTabset component.\r\n * You can inject this service, typically in your root component, and customize the values of its properties in\r\n * order to provide default values for all the tabsets used in the application.\r\n */\r\n@Injectable()\r\nexport class NgbNavTabsetConfig {\r\n justify: 'start' | 'center' | 'end' | 'fill' | 'justified' = 'start';\r\n orientation: 'horizontal' | 'vertical' = 'horizontal';\r\n type: 'tabs' | 'pills' = 'tabs';\r\n}\r\n","import {\r\n Component,\r\n Input,\r\n ContentChildren,\r\n QueryList,\r\n Directive,\r\n TemplateRef,\r\n ContentChild,\r\n AfterContentChecked,\r\n Output,\r\n EventEmitter\r\n} from '@angular/core';\r\nimport { NgbNavTabsetConfig } from './navtab-config';\r\n\r\nlet nextId = 0;\r\n\r\n/**\r\n * This directive should be used to wrap tab titles that need to contain HTML markup or other directives.\r\n */\r\n@Directive({ selector: 'ng-template[ngbNavTabTitle]' })\r\n// tslint:disable-next-line:directive-class-suffix\r\nexport class NgbNavTabTitle {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n\r\n/**\r\n * This directive must be used to wrap content to be displayed in a tab.\r\n */\r\n@Directive({ selector: 'ng-template[ngbNavTabContent]' })\r\n// tslint:disable-next-line:directive-class-suffix\r\nexport class NgbNavTabContent {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n\r\n/**\r\n * A directive representing an individual tab.\r\n */\r\n@Directive({ selector: 'ngb-navtab' })\r\n// tslint:disable-next-line:directive-class-suffix\r\nexport class NgbNavTab {\r\n /**\r\n * Unique tab identifier. Must be unique for the entire document for proper accessibility support.\r\n */\r\n @Input() id = `ngb-tab-${nextId++}`;\r\n /**\r\n * Simple (string only) title. Use the \"NgbNavTabTitle\" directive for more complex use-cases.\r\n */\r\n @Input() title: string;\r\n /**\r\n * Allows toggling disabled state of a given state. Disabled tabs can't be selected.\r\n */\r\n @Input() disabled = false;\r\n\r\n @ContentChild(NgbNavTabContent) contentTpl: NgbNavTabContent;\r\n @ContentChild(NgbNavTabTitle) titleTpl: NgbNavTabTitle;\r\n}\r\n\r\n/**\r\n * The payload of the change event fired right before the tab change\r\n */\r\nexport interface NgbNavTabChangeEvent {\r\n /**\r\n * Id of the currently active tab\r\n */\r\n activeId: string;\r\n\r\n /**\r\n * Id of the newly selected tab\r\n */\r\n nextId: string;\r\n\r\n /**\r\n * Function that will prevent tab switch if called\r\n */\r\n preventDefault: () => void;\r\n}\r\n\r\n/**\r\n * A component that makes it easy to create tabbed interface.\r\n */\r\n@Component({\r\n selector: 'ngb-navtabset',\r\n exportAs: 'NgbNavTabset',\r\n template: `\r\n <ul [class]=\"'web-ide-activity-bar nav nav-' + type + (orientation == 'horizontal'? ' '\r\n + justifyClass : ' flex-column')\" role=\"tablist\">\r\n <li class=\"nav-item\" *ngFor=\"let tab of tabs\">\r\n <a [id]=\"tab.id\" class=\"nav-link\" [class.active]=\"tab.id === activeId\" [class.disabled]=\"tab.disabled\"\r\n href (click)=\"select(tab.id)\" role=\"tab\" [attr.tabindex]=\"(tab.disabled ? '-1': undefined)\"\r\n [attr.aria-controls]=\"(!destroyOnHide || tab.id === activeId ? tab.id + '-panel' : null)\"\r\n [attr.aria-expanded]=\"tab.id === activeId\" [attr.aria-disabled]=\"tab.disabled\">\r\n {{tab.title}}<ng-template [ngTemplateOutlet]=\"tab.titleTpl?.templateRef\"></ng-template>\r\n </a>\r\n </li>\r\n </ul>\r\n <div class=\"web-ide-side-bar tab-content\">\r\n <ng-template ngFor let-tab [ngForOf]=\"tabs\">\r\n <div\r\n class=\"tab-pane {{tab.id === activeId ? 'active' : null}}\"\r\n *ngIf=\"!destroyOnHide || tab.id === activeId\"\r\n role=\"tabpanel\"\r\n [attr.aria-labelledby]=\"tab.id\" id=\"{{tab.id}}-panel\"\r\n [attr.aria-expanded]=\"tab.id === activeId\">\r\n <ng-template [ngTemplateOutlet]=\"tab.contentTpl.templateRef\"></ng-template>\r\n </div>\r\n </ng-template>\r\n </div>\r\n `,\r\n styleUrls: ['./navtab.css']\r\n})\r\n// tslint:disable-next-line:component-class-suffix\r\nexport class NgbNavTabset implements AfterContentChecked {\r\n justifyClass: string;\r\n\r\n @ContentChildren(NgbNavTab) tabs: QueryList<NgbNavTab>;\r\n\r\n /**\r\n * An identifier of an initially selected (active) tab. Use the \"select\" method to switch a tab programmatically.\r\n */\r\n @Input() activeId: string;\r\n\r\n /**\r\n * Whether the closed tabs should be hidden without destroying them\r\n */\r\n @Input() destroyOnHide = true;\r\n\r\n /**\r\n * The horizontal alignment of the nav with flexbox utilities. Can be one of 'start', 'center', 'end', 'fill' or\r\n * 'justified'\r\n * The default value is 'start'.\r\n */\r\n @Input()\r\n set justify(className: 'start' | 'center' | 'end' | 'fill' | 'justified') {\r\n if (className === 'fill' || className === 'justified') {\r\n this.justifyClass = `nav-${className}`;\r\n } else {\r\n this.justifyClass = `justify-content-${className}`;\r\n }\r\n }\r\n\r\n /**\r\n * The orientation of the nav (horizontal or vertical).\r\n * The default value is 'horizontal'.\r\n */\r\n @Input() orientation: 'horizontal' | 'vertical';\r\n\r\n /**\r\n * Type of navigation to be used for tabs. Can be one of 'tabs' or 'pills'.\r\n */\r\n @Input() type: 'tabs' | 'pills';\r\n\r\n /**\r\n * A tab change event fired right before the tab selection happens. See NgbNavTabChangeEvent for payload details\r\n */\r\n @Output() tabChange = new EventEmitter<NgbNavTabChangeEvent>();\r\n\r\n constructor(config: NgbNavTabsetConfig) {\r\n this.type = config.type;\r\n this.justify = config.justify;\r\n this.orientation = config.orientation;\r\n }\r\n\r\n /**\r\n * Selects the tab with the given id and shows its associated pane.\r\n * Any other tab that was previously selected becomes unselected and its associated pane is hidden.\r\n */\r\n select(tabId: string) {\r\n const selectedTab = this._getTabById(tabId);\r\n if (selectedTab && !selectedTab.disabled && this.activeId !== selectedTab.id) {\r\n let defaultPrevented = false;\r\n\r\n this.tabChange.emit(\r\n { activeId: this.activeId, nextId: selectedTab.id, preventDefault: () => { defaultPrevented = true; } });\r\n\r\n if (!defaultPrevented) {\r\n this.activeId = selectedTab.id;\r\n }\r\n }\r\n }\r\n\r\n ngAfterContentChecked() {\r\n // auto-correct activeId that might have been set incorrectly as input\r\n const activeTab = this._getTabById(this.activeId);\r\n this.activeId = activeTab ? activeTab.id : (this.tabs.length ? this.tabs.first.id : null);\r\n }\r\n\r\n private _getTabById(id: string): NgbNavTab {\r\n const tabsWithId: NgbNavTab[] = this.tabs.filter(tab => tab.id === id);\r\n return tabsWithId.length ? tabsWithId[0] : null;\r\n }\r\n}\r\n","import {NgModule, ModuleWithProviders} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\n\r\nimport {NgbNavTabset, NgbNavTab, NgbNavTabContent, NgbNavTabTitle, NgbNavTabChangeEvent} from './navtab';\r\nimport {NgbNavTabsetConfig} from './navtab-config';\r\n\r\nexport {NgbNavTabset, NgbNavTab, NgbNavTabContent, NgbNavTabTitle, NgbNavTabChangeEvent} from './navtab';\r\nexport {NgbNavTabsetConfig} from './navtab-config';\r\n\r\nconst NGB_TABSET_DIRECTIVES = [NgbNavTabset, NgbNavTab, NgbNavTabContent, NgbNavTabTitle];\r\n\r\n@NgModule({declarations: NGB_TABSET_DIRECTIVES, exports: NGB_TABSET_DIRECTIVES, imports: [CommonModule]})\r\nexport class NgbNavTabsetModule {\r\n static forRoot(): ModuleWithProviders { return {ngModule: NgbNavTabsetModule, providers: [NgbNavTabsetConfig]}; }\r\n}\r\n","export function toInteger(value: any): number {\r\n return parseInt(`${value}`, 10);\r\n}\r\n\r\nexport function toString(value: any): string {\r\n return (value !== undefined && value !== null) ? `${value}` : '';\r\n}\r\n\r\nexport function getValueInRange(value: number, max: number, min = 0): number {\r\n return Math.max(Math.min(value, max), min);\r\n}\r\n\r\nexport function isString(value: any): value is string {\r\n return typeof value === 'string';\r\n}\r\n\r\nexport function isNumber(value: any): value is number {\r\n return !isNaN(toInteger(value));\r\n}\r\n\r\nexport function isInteger(value: any): value is number {\r\n return typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\r\n}\r\n\r\nexport function isDefined(value: any): boolean {\r\n return value !== undefined && value !== null;\r\n}\r\n\r\nexport function padNumber(value: number) {\r\n if (isNumber(value)) {\r\n return `0${value}`.slice(-2);\r\n } else {\r\n return '';\r\n }\r\n}\r\n\r\nexport function regExpEscape(text) {\r\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\r\n}\r\n","import {Injectable} from '@angular/core';\r\n\r\n/**\r\n * Configuration service for the NgbAccordion component.\r\n * You can inject this service, typically in your root component, and customize the values of its properties in\r\n * order to provide default values for all the accordions used in the application.\r\n */\r\n@Injectable()\r\nexport class NgbAccordionConfig {\r\n closeOthers = false;\r\n type: string;\r\n}\r\n","import {\r\n AfterContentChecked,\r\n Component,\r\n ContentChild,\r\n ContentChildren,\r\n Directive,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n QueryList,\r\n TemplateRef,\r\n HostBinding\r\n} from '@angular/core';\r\n\r\nimport { isString } from '../utils/util';\r\n\r\nimport { NgbAccordionConfig } from './accordion-config';\r\n\r\nlet nextId = 0;\r\n\r\n/**\r\n * This directive should be used to wrap accordion panel titles that need to contain HTML markup or other directives.\r\n */\r\n@Directive({ selector: 'ng-template[ngbPanelTitle]' })\r\nexport class NgbPanelTitle {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n\r\n/**\r\n * This directive must be used to wrap accordion panel content.\r\n */\r\n@Directive({ selector: 'ng-template[ngbPanelContent]' })\r\nexport class NgbPanelContent {\r\n constructor(public templateRef: TemplateRef<any>) { }\r\n}\r\n\r\n/**\r\n * The NgbPanel directive represents an individual panel with the title and collapsible\r\n * content\r\n */\r\n@Directive({ selector: 'ngb-panel' })\r\nexport class NgbPanel {\r\n /**\r\n * A flag determining whether the panel is disabled or not.\r\n * When disabled, the panel cannot be toggled.\r\n */\r\n @Input() disabled = false;\r\n\r\n /**\r\n * An optional id for the panel. The id should be unique.\r\n * If not provided, it will be auto-generated.\r\n */\r\n @Input() id = `ngb-panel-${nextId++}`;\r\n\r\n /**\r\n * A flag telling if the panel is currently open\r\n */\r\n isOpen = false;\r\n\r\n /**\r\n * The title for the panel.\r\n */\r\n @Input() title: string;\r\n\r\n /**\r\n * Accordion's types of panels to be applied per panel basis.\r\n * Bootstrap 4 recognizes the following types: \"success\", \"info\", \"warning\" and \"danger\".\r\n */\r\n @Input() type: string;\r\n\r\n @ContentChild(NgbPanelContent) contentTpl: NgbPanelContent;\r\n @ContentChild(NgbPanelTitle) titleTpl: NgbPanelTitle;\r\n}\r\n\r\n/**\r\n * The payload of the change event fired right before toggling an accordion panel\r\n */\r\nexport interface NgbPanelChangeEvent {\r\n /**\r\n * Id of the accordion panel that is toggled\r\n */\r\n panelId: string;\r\n\r\n /**\r\n * Whether the panel will be opened (true) or closed (false)\r\n */\r\n nextState: boolean;\r\n\r\n /**\r\n * Function that will prevent panel toggling if called\r\n */\r\n preventDefault: () => void;\r\n}\r\n\r\n/**\r\n * The NgbAccordion directive is a collection of panels.\r\n * It can assure that only one panel can be opened at a time.\r\n */\r\n@Component({\r\n selector: 'ngb-accordion',\r\n exportAs: 'ngbAccordion',\r\n // host: { 'role': 'tablist', '[attr.aria-multiselectable]': '!closeOtherPanels' },\r\n template: `\r\n <ng-template ngFor let-panel [ngForOf]=\"panels\">\r\n <div class=\"card\">\r\n <div role=\"tab\" id=\"{{panel.id}}-header\"\r\n [class]=\"'card-header ' + (panel.type ? 'card-'+panel.type: type ? 'card-'+type : '')\" [class.active]=\"panel.isOpen\">\r\n <a href (click)=\"toggle(panel.id)\" [class.text-muted]=\"panel.disabled\" [attr.tabindex]=\"(panel.disabled ? '-1' : null)\"\r\n [attr.aria-expanded]=\"panel.isOpen\" [attr.aria-controls]=\"(panel.isOpen ? panel.id : null)\"\r\n [attr.aria-disabled]=\"panel.disabled\">\r\n {{panel.title}}<ng-template [ngTemplateOutlet]=\"panel.titleTpl?.templateRef\"></ng-template>\r\n </a>\r\n </div>\r\n <div id=\"{{panel.id}}\" role=\"tabpanel\" [attr.aria-labelledby]=\"panel.id + '-header'\"\r\n class=\"card-body collapse {{panel.isOpen ? 'show' : null}}\" *ngIf=\"!destroyOnHide || panel.isOpen\">\r\n <ng-template [ngTemplateOutlet]=\"panel.contentTpl.templateRef\"></ng-template>\r\n </div>\r\n </div>\r\n </ng-template>\r\n `\r\n})\r\nexport class NgbAccordion implements AfterContentChecked {\r\n\r\n // @HostBinding('role') get tablist() { return 'tablist'; }\r\n\r\n // @HostBinding('attr.aria-multiselectable') get multiselectable() { return !this.closeOtherPanels; }\r\n\r\n @ContentChildren(NgbPanel) panels: QueryList<NgbPanel>;\r\n\r\n /**\r\n * An array or comma separated strings of panel identifiers that should be opened\r\n */\r\n @Input() activeIds: string | string[] = [];\r\n\r\n /**\r\n * Whether the other panels should be closed when a panel is opened\r\n */\r\n // tslint:disable-next-line:no-input-rename\r\n @Input('closeOthers') closeOtherPanels: boolean;\r\n\r\n /**\r\n * Whether the closed panels should be hidden without destroying them\r\n */\r\n @Input() destroyOnHide = true;\r\n\r\n /**\r\n * Accordion's types of panels to be applied globally.\r\n * Bootstrap 4 recognizes the following types: \"success\", \"info\", \"warning\" and \"danger\".\r\n */\r\n @Input() type: string;\r\n\r\n /**\r\n * A panel change event fired right before the panel toggle happens. See NgbPanelChangeEvent for payload details\r\n */\r\n @Output() panelChange = new EventEmitter<NgbPanelChangeEvent>();\r\n\r\n constructor(config: NgbAccordionConfig) {\r\n this.type = config.type;\r\n this.closeOtherPanels = config.closeOthers;\r\n }\r\n\r\n /**\r\n * Programmatically toggle a panel with a given id.\r\n */\r\n toggle(panelId: string) {\r\n const panel = this.panels.find(p => p.id === panelId);\r\n\r\n if (panel && !panel.disabled) {\r\n let defaultPrevented = false;\r\n\r\n this.panelChange.emit(\r\n { panelId: panelId, nextState: !panel.isOpen, preventDefault: () => { defaultPrevented = true; } });\r\n\r\n if (!defaultPrevented) {\r\n panel.isOpen = !panel.isOpen;\r\n\r\n if (this.closeOtherPanels) {\r\n this._closeOthers(panelId);\r\n }\r\n this._updateActiveIds();\r\n }\r\n }\r\n }\r\n\r\n ngAfterContentChecked() {\r\n // active id updates\r\n if (isString(this.activeIds)) {\r\n this.activeIds = (<string>this.activeIds).split(/\\s*,\\s*/);\r\n }\r\n\r\n // update panels open states\r\n this.panels.forEach(panel => panel.isOpen = !panel.disabled && this.activeIds.indexOf(panel.id) > -1);\r\n\r\n // closeOthers updates\r\n if (this.activeIds.length > 1 && this.closeOtherPanels) {\r\n this._closeOthers(this.activeIds[0]);\r\n this._updateActiveIds();\r\n }\r\n }\r\n\r\n private _closeOthers(panelId: string) {\r\n this.panels.forEach(panel => {\r\n if (panel.id !== panelId) {\r\n panel.isOpen = false;\r\n }\r\n });\r\n }\r\n\r\n private _updateActiveIds() {\r\n this.activeIds = this.panels.filter(panel => panel.isOpen && !panel.disabled).map(panel => panel.id);\r\n }\r\n}\r\n","import {NgModule, ModuleWithProviders} from '@angular/core';\r\nimport {CommonModule} from '@angular/common';\r\n\r\nimport {NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelChangeEvent} from './accordion';\r\nimport {NgbAccordionConfig} from './accordion-config';\r\n\r\nexport {NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent, NgbPanelChangeEvent} from './accordion';\r\nexport {NgbAccordionConfig} from './accordion-config';\r\n\r\nconst NGB_ACCORDION_DIRECTIVES = [NgbAccordion, NgbPanel, NgbPanelTitle, NgbPanelContent];\r\n\r\n@NgModule({declarations: NGB_ACCORDION_DIRECTIVES, exports: NGB_ACCORDION_DIRECTIVES, imports: [CommonModule]})\r\nexport class NgbAccordionModule {\r\n static forRoot(): ModuleWithProviders { return {ngModule: NgbAccordionModule, providers: [NgbAccordionConfig]}; }\r\n}\r\n","import {\r\n Directive, ElementRef, EmbeddedViewRef, EventEmitter, HostBinding, Input, OnDestroy, OnInit, Output, Renderer,\r\n ViewContainerRef,\r\n HostListener,\r\n Renderer2\r\n} from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[sash]',\r\n exportAs: 'sash'\r\n})\r\nexport class SashDirective implements OnInit, OnDestroy {\r\n\r\n documentClickListener: any;\r\n\r\n documentMoveListener: any;\r\n\r\n constructor(private _elementRef: ElementRef,\r\n private renderer: Renderer2,\r\n private _viewContainerRef: ViewContainerRef) {\r\n\r\n }\r\n\r\n @Input() panelWidth: number;\r\n\r\n @Output() widthChanged = new EventEmitter<number>();\r\n\r\n @HostListener('mousedown') onMouseDown() {\r\n console.log('mousedown');\r\n this.bindDocumentClickListener();\r\n }\r\n\r\n @HostListener('mouseup') onMouseUp() {\r\n console.log('mouseup');\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n ngOnDestroy(): void {\r\n }\r\n\r\n\r\n\r\n bindDocumentClickListener() {\r\n if (!this.documentClickListener) {\r\n this.documentClickListener = this.renderer.listen('document', 'mouseup', (event) => {\r\n console.log('mouseup');\r\n console.log(event);\r\n this.unbindDocumentMoveListener();\r\n this.unbindDocumentClickListener();\r\n });\r\n\r\n if (!this.documentMoveListener) {\r\n this.bindDocumentClickListener = this.renderer.listen('document', 'mousemove', (event) => {\r\n this.panelWidth = event.clientX;\r\n const newWidth = event.clientX as number;\r\n this.widthChanged.emit(newWidth);\r\n });\r\n }\r\n }\r\n }\r\n\r\n unbindDocumentClickListener() {\r\n if (this.documentClickListener) {\r\n this.documentClickListener();\r\n this.documentClickListener = null;\r\n }\r\n }\r\n\r\n unbindDocumentMoveListener() {\r\n if (this.bindDocumentClickListener) {\r\n this.bindDocumentClickListener();\r\n this.bindDocumentClickListener = null;\r\n }\r\n }\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { SashDirective } from './sash.directive';\r\n\r\n@NgModule({\r\n declarations: [\r\n SashDirective\r\n ],\r\n exports: [\r\n SashDirective\r\n ]\r\n})\r\nexport class PanelModule {\r\n public static forRoot(config?: any): ModuleWithProviders {\r\n return {\r\n ngModule: PanelModule\r\n };\r\n }\r\n}\r\n","import { HttpClientModule } from '@angular/common/http';\r\nimport { ModuleWithProviders, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { BsDropdownModule } from './dropdown';\r\nimport { NgbTabsetModule, NgbTabChangeEvent } from './tabset/tabset.module';\r\nimport { NgbNavTabsetModule, NgbNavTabChangeEvent } from './navtab/navtab.module';\r\nimport { NgbAccordionModule } from './accordion/accordion.module';\r\nimport { PanelModule } from './panel/panel.module';\r\n\r\nconst MODULES = [\r\n BsDropdownModule\r\n];\r\n\r\nconst NGB_MODULES = [\r\n NgbTabsetModule,\r\n NgbNavTabsetModule,\r\n NgbAccordionModule\r\n];\r\n\r\nconst IDE_MODULES = [\r\n PanelModule\r\n];\r\n\r\n// @NgModule({\r\n// imports: [\r\n// BsDropdownModule.forRoot()\r\n// ],\r\n// exports: [BsDropdownModule],\r\n// schemas: [NO_ERRORS_SCHEMA]\r\n// })\r\n// export class MDBRootModule {\r\n// }\r\n\r\n// @NgModule({ exports: [BsDropdownModule] })\r\n// export class MDBBootstrapModule {\r\n// public static forRoot(): ModuleWithProviders {\r\n// return { ngModule: MDBRootModule };\r\n// }\r\n// }\r\n\r\n@NgModule({\r\n imports: [\r\n NgbTabsetModule.forRoot(),\r\n NgbNavTabsetModule.forRoot(),\r\n NgbAccordionModule.forRoot()\r\n ],\r\n exports: [\r\n NGB_MODULES\r\n ]\r\n})\r\nexport class NgbRootModule {\r\n}\r\n\r\n@NgModule({})\r\nexport class NgbModule {\r\n static forRoot(): ModuleWithProviders { return { ngModule: NgbRootModule }; }\r\n}\r\n\r\n@NgModule({\r\n imports: [\r\n PanelModule.forRoot()\r\n ]\r\n})\r\nexport class IDERootModule {\r\n}\r\n\r\n// @NgModule({ imports: IDE_MODULES, exports: IDE_MODULES })\r\n// export class IDEModule {\r\n// static forRoot(): ModuleWithProviders { return { ngModule: IDERootModule }; }\r\n// }","export class LinkedList <T> {\r\n\r\n public length = 0;\r\n protected head: any;\r\n protected tail: any;\r\n protected current: any;\r\n protected asArray: T[] = [];\r\n\r\n protected getNode(position: number): any {\r\n if (this.length === 0 || position < 0 || position >= this.length) {\r\n throw new Error('Position is out of the list');\r\n }\r\n\r\n let current = this.head;\r\n\r\n for (let index = 0; index < position; index++) {\r\n current = current.next;\r\n }\r\n return current;\r\n }\r\n\r\n protected createInternalArrayRepresentation(): void {\r\n const outArray: any[] = [];\r\n let current = this.head;\r\n\r\n while (current) {\r\n outArray.push(current.value);\r\n current = current.next;\r\n }\r\n this.asArray = outArray;\r\n }\r\n\r\n public get(position: number): T {\r\n if (this.length === 0 || position < 0 || position >= this.length) {\r\n return void 0;\r\n }\r\n\r\n let current = this.head;\r\n\r\n for (let index = 0; index < position; index++) {\r\n current = current.next;\r\n }\r\n return current.value;\r\n }\r\n\r\n public add(value: T, position: number = this.length): void {\r\n if (position < 0 || position > this.length) {\r\n throw new Error('Position is out of the list');\r\n }\r\n\r\n const node = {\r\n value: value as any,\r\n next: undefined as any,\r\n previous: undefined as any\r\n };\r\n\r\n if (this.length === 0) {\r\n this.head = node;\r\n this.tail = node;\r\n this.current = node;\r\n } else {\r\n if (position === 0) {\r\n // first node\r\n node.next = this.head;\r\n this.head.previous = node;\r\n this.head = node;\r\n } else if (position === this.length) {\r\n // last node\r\n this.tail.next = node;\r\n node.previous = this.tail;\r\n this.tail = node;\r\n } else {\r\n // node in middle\r\n const currentPreviousNode = this.getNode(position - 1);\r\n const currentNextNode = currentPreviousNode.next;\r\n\r\n currentPreviousNode.next = node;\r\n currentNextNode.previous = node;\r\n\r\n node.previous = currentPreviousNode;\r\n node.next = currentNextNode;\r\n }\r\n\r\n }\r\n this.length++;\r\n this.createInternalArrayRepresentation();\r\n }\r\n\r\n public remove(position: number = 0): void {\r\n if (this.length === 0 || position < 0 || position >= this.length) {\r\n throw new Error('Position is out of the list');\r\n }\r\n\r\n if (position === 0) {\r\n // first node\r\n this.head = this.head.next;\r\n\r\n if (this.head) {\r\n // there is no second node\r\n this.head.previous = undefined;\r\n } else {\r\n // there is no second node\r\n this.tail = undefined;\r\n }\r\n } else if (position === this.length - 1) {\r\n // last node\r\n this.tail = this.tail.previous;\r\n this.tail.next = undefined;\r\n } else {\r\n // middle node\r\n const removedNode = this.getNode(position);\r\n removedNode.next.previous = removedNode.previous;\r\n removedNode.previous.next = removedNode.next;\r\n }\r\n\r\n this.length--;\r\n this.createInternalArrayRepresentation();\r\n }\r\n\r\n public set(position: number, value: T): void {\r\n if (this.length === 0 || position < 0 || position >= this.length) {\r\n throw new Error('Position is out of the list');\r\n }\r\n\r\n const node = this.getNode(position);\r\n node.value = value;\r\n this.createInternalArrayRepresentation();\r\n }\r\n\r\n public toArray(): T[] {\r\n return this.asArray;\r\n }\r\n\r\n public findAll(fn: any): any[] {\r\n let current = this.head;\r\n const result: any[] = [];\r\n for (let index = 0; index < this.length; index++) {\r\n if (fn(current.value, index)) {\r\n result.push({index, value: current.value});\r\n }\r\n current = current.next;\r\n }\r\n return result;\r\n }\r\n // Array methods overriding start\r\n public push(...args: T[]): number {\r\n args.forEach((arg: any) => {\r\n this.add(arg);\r\n });\r\n return this.length;\r\n }\r\n\r\n public pop(): T {\r\n if (this.length === 0) {\r\n return undefined;\r\n }\r\n const last = this.tail;\r\n this.remove(this.length - 1);\r\n return last.value;\r\n }\r\n\r\n public unshift(...args: T[]): number {\r\n args.reverse();\r\n args.forEach((arg: any) => {\r\n this.add(arg, 0);\r\n });\r\n return this.length;\r\n }\r\n\r\n public shift(): T {\r\n if (this.length === 0) {\r\n return undefined;\r\n }\r\n const lastItem = this.head.value;\r\n this.remove();\r\n return lastItem;\r\n }\r\n\r\n public forEach(fn: any): void {\r\n let current = this.head;\r\n for (let index = 0; index < this.length; index++) {\r\n fn(current.value, index);\r\n current = current.next;\r\n }\r\n }\r\n\r\n public indexOf(value: T): number {\r\n let current = this.head;\r\n let position = 0;\r\n\r\n for (let index = 0; index < this.length; index++) {\r\n if (current.value === value) {\r\n\r\n position = index;\r\n break;\r\n }\r\n current = current.next;\r\n }\r\n return position;\r\n }\r\n\r\n public some(fn: any): boolean {\r\n let current = this.head;\r\n let result = false;\r\n while (current && !result) {\r\n if (fn(current.value)) {\r\n result = true;\r\n break;\r\n }\r\n current = current.next;\r\n }\r\n return result;\r\n }\r\n\r\n public every(fn: any): boolean {\r\n let current = this.head;\r\n let result = true;\r\n while (current && result) {\r\n if (!fn(current.value)) {\r\n result = false;\r\n }\r\n current = current.next;\r\n }\r\n return result;\r\n }\r\n\r\n public toString(): string {\r\n return '[Linked List]';\r\n }\r\n\r\n public find(fn: any): T {\r\n let current = this.head;\r\n let result: T;\r\n for (let index = 0; index < this.length; index++) {\r\n if (fn(current.value, index)) {\r\n result = current.value;\r\n break;\r\n }\r\n current = current.next;\r\n }\r\n return result;\r\n }\r\n\r\n public findIndex(fn: any): number {\r\n let current = this.head;\r\n let result: number;\r\n for (let index = 0; index < this.length; index++) {\r\n if (fn(current.value, index)) {\r\n result = index;\r\n break;\r\n }\r\n current = current.next;\r\n }\r\n return result;\r\n }\r\n\r\n // Array methods overriding END\r\n}\r\n","import { IEmitable } from './types';\r\nimport {Type} from '@angular/core/src/type';\r\n\r\nexport class EventBusProxy {\r\n\r\n constructor(private eventBus: IEmitable, private hostType: Type<any>, private eventTokenValueProvider: () => any) {\r\n }\r\n\r\n post(eventName: string, data: any) {\r\n this.eventBus.post(this.hostType, this.eventTokenValueProvider(), eventName, data);\r\n }\r\n}\r\n\r\n","import { Subject } from 'rxjs/Subject';\r\nimport {IDisposable} from './types';\r\nimport {Subscription} from 'rxjs/Subscription';\r\n\r\nexport class EventPipe implements IDisposable {\r\n\r\n private eventSubject: Subject<any>;\r\n private subscriptionMap: Map<object, Subscription>;\r\n private onceSubscriptionMap: Map<object, Subscription>;\r\n\r\n constructor(private name: string,\r\n private tokenValue: string,\r\n private emitter: string,\r\n private parentEventPipeList: Array<EventPipe>) {\r\n this.eventSubject = new Subject<any>();\r\n this.subscriptionMap = new Map<object, Subscription>();\r\n this.onceSubscriptionMap = new Map<object, Subscription>();\r\n if (this.parentEventPipeList) {\r\n this.parentEventPipeList.push(this);\r\n }\r\n }\r\n\r\n post(data: any) {\r\n this.eventSubject.next(data);\r\n }\r\n\r\n subscribe(eventHandler: (value: any) => void, caller: object): IDisposable {\r\n const subscription = this.eventSubject.subscribe((value) => eventHandler.call(caller, value));\r\n this.subscriptionMap.set(\r\n caller,\r\n subscription\r\n );\r\n return this;\r\n }\r\n\r\n subscribeOnce(eventHandler: (value: any) => void, caller: object): IDisposable {\r\n const subscription = this.eventSubject.subscribe((value) => eventHandler.call(caller, value));\r\n this.onceSubscriptionMap.set(\r\n caller,\r\n subscription\r\n );\r\n return this;\r\n }\r\n\r\n unSubscribe(subscriber: object) {\r\n let subscription = this.subscriptionMap.get(subscriber);\r\n if (subscription) {\r\n subscription.unsubscribe();\r\n subscription = null;\r\n this.subscriptionMap.delete(subscriber);\r\n } else {\r\n subscription = this.onceSubscriptionMap.get(subscriber);\r\n if (subscription) {\r\n subscription.unsubscribe();\r\n subscription = null;\r\n this.onceSubscriptionMap.delete(subscriber);\r\n }\r\n }\r\n }\r\n\r\n // 注销使用once方法注册的订阅。\r\n unSubscribeForOnce() {\r\n for (const subscriber of Array.from(this.onceSubscriptionMap.keys())) {\r\n this.unSubscribe(subscriber);\r\n }\r\n }\r\n\r\n matchEmitterToken(emitter: string, tokenValue: string): boolean {\r\n if (this.emitter && emitter && this.emitter !== emitter) {\r\n return false;\r\n }\r\n if (this.tokenValue && tokenValue && this.tokenValue !== tokenValue) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n examByTargetToken(target: string, tokenValue: string): boolean {\r\n if (this.emitter !== target) {\r\n return false;\r\n }\r\n if (this.tokenValue !== tokenValue) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n dispose(subscriber: object): void {\r\n this.unSubscribe(subscriber);\r\n if (this.subscriptionMap.size === 0 && this.parentEventPipeList) {\r\n const location = this.parentEventPipeList.findIndex(item => item === this);\r\n if (location !== -1) {\r\n this.parentEventPipeList.splice(location, 1);\r\n }\r\n }\r\n }\r\n}\r\n","import {Injectable, Type} from '@angular/core';\r\nimport {EventBusProxy} from './event-bus-proxy';\r\nimport {IDisposable, IEmitable} from './types';\r\nimport {EventPipe} from './event-pipe';\r\n\r\n@Injectable()\r\nexport class EventBus implements IEmitable {\r\n private proxyMap: Map<string, EventBusProxy>;\r\n private eventMap: Map<string, Array<EventPipe>>;\r\n\r\n constructor() {\r\n this.proxyMap = new Map<string, EventBusProxy>();\r\n this.eventMap = new Map<string, Array<EventPipe>>();\r\n }\r\n\r\n getProxy(ownerType: Type<any>, eventTokenValueProvider: () => any): EventBusProxy {\r\n const ownerName = ownerType.constructor.name;\r\n if (!this.proxyMap.has(ownerName)) {\r\n this.proxyMap.set(ownerName, new EventBusProxy(this, ownerType, eventTokenValueProvider));\r\n }\r\n return this.proxyMap.get(ownerName);\r\n }\r\n\r\n /**\r\n * 发送事件,通知订阅者接收消息。\r\n */\r\n post(emitterType: Type<any> | string, tokenValue: string, eventName: string, eventArgs: any): void {\r\n const eventPipeList = this.eventMap.get(eventName);\r\n if (!eventPipeList) {\r\n return;\r\n }\r\n\r\n if (!emitterType) {\r\n console.error('post方法的参数emitterType不能为空。');\r\n return;\r\n }\r\n let emitter: string;\r\n if (emitterType instanceof Type) {\r\n emitter = emitterType.name;\r\n } else {\r\n emitter = emitterType;\r\n }\r\n\r\n for (const eventPipe of eventPipeList) {\r\n if (eventPipe.matchEmitterToken(emitter, tokenValue)) {\r\n eventPipe.post(eventArgs);\r\n eventPipe.unSubscribeForOnce();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 订阅事件\r\n */\r\n on(target: string, tokenValue: string, eventName: string, caller: object, handler: (value: any) => void): IDisposable {\r\n return this.getEventPipe(eventName, target, tokenValue).subscribe(handler, caller);\r\n }\r\n\r\n /**\r\n * 订阅一次。接收到一次消息之后自动取消订阅\r\n */\r\n once(target: string, tokenValue: string, eventName: string, caller: object, handler: (value: any) => void): IDisposable {\r\n return this.getEventPipe(eventName, target, tokenValue).subscribeOnce(handler, caller);\r\n }\r\n\r\n /**\r\n * 发送一个请求事件,获取监听者的响应并处理\r\n */\r\n requestFor(target: string, tokenValue: string, requestName: string, requestValue: any, success: (any) => any, fail?: (string) => any) {\r\n const eventPipe = this.findExistEventPipe(requestName, 'RequestSubject', tokenValue);\r\n if (eventPipe) {\r\n this.once(target, tokenValue, requestName, this, (response) => {\r\n if (response.status === 'success') {\r\n success(response.data);\r\n } else {\r\n if (fail) {\r\n fail('No target responser listening');\r\n }\r\n }\r\n });\r\n eventPipe.post({target, token: tokenValue, data: requestValue});\r\n } else {\r\n if (fail) {\r\n fail('No target responser listening.');\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 监听一个请求事件,给出响应\r\n */\r\n responseOn(responseSubject: string, requestName: string, callback: (any) => any) {\r\n this.on('RequestSubject', null, requestName, this, (requestObj) => {\r\n const response = {status: 'fail', data: null};\r\n if (responseSubject === requestObj.target) {\r\n response.data = callback(requestObj.data);\r\n response.status = 'success';\r\n }\r\n this.post(requestObj.target, requestObj.token, requestName, response);\r\n });\r\n }\r\n\r\n private getEventPipe(eventName: string, target: string, tokenValue: string) {\r\n let eventPipeList = this.eventMap.get(eventName);\r\n if (!eventPipeList) {\r\n eventPipeList = new Array<EventPipe>();\r\n this.eventMap.set(eventName, eventPipeList);\r\n }\r\n let eventPipe = eventPipeList.find(item => item.examByTargetToken(target, tokenValue));\r\n if (!eventPipe) {\r\n eventPipe = new EventPipe(eventName, tokenValue, target, eventPipeList);\r\n }\r\n return eventPipe;\r\n }\r\n\r\n private findExistEventPipe(eventName: string, target: string, tokenValue: string): EventPipe {\r\n const eventPipeList = this.eventMap.get(eventName);\r\n if (!eventPipeList) {\r\n return null;\r\n }\r\n // return eventPipeList.find(item => item.examByTargetToken(target, tokenValue));\r\n for (const eventPipe of eventPipeList) {\r\n if (eventPipe.matchEmitterToken(target, tokenValue)) {\r\n return eventPipe;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n\r\nclass RequestSubject {}\r\nclass DataClass {}\r\n","let nextInstanceId = 1;\r\n\r\nexport class Model {\r\n alive = true;\r\n get isAlive() { return this.alive; }\r\n get isDestroyed() { return !this.alive; }\r\n\r\n constructor(params: any) {\r\n\r\n }\r\n\r\n assignId(id) {\r\n\r\n }\r\n\r\n destroy() {\r\n\r\n }\r\n\r\n resetNextInstanceId() {\r\n nextInstanceId = 1;\r\n }\r\n}\r\n","import { Model } from './model';\r\n\r\nexport class PaneAxis extends Model {\r\n flexScale: any;\r\n parent: any;\r\n container: any;\r\n orientation: any;\r\n children: any[];\r\n panes: any[];\r\n items: any[];\r\n deserialize() {\r\n\r\n }\r\n\r\n\r\n constructor(params?: any, viewRegistry?: any) {\r\n super({});\r\n }\r\n\r\n getElement() { }\r\n\r\n addChild() { }\r\n\r\n removeChidl() { }\r\n\r\n insertChildBefore() { }\r\n\r\n subscribeToChild() { }\r\n\r\n unsubscribeFromChild() { }\r\n}\r\n","// Essential: A handle to a resource that can be disposed. For example,\r\n// {Emitter::on} returns disposables representing subscriptions.\r\n\r\nexport class Disposable {\r\n\r\n private disposed = false;\r\n\r\n // Public: Ensure that `object` correctly implements the `Disposable`\r\n // contract.\r\n //\r\n // * `object` An {Object} you want to perform the check against.\r\n //\r\n // Returns a {Boolean} indicating whether `object` is a valid `Disposable`.\r\n static isDisposable(object): boolean {\r\n if (object && object.dispose && typeof(object.dispose) === 'function') {\r\n return true;\r\n }\r\n return false;\r\n }\r\n //////\r\n /// Section: Construction and Destruction\r\n //////\r\n\r\n // Public: Construct a Disposable\r\n //\r\n // * `disposalAction` A {Function} to call when {::dispose} is called for the\r\n // first time.\r\n constructor(private disposalAction: () => any) { }\r\n\r\n // Public: Perform the disposal action, indicating that the resource associated\r\n // with this disposable is no longer needed.\r\n //\r\n // You can call this method more than once, but the disposal action will only\r\n // be performed the first time.\r\n dispose() {\r\n if (!this.disposed) {\r\n this.disposed = true;\r\n if (this.disposalAction) {\r\n this.disposalAction();\r\n }\r\n this.disposalAction = null;\r\n }\r\n }\r\n}\r\n","import { Disposable } from './disposable';\r\n\r\n// Essential: An object that aggregates multiple {Disposable} instances together\r\n// into a single disposable, so they can all be disposed as a group.\r\n//\r\n// These are very useful when subscribing to multiple events.\r\n//\r\n// ## Examples\r\n//\r\n// ```coffee\r\n// {CompositeDisposable} = require 'atom'\r\n//\r\n// class Something\r\n// constructor: ->\r\n// @disposables = new CompositeDisposable\r\n// editor = atom.workspace.getActiveTextEditor()\r\n// @disposables.add editor.onDidChange ->\r\n// @disposables.add editor.onDidChangePath ->\r\n//\r\n// destroy: ->\r\n// @disposables.dispose()\r\n// ```\r\nexport class CompositeDisposable {\r\n private disposed = false;\r\n private disposables: Set<any>;\r\n\r\n //////\r\n /// Section: Construction and Destruction\r\n //////\r\n\r\n // Public: Construct an instance, optionally with one or more disposables\r\n constructor(...disposables) {\r\n this.disposables = new Set();\r\n this.add(...disposables);\r\n }\r\n // Public: Dispose all disposables added to this composite disposable.\r\n //\r\n // If this object has already been disposed, this method has no effect.\r\n dispose() {\r\n if (!this.disposed) {\r\n this.disposed = true;\r\n this.disposables.forEach((disposable) => disposable.dispose());\r\n this.disposables = null;\r\n }\r\n }\r\n //////\r\n /// Section: Managing Disposables\r\n //////\r\n\r\n // Public: Add disposables to be disposed when the composite is disposed.\r\n //\r\n // If this object has already been disposed, this method has no effect.\r\n //\r\n // * `...disposables` {Disposable} instances or any objects with `.dispose()`\r\n // methods.\r\n add(...disposables) {\r\n if (!this.disposed) {\r\n for (const disposable of disposables) {\r\n if (this.assertDisposable(disposable)) {\r\n this.disposables.add(disposable);\r\n }\r\n }\r\n }\r\n }\r\n // Public: Remove a previously added disposable.\r\n //\r\n // * `disposable` {Disposable} instance or any object with a `.dispose()`\r\n // method.\r\n remove(disposable): void {\r\n if (!this.disposed) {\r\n this.disposables.delete(disposable);\r\n }\r\n }\r\n // Public: Alias to {CompositeDisposable::remove}\r\n delete(disposable): void {\r\n this.remove(disposable);\r\n }\r\n // Public: Clear all disposables. They will not be disposed by the next call\r\n // to dispose.\r\n clear() {\r\n if (!this.disposed) {\r\n this.disposables.clear();\r\n }\r\n }\r\n\r\n assertDisposable(disposable): boolean {\r\n if (!Disposable.isDisposable(disposable)) {\r\n throw new TypeError('Arguments to CompositeDisposable.add must have a .dispose() method');\r\n }\r\n return true;\r\n }\r\n}\r\n","import { Disposable } from './disposable';\r\nimport { CompositeDisposable } from './composite-disposable';\r\n\r\n// Essential: Utility class to be used when implementing event-based APIs that\r\n// allows for handlers registered via `::on` to be invoked with calls to\r\n// `::emit`. Instances of this class are intended to be used internally by\r\n// classes that expose an event-based API.\r\n//\r\n// For example:\r\n//\r\n// ```coffee\r\n// class User\r\n// constructor: ->\r\n// @emitter = new Emitter\r\n//\r\n// onDidChangeName: (callback) ->\r\n// @emitter.on 'did-change-name', callback\r\n//\r\n// setName: (name) ->\r\n// if name isnt @name\r\n// @name = name\r\n// @emitter.emit 'did-change-name', name\r\n// @name\r\n// ```\r\nexport class Emitter {\r\n static exceptionHandlers = [];\r\n static dispatch = Emitter.simpleDispatch;\r\n\r\n private disposed = false;\r\n private subscriptions: CompositeDisposable;\r\n private handlersByEventName: any;\r\n\r\n\r\n static onEventHandlerException(exceptionHandler) {\r\n this.dispatch = this.simpleDispatch;\r\n if (this.exceptionHandlers.length === 0) {\r\n this.dispatch = this.exceptionHandlingDispatch;\r\n }\r\n\r\n this.exceptionHandlers.push(exceptionHandler);\r\n\r\n return new Disposable(() => {\r\n this.exceptionHandlers.splice(this.exceptionHandlers.indexOf(exceptionHandler), 1);\r\n if (this.exceptionHandlers.length === 0) {\r\n return this.dispatch = this.simpleDispatch;\r\n }\r\n });\r\n }\r\n\r\n static simpleDispatch(handler, value) {\r\n return handler(value);\r\n }\r\n\r\n static exceptionHandlingDispatch(handler, value) {\r\n try {\r\n return handler(value);\r\n } catch (exception) {\r\n return this.exceptionHandlers.map((exceptionHandler) => exceptionHandler(exception));\r\n }\r\n }\r\n\r\n //////\r\n /// Section: Construction and Destruction\r\n //////\r\n\r\n // Public: Construct an emitter.\r\n //\r\n // ```coffee\r\n // @emitter = new Emitter()\r\n // ```\r\n constructor() {\r\n this.clear();\r\n }\r\n\r\n // Public: Clear out any existing subscribers.\r\n clear() {\r\n if (this.subscriptions) {\r\n this.subscriptions.dispose();\r\n }\r\n this.subscriptions = new CompositeDisposable();\r\n return this.handlersByEventName = {};\r\n }\r\n\r\n // Public: Unsubscribe all handlers.\r\n dispose() {\r\n this.subscriptions.dispose();\r\n this.handlersByEventName = null;\r\n this.disposed = true;\r\n }\r\n\r\n //////\r\n /// Section: Event Subscription\r\n //////\r\n\r\n // Public: Register the given handler function to be invoked whenever events by\r\n // the given name are emitted via {::emit}.\r\n //\r\n // * `eventName` {String} naming the event that you want to invoke the handler\r\n // when emitted.\r\n // * `handler` {Function} to invoke when {::emit} is called with the given\r\n // event name.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n on(eventName, handler, unshift = false): Disposable {\r\n if (this.disposed) {\r\n throw new Error('Emitter has been disposed');\r\n }\r\n\r\n if (typeof handler !== 'function') {\r\n throw new Error('Handler must be a function');\r\n }\r\n const currentHandlers = this.handlersByEventName[eventName];\r\n if (currentHandlers) {\r\n if (unshift) {\r\n this.handlersByEventName[eventName] = [handler].concat(currentHandlers);\r\n } else {\r\n this.handlersByEventName[eventName] = currentHandlers.concat(handler);\r\n }\r\n } else {\r\n this.handlersByEventName[eventName] = [handler];\r\n }\r\n // When the emitter is disposed, we want to dispose of all subscriptions.\r\n // However, we also need to stop tracking disposables when they're disposed\r\n // from outside, otherwise this class will hold references to all the\r\n // disposables it created (instead of just the active ones).\r\n const cleanup = new Disposable(() => {\r\n this.subscriptions.remove(cleanup);\r\n return this.off(eventName, handler);\r\n });\r\n this.subscriptions.add(cleanup);\r\n return cleanup;\r\n }\r\n\r\n // Public: Register the given handler function to be invoked the next time an\r\n // events with the given name is emitted via {::emit}.\r\n //\r\n // * `eventName` {String} naming the event that you want to invoke the handler\r\n // when emitted.\r\n // * `handler` {Function} to invoke when {::emit} is called with the given\r\n // event name.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n once(eventName, handler, unshift = false): Disposable {\r\n let disposable: Disposable;\r\n const wrapped = (value) => {\r\n disposable.dispose();\r\n handler(value);\r\n };\r\n disposable = this.on(eventName, wrapped, unshift);\r\n return disposable;\r\n }\r\n\r\n // Public: Register the given handler function to be invoked *before* all\r\n // other handlers existing at the time of subscription whenever events by the\r\n // given name are emitted via {::emit}.\r\n //\r\n // Use this method when you need to be the first to handle a given event. This\r\n // could be required when a data structure in a parent object needs to be\r\n // updated before third-party event handlers registered on a child object via a\r\n // public API are invoked. Your handler could itself be preempted via\r\n // subsequent calls to this method, but this can be controlled by keeping\r\n // methods based on `::preempt` private.\r\n //\r\n // * `eventName` {String} naming the event that you want to invoke the handler\r\n // when emitted.\r\n // * `handler` {Function} to invoke when {::emit} is called with the given\r\n // event name.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n preempt(eventName, handler) {\r\n this.on(eventName, handler, true);\r\n }\r\n\r\n // Private: Used by the disposable.\r\n off(eventName, handlerToRemove) {\r\n if (this.disposed) {\r\n return;\r\n }\r\n\r\n const oldHandlers = this.handlersByEventName[eventName];\r\n\r\n if (oldHandlers) {\r\n const newHandlers = [];\r\n for (const handler of oldHandlers) {\r\n if (handler !== handlerToRemove) {\r\n newHandlers.push(handler);\r\n }\r\n }\r\n if (newHandlers.length > 0) {\r\n this.handlersByEventName[eventName] = newHandlers;\r\n } else {\r\n delete this.handlersByEventName[eventName];\r\n }\r\n }\r\n }\r\n\r\n //////\r\n /// Section: Event Emission\r\n //////\r\n\r\n // Public: Invoke handlers registered via {::on} for the given event name.\r\n //\r\n // * `eventName` The name of the event to emit. Handlers registered with {::on}\r\n // for the same name will be invoked.\r\n // * `value` Callbacks will be invoked with this value as an argument.\r\n emit(eventName, value) {\r\n if (this.handlersByEventName && this.handlersByEventName[eventName]) {\r\n const handlers = this.handlersByEventName[eventName];\r\n for (const handler of handlers) {\r\n Emitter.dispatch(handler, value);\r\n }\r\n }\r\n }\r\n\r\n emitAsync(eventName, value): Promise<any> {\r\n if (this.handlersByEventName && this.handlersByEventName[eventName]) {\r\n const results = [];\r\n for (const handler of this.handlersByEventName[eventName]) {\r\n results.push(Emitter.dispatch(handler, value));\r\n }\r\n return Promise.all(results).then(function() {});\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n getEventNames(): string[] {\r\n return Object.keys(this.handlersByEventName);\r\n }\r\n\r\n listenerCountForEventName(eventName) {\r\n return this.handlersByEventName && this.handlersByEventName[eventName] ? this.handlersByEventName[eventName].length : 0;\r\n }\r\n\r\n getTotalListenerCount() {\r\n let result = 0;\r\n for (const eventName in this.handlersByEventName) {\r\n if (this.handlersByEventName.hasOwnProperty(eventName)) {\r\n result += this.handlersByEventName[eventName].length;\r\n }\r\n }\r\n return result;\r\n }\r\n}\r\n","import { PaneAxis } from './pane-axis';\r\nimport { Emitter, Disposable } from './event-kit';\r\n\r\n// const Grim = require('grim')\r\n// const {CompositeDisposable, Emitter} = require('event-kit')\r\n// const PaneAxis = require('./pane-axis')\r\n// const TextEditor = require('./text-editor')\r\n// const PaneElement = require('./pane-element')\r\n\r\nlet nextInstanceId = 1;\r\n\r\nclass SaveCancelledError extends Error { }\r\n\r\n// Extended: A container for presenting content in the center of the workspace.\r\n// Panes can contain multiple items, one of which is *active* at a given time.\r\n// The view corresponding to the active item is displayed in the interface. In\r\n// the default configuration, tabs are also displayed for each item.\r\n//\r\n// Each pane may also contain one *pending* item. When a pending item is added\r\n// to a pane, it will replace the currently pending item, if any, instead of\r\n// simply being added. In the default configuration, the text in the tab for\r\n// pending items is shown in italics.\r\nexport class Pane {\r\n\r\n id: any;\r\n activeItem: any;\r\n focused: any;\r\n applicationDelegate: any;\r\n notificationManager: any;\r\n config: any;\r\n deserializerManager: any;\r\n viewRegistry: any;\r\n private emitter: Emitter;\r\n alive = true;\r\n subscriptionsPerItem = new WeakMap();\r\n items = [];\r\n itemStack = [];\r\n container = null;\r\n flexScale: any;\r\n parent: any;\r\n itemStackIndex: number;\r\n pendingItem: any;\r\n\r\n static deserialize(state, { deserializers, applicationDelegate, config, notifications, views }) {\r\n const { activeItemIndex } = state;\r\n const activeItemURI = state.activeItemURI || state.activeItemUri;\r\n\r\n const items = [];\r\n for (const itemState of state.items) {\r\n const item = deserializers.deserialize(itemState);\r\n if (item) { items.push(item); }\r\n }\r\n state.items = items;\r\n\r\n state.activeItem = items[activeItemIndex];\r\n if (!state.activeItem && activeItemURI) {\r\n state.activeItem = state.items.find((item) =>\r\n typeof item.getURI === 'function' && item.getURI() === activeItemURI\r\n );\r\n }\r\n\r\n return new Pane(Object.assign(state, {\r\n deserializerManager: deserializers,\r\n notificationManager: notifications,\r\n viewRegistry: views,\r\n config,\r\n applicationDelegate\r\n }));\r\n }\r\n\r\n\r\n\r\n inspect() {\r\n return `Pane ${this.id}`;\r\n }\r\n constructor(params: any) {\r\n this.setPendingItem = this.setPendingItem.bind(this);\r\n this.getPendingItem = this.getPendingItem.bind(this);\r\n this.clearPendingItem = this.clearPendingItem.bind(this);\r\n this.onItemDidTerminatePendingState = this.onItemDidTerminatePendingState.bind(this);\r\n this.saveItem = this.saveItem.bind(this);\r\n this.saveItemAs = this.saveItemAs.bind(this);\r\n\r\n this.id = params.id;\r\n if (this.id != null) {\r\n nextInstanceId = Math.max(nextInstanceId, this.id + 1);\r\n } else {\r\n this.id = nextInstanceId++;\r\n }\r\n\r\n this.activeItem = params.activeItem;\r\n this.focused = params.focused != null ? params.focused : false;\r\n this.applicationDelegate = params.applicationDelegate;\r\n this.notificationManager = params.notificationManager;\r\n this.config = params.config;\r\n this.deserializerManager = params.deserializerManager;\r\n this.viewRegistry = params.viewRegistry;\r\n\r\n this.emitter = new Emitter();\r\n this.alive = true;\r\n this.subscriptionsPerItem = new WeakMap();\r\n this.items = [];\r\n this.itemStack = [];\r\n this.container = null;\r\n\r\n this.addItems((params.items || []).filter(item => item));\r\n if (!this.getActiveItem()) {\r\n this.setActiveItem(this.items[0]);\r\n }\r\n this.addItemsToStack(params.itemStackIndices || []);\r\n this.setFlexScale(params.flexScale || 1);\r\n }\r\n\r\n getElement() {\r\n }\r\n\r\n serialize() {\r\n const itemsToBeSerialized = this.items.filter(item => item && typeof item.serialize === 'function');\r\n\r\n const itemStackIndices = [];\r\n for (const item of this.itemStack) {\r\n if (typeof item.serialize === 'function') {\r\n itemStackIndices.push(itemsToBeSerialized.indexOf(item));\r\n }\r\n }\r\n\r\n const activeItemIndex = itemsToBeSerialized.indexOf(this.activeItem);\r\n\r\n return {\r\n deserializer: 'Pane',\r\n id: this.id,\r\n items: itemsToBeSerialized.map(item => item.serialize()),\r\n itemStackIndices,\r\n activeItemIndex,\r\n focused: this.focused,\r\n flexScale: this.flexScale\r\n };\r\n }\r\n\r\n getParent() { return this.parent; }\r\n\r\n setParent(parent) {\r\n this.parent = parent;\r\n }\r\n\r\n getContainer() { return this.container; }\r\n\r\n setContainer(container) {\r\n if (container && container !== this.container) {\r\n this.container = container;\r\n container.didAddPane({ pane: this });\r\n }\r\n }\r\n\r\n // Private: Determine whether the given item is allowed to exist in this pane.\r\n //\r\n // * `item` the Item\r\n //\r\n // Returns a {Boolean}.\r\n isItemAllowed(item) {\r\n if (typeof item.getAllowedLocations !== 'function') {\r\n return true;\r\n } else {\r\n return item.getAllowedLocations().includes(this.getContainer().getLocation());\r\n }\r\n }\r\n\r\n setFlexScale(flexScale) {\r\n this.flexScale = flexScale;\r\n return this.flexScale;\r\n }\r\n\r\n getFlexScale() { return this.flexScale; }\r\n\r\n increaseSize() { this.setFlexScale(this.getFlexScale() * 1.1); }\r\n\r\n decreaseSize() { this.setFlexScale(this.getFlexScale() / 1.1); }\r\n\r\n /*\r\n Section: Event Subscription\r\n */\r\n\r\n // Public: Invoke the given callback when the pane resizes\r\n //\r\n // The callback will be invoked when pane's flexScale property changes.\r\n // Use {::getFlexScale} to get the current value.\r\n //\r\n // * `callback` {Function} to be called when the pane is resized\r\n // * `flexScale` {Number} representing the panes `flex-grow`; ability for a\r\n // flex item to grow if necessary.\r\n //\r\n // Returns a {Disposable} on which '.dispose()' can be called to unsubscribe.\r\n onDidChangeFlexScale(callback) {\r\n }\r\n\r\n // Public: Invoke the given callback with the current and future values of\r\n // {::getFlexScale}.\r\n //\r\n // * `callback` {Function} to be called with the current and future values of\r\n // the {::getFlexScale} property.\r\n // * `flexScale` {Number} representing the panes `flex-grow`; ability for a\r\n // flex item to grow if necessary.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n observeFlexScale(callback) {\r\n callback(this.flexScale);\r\n return this.onDidChangeFlexScale(callback);\r\n }\r\n\r\n // Public: Invoke the given callback when the pane is activated.\r\n //\r\n // The given callback will be invoked whenever {::activate} is called on the\r\n // pane, even if it is already active at the time.\r\n //\r\n // * `callback` {Function} to be called when the pane is activated.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidActivate(callback) {\r\n }\r\n\r\n // Public: Invoke the given callback before the pane is destroyed.\r\n //\r\n // * `callback` {Function} to be called before the pane is destroyed.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onWillDestroy(callback) {\r\n }\r\n\r\n // Public: Invoke the given callback when the pane is destroyed.\r\n //\r\n // * `callback` {Function} to be called when the pane is destroyed.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidDestroy(callback) {\r\n }\r\n\r\n // Public: Invoke the given callback when the value of the {::isActive}\r\n // property changes.\r\n //\r\n // * `callback` {Function} to be called when the value of the {::isActive}\r\n // property changes.\r\n // * `active` {Boolean} indicating whether the pane is active.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidChangeActive(callback) {\r\n return this.container.onDidChangeActivePane(activePane => {\r\n const isActive = this === activePane;\r\n callback(isActive);\r\n });\r\n }\r\n\r\n // Public: Invoke the given callback with the current and future values of the\r\n // {::isActive} property.\r\n //\r\n // * `callback` {Function} to be called with the current and future values of\r\n // the {::isActive} property.\r\n // * `active` {Boolean} indicating whether the pane is active.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n observeActive(callback) {\r\n callback(this.isActive());\r\n return this.onDidChangeActive(callback);\r\n }\r\n\r\n // Public: Invoke the given callback when an item is added to the pane.\r\n //\r\n // * `callback` {Function} to be called with when items are added.\r\n // * `event` {Object} with the following keys:\r\n // * `item` The added pane item.\r\n // * `index` {Number} indicating where the item is located.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidAddItem(callback) {\r\n return this.emitter.on('did-add-item', callback);\r\n }\r\n\r\n // Public: Invoke the given callback when an item is removed from the pane.\r\n //\r\n // * `callback` {Function} to be called with when items are removed.\r\n // * `event` {Object} with the following keys:\r\n // * `item` The removed pane item.\r\n // * `index` {Number} indicating where the item was located.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidRemoveItem(callback): Disposable {\r\n return this.emitter.on('did-remove-item', callback);\r\n }\r\n\r\n // Public: Invoke the given callback before an item is removed from the pane.\r\n //\r\n // * `callback` {Function} to be called with when items are removed.\r\n // * `event` {Object} with the following keys:\r\n // * `item` The pane item to be removed.\r\n // * `index` {Number} indicating where the item is located.\r\n onWillRemoveItem(callback) {\r\n }\r\n\r\n // Public: Invoke the given callback when an item is moved within the pane.\r\n //\r\n // * `callback` {Function} to be called with when items are moved.\r\n // * `event` {Object} with the following keys:\r\n // * `item` The removed pane item.\r\n // * `oldIndex` {Number} indicating where the item was located.\r\n // * `newIndex` {Number} indicating where the item is now located.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidMoveItem(callback) {\r\n }\r\n\r\n // Public: Invoke the given callback with all current and future items.\r\n //\r\n // * `callback` {Function} to be called with current and future items.\r\n // * `item` An item that is present in {::getItems} at the time of\r\n // subscription or that is added at some later time.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n observeItems(callback) {\r\n for (const item of this.getItems()) {\r\n callback(item);\r\n }\r\n return this.onDidAddItem(({ item }) => callback(item));\r\n }\r\n\r\n // 公有方法: 当{::getActiveItem}值变换前调用。\r\n onDoingChangeActiveItem(callback): Disposable {\r\n return this.emitter.on('doing-change-active-item', callback);\r\n }\r\n\r\n // Public: Invoke the given callback when the value of {::getActiveItem}\r\n // changes.\r\n //\r\n // * `callback` {Function} to be called with when the active item changes.\r\n // * `activeItem` The current active item.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidChangeActiveItem(callback): Disposable {\r\n return this.emitter.on('did-change-active-item', callback);\r\n }\r\n\r\n // Public: Invoke the given callback when {::activateNextRecentlyUsedItem}\r\n // has been called, either initiating or continuing a forward MRU traversal of\r\n // pane items.\r\n //\r\n // * `callback` {Function} to be called with when the active item changes.\r\n // * `nextRecentlyUsedItem` The next MRU item, now being set active\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onChooseNextMRUItem(callback) {\r\n }\r\n\r\n // Public: Invoke the given callback when {::activatePreviousRecentlyUsedItem}\r\n // has been called, either initiating or continuing a reverse MRU traversal of\r\n // pane items.\r\n //\r\n // * `callback` {Function} to be called with when the active item changes.\r\n // * `previousRecentlyUsedItem` The previous MRU item, now being set active\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onChooseLastMRUItem(callback) {\r\n }\r\n\r\n // Public: Invoke the given callback when {::moveActiveItemToTopOfStack}\r\n // has been called, terminating an MRU traversal of pane items and moving the\r\n // current active item to the top of the stack. Typically bound to a modifier\r\n // (e.g. CTRL) key up event.\r\n //\r\n // * `callback` {Function} to be called with when the MRU traversal is done.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDoneChoosingMRUItem(callback) {\r\n }\r\n\r\n // Public: Invoke the given callback with the current and future values of\r\n // {::getActiveItem}.\r\n //\r\n // * `callback` {Function} to be called with the current and future active\r\n // items.\r\n // * `activeItem` The current active item.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n observeActiveItem(callback): Disposable {\r\n callback(this.getActiveItem());\r\n return this.onDidChangeActiveItem(callback);\r\n }\r\n\r\n // Public: Invoke the given callback before items are destroyed.\r\n //\r\n // * `callback` {Function} to be called before items are destroyed.\r\n // * `event` {Object} with the following keys:\r\n // * `item` The item that will be destroyed.\r\n // * `index` The location of the item.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to\r\n // unsubscribe.\r\n onWillDestroyItem(callback) {\r\n }\r\n\r\n // Called by the view layer to indicate that the pane has gained focus.\r\n focus() {\r\n this.focused = true;\r\n return this.activate();\r\n }\r\n\r\n // Called by the view layer to indicate that the pane has lost focus.\r\n blur() {\r\n this.focused = false;\r\n return true; // if this is called from an event handler, don't cancel it\r\n }\r\n\r\n isFocused() { return this.focused; }\r\n\r\n getPanes() { return [this]; }\r\n\r\n unsubscribeFromItem(item) {\r\n const subscription = this.subscriptionsPerItem.get(item);\r\n if (subscription) {\r\n subscription.dispose();\r\n this.subscriptionsPerItem.delete(item);\r\n }\r\n }\r\n\r\n /*\r\n Section: Items\r\n */\r\n\r\n // Public: Get the items in this pane.\r\n //\r\n // Returns an {Array} of items.\r\n getItems() {\r\n return this.items.slice();\r\n }\r\n\r\n // Public: Get the active pane item in this pane.\r\n //\r\n // Returns a pane item.\r\n getActiveItem() { return this.activeItem; }\r\n\r\n setActiveItem(activeItem?: any, options?: any) {\r\n const modifyStack = options && options.modifyStack;\r\n if (activeItem !== this.activeItem) {\r\n if (modifyStack !== false) { this.addItemToStack(activeItem); }\r\n this.emitter.emit('doing-change-active-item', this.activeItem);\r\n this.activeItem = activeItem;\r\n this.emitter.emit('did-change-active-item', this.activeItem);\r\n if (this.container) { this.container.didChangeActiveItemOnPane(this, this.activeItem); }\r\n }\r\n return this.activeItem;\r\n }\r\n\r\n // Build the itemStack after deserializing\r\n addItemsToStack(itemStackIndices) {\r\n if (this.items.length > 0) {\r\n if (itemStackIndices.length !== this.items.length || itemStackIndices.includes(-1)) {\r\n itemStackIndices = this.items.map((item, i) => i);\r\n }\r\n\r\n for (const itemIndex of itemStackIndices) {\r\n this.addItemToStack(this.items[itemIndex]);\r\n }\r\n }\r\n }\r\n\r\n // Add item (or move item) to the end of the itemStack\r\n addItemToStack(newItem) {\r\n if (newItem == null) { return; }\r\n const index = this.itemStack.indexOf(newItem);\r\n if (index !== -1) { this.itemStack.splice(index, 1); }\r\n return this.itemStack.push(newItem);\r\n }\r\n\r\n // Public: Return the item at the given index.\r\n //\r\n // * `index` {Number}\r\n //\r\n // Returns an item or `null` if no item exists at the given index.\r\n itemAtIndex(index) {\r\n return this.items[index];\r\n }\r\n\r\n // Makes the next item in the itemStack active.\r\n activateNextRecentlyUsedItem() {\r\n if (this.items.length > 1) {\r\n if (this.itemStackIndex == null) { this.itemStackIndex = this.itemStack.length - 1; }\r\n if (this.itemStackIndex === 0) { this.itemStackIndex = this.itemStack.length; }\r\n this.itemStackIndex--;\r\n const nextRecentlyUsedItem = this.itemStack[this.itemStackIndex];\r\n this.setActiveItem(nextRecentlyUsedItem, { modifyStack: false });\r\n }\r\n }\r\n\r\n // Makes the previous item in the itemStack active.\r\n activatePreviousRecentlyUsedItem() {\r\n if (this.items.length > 1) {\r\n if (this.itemStackIndex + 1 === this.itemStack.length || this.itemStackIndex == null) {\r\n this.itemStackIndex = -1;\r\n }\r\n this.itemStackIndex++;\r\n const previousRecentlyUsedItem = this.itemStack[this.itemStackIndex];\r\n this.setActiveItem(previousRecentlyUsedItem, { modifyStack: false });\r\n }\r\n }\r\n\r\n // Moves the active item to the end of the itemStack once the ctrl key is lifted\r\n moveActiveItemToTopOfStack() {\r\n delete this.itemStackIndex;\r\n this.addItemToStack(this.activeItem);\r\n }\r\n\r\n // Public: Makes the next item active.\r\n activateNextItem() {\r\n const index = this.getActiveItemIndex();\r\n if (index < (this.items.length - 1)) {\r\n this.activateItemAtIndex(index + 1);\r\n } else {\r\n this.activateItemAtIndex(0);\r\n }\r\n }\r\n\r\n // Public: Makes the previous item active.\r\n activatePreviousItem() {\r\n const index = this.getActiveItemIndex();\r\n if (index > 0) {\r\n this.activateItemAtIndex(index - 1);\r\n } else {\r\n this.activateItemAtIndex(this.items.length - 1);\r\n }\r\n }\r\n\r\n activateLastItem() {\r\n this.activateItemAtIndex(this.items.length - 1);\r\n }\r\n\r\n // Public: Move the active tab to the right.\r\n moveItemRight() {\r\n const index = this.getActiveItemIndex();\r\n const rightItemIndex = index + 1;\r\n if (rightItemIndex <= this.items.length - 1) { this.moveItem(this.getActiveItem(), rightItemIndex); }\r\n }\r\n\r\n // Public: Move the active tab to the left\r\n moveItemLeft() {\r\n const index = this.getActiveItemIndex();\r\n const leftItemIndex = index - 1;\r\n if (leftItemIndex >= 0) { return this.moveItem(this.getActiveItem(), leftItemIndex); }\r\n }\r\n\r\n // Public: Get the index of the active item.\r\n //\r\n // Returns a {Number}.\r\n getActiveItemIndex() {\r\n return this.items.indexOf(this.activeItem);\r\n }\r\n\r\n // Public: Activate the item at the given index.\r\n //\r\n // * `index` {Number}\r\n activateItemAtIndex(index) {\r\n const item = this.itemAtIndex(index) || this.getActiveItem();\r\n return this.setActiveItem(item);\r\n }\r\n\r\n // Public: Make the given item *active*, causing it to be displayed by\r\n // the pane's view.\r\n //\r\n // * `item` The item to activate\r\n // * `options` (optional) {Object}\r\n // * `pending` (optional) {Boolean} indicating that the item should be added\r\n // in a pending state if it does not yet exist in the pane. Existing pending\r\n // items in a pane are replaced with new pending items when they are opened.\r\n activateItem(item, options: any = {}) {\r\n if (item) {\r\n const index = (this.getPendingItem() === this.activeItem)\r\n ? this.getActiveItemIndex()\r\n : this.getActiveItemIndex() + 1;\r\n this.addItem(item, Object.assign({}, options, { index }));\r\n this.setActiveItem(item);\r\n }\r\n }\r\n\r\n // Public: Add the given item to the pane.\r\n //\r\n // * `item` The item to add. It can be a model with an associated view or a\r\n // view.\r\n // * `options` (optional) {Object}\r\n // * `index` (optional) {Number} indicating the index at which to add the item.\r\n // If omitted, the item is added after the current active item.\r\n // * `pending` (optional) {Boolean} indicating that the item should be\r\n // added in a pending state. Existing pending items in a pane are replaced with\r\n // new pending items when they are opened.\r\n //\r\n // Returns the added item.\r\n addItem(item, options: any = {}) {\r\n // Backward compat with old API:\r\n // addItem(item, index=@getActiveItemIndex() + 1)\r\n if (typeof options === 'number') {\r\n options = { index: options };\r\n }\r\n\r\n const index = options.index != null ? options.index : this.getActiveItemIndex() + 1;\r\n const moved = options.moved != null ? options.moved : false;\r\n const pending = options.pending != null ? options.pending : false;\r\n\r\n if (!item || typeof item !== 'object') {\r\n throw new Error(`Pane items must be objects. Attempted to add item ${item}.`);\r\n }\r\n\r\n if (typeof item.isDestroyed === 'function' && item.isDestroyed()) {\r\n throw new Error(`Adding a pane item with URI\r\n '${typeof item.getURI === 'function' && item.getURI()}' that has already been destroyed`);\r\n }\r\n\r\n if (this.items.find(it => it === item)) { return; }\r\n\r\n if (typeof item.onDidDestroy === 'function') {\r\n }\r\n\r\n this.items.splice(index, 0, item);\r\n const lastPendingItem = this.getPendingItem();\r\n const replacingPendingItem = lastPendingItem != null && !moved;\r\n if (replacingPendingItem) { this.pendingItem = null; }\r\n if (pending) { this.setPendingItem(item); }\r\n\r\n this.emitter.emit('did-add-item', { item, index, moved });\r\n if (!moved) {\r\n if (this.container) { this.container.didAddPaneItem(item, this, index); }\r\n }\r\n\r\n if (replacingPendingItem) { this.destroyItem(lastPendingItem); }\r\n if (!this.getActiveItem()) { this.setActiveItem(item); }\r\n return item;\r\n }\r\n\r\n setPendingItem(item) {\r\n if (this.pendingItem !== item) {\r\n const mostRecentPendingItem = this.pendingItem;\r\n this.pendingItem = item;\r\n }\r\n }\r\n\r\n getPendingItem() {\r\n return this.pendingItem || null;\r\n }\r\n\r\n clearPendingItem() {\r\n this.setPendingItem(null);\r\n }\r\n\r\n onItemDidTerminatePendingState(callback) {\r\n }\r\n\r\n // Public: Add the given items to the pane.\r\n //\r\n // * `items` An {Array} of items to add. Items can be views or models with\r\n // associated views. Any objects that are already present in the pane's\r\n // current items will not be added again.\r\n // * `index` (optional) {Number} index at which to add the items. If omitted,\r\n // the item is # added after the current active item.\r\n //\r\n // Returns an {Array} of added items.\r\n addItems(items: any[], index = this.getActiveItemIndex() + 1) {\r\n items = items.filter(item => !this.items.find(it => it === item));\r\n for (let i = 0; i < items.length; i++) {\r\n const item = items[i];\r\n this.addItem(item, { index: index + i });\r\n }\r\n return items;\r\n }\r\n\r\n removeItem(item, moved = false) {\r\n const index = this.items.indexOf(item);\r\n if (index === -1) { return; }\r\n if (this.getPendingItem() === item) { this.pendingItem = null; }\r\n this.removeItemFromStack(item);\r\n // this.emitter.emit('will-remove-item', {item, index, destroyed: !moved, moved});\r\n this.unsubscribeFromItem(item);\r\n\r\n if (item === this.activeItem) {\r\n if (this.items.length === 1) {\r\n this.setActiveItem(undefined);\r\n } else if (index === 0) {\r\n this.activateNextItem();\r\n } else {\r\n this.activatePreviousItem();\r\n }\r\n }\r\n this.items.splice(index, 1);\r\n this.emitter.emit('did-remove-item', { item, index, destroyed: !moved, moved });\r\n if (!moved && this.container) { this.container.didDestroyPaneItem({ item, index, pane: this }); }\r\n if (this.items.length === 0 && this.config && this.config.get && this.config.get('core.destroyEmptyPanes')) {\r\n this.destroy();\r\n }\r\n }\r\n\r\n // Remove the given item from the itemStack.\r\n //\r\n // * `item` The item to remove.\r\n // * `index` {Number} indicating the index to which to remove the item from the itemStack.\r\n removeItemFromStack(item) {\r\n const index = this.itemStack.indexOf(item);\r\n if (index !== -1) { this.itemStack.splice(index, 1); }\r\n }\r\n\r\n // Public: Move the given item to the given index.\r\n //\r\n // * `item` The item to move.\r\n // * `index` {Number} indicating the index to which to move the item.\r\n moveItem(item, newIndex) {\r\n const oldIndex = this.items.indexOf(item);\r\n this.items.splice(oldIndex, 1);\r\n this.items.splice(newIndex, 0, item);\r\n }\r\n\r\n // Public: Move the given item to the given index on another pane.\r\n //\r\n // * `item` The item to move.\r\n // * `pane` {Pane} to which to move the item.\r\n // * `index` {Number} indicating the index to which to move the item in the\r\n // given pane.\r\n moveItemToPane(item?, pane?, index?) {\r\n this.removeItem(item, true);\r\n return pane.addItem(item, { index, moved: true });\r\n }\r\n\r\n // Public: Destroy the active item and activate the next item.\r\n //\r\n // Returns a {Promise} that resolves when the item is destroyed.\r\n destroyActiveItem() {\r\n return this.destroyItem(this.activeItem);\r\n }\r\n\r\n // Public: Destroy the given item.\r\n //\r\n // If the item is active, the next item will be activated. If the item is the\r\n // last item, the pane will be destroyed if the `core.destroyEmptyPanes` config\r\n // setting is `true`.\r\n //\r\n // * `item` Item to destroy\r\n // * `force` (optional) {Boolean} Destroy the item without prompting to save\r\n // it, even if the item's `isPermanentDockItem` method returns true.\r\n //\r\n // Returns a {Promise} that resolves with a {Boolean} indicating whether or not\r\n // the item was destroyed.\r\n async destroyItem(item?: any, force?) {\r\n const index = this.items.indexOf(item);\r\n if (index === -1) { return false; }\r\n\r\n if (!force &&\r\n typeof item.isPermanentDockItem === 'function' && item.isPermanentDockItem() &&\r\n (!this.container || this.container.getLocation() !== 'center')) {\r\n return false;\r\n }\r\n\r\n // In the case where there are no `onWillDestroyPaneItem` listeners, preserve the old behavior\r\n // where `Pane.destroyItem` and callers such as `Pane.close` take effect synchronously.\r\n\r\n\r\n this.removeItem(item, false);\r\n if (typeof item.destroy === 'function') { item.destroy(); }\r\n return true;\r\n }\r\n\r\n // Public: Destroy all items.\r\n destroyItems() {\r\n return Promise.all(\r\n this.getItems().map(item => this.destroyItem(item))\r\n );\r\n }\r\n\r\n // Public: Destroy all items except for the active item.\r\n destroyInactiveItems() {\r\n return Promise.all(\r\n this.getItems()\r\n .filter(item => item !== this.activeItem)\r\n .map(item => this.destroyItem(item))\r\n );\r\n }\r\n\r\n promptToSaveItem(item, options = {}): Promise<boolean> {\r\n if (typeof item.shouldPromptToSave !== 'function' || !item.shouldPromptToSave(options)) {\r\n return Promise.resolve(true);\r\n }\r\n\r\n let uri;\r\n if (typeof item.getURI === 'function') {\r\n uri = item.getURI();\r\n } else if (typeof item.getUri === 'function') {\r\n uri = item.getUri();\r\n } else {\r\n return Promise.resolve(true);\r\n }\r\n\r\n const title = (typeof item.getTitle === 'function' && item.getTitle()) || uri;\r\n\r\n const saveDialog = (saveButtonText, saveFn, message): Promise<boolean> => {\r\n const chosen = this.applicationDelegate.confirm({\r\n message,\r\n detailedMessage: 'Your changes will be lost if you close this item without saving.',\r\n buttons: [saveButtonText, 'Cancel', '&Don\\'t Save']\r\n }\r\n );\r\n\r\n switch (chosen) {\r\n case 0:\r\n return new Promise(resolve => {\r\n return saveFn(item, error => {\r\n if (error instanceof SaveCancelledError) {\r\n resolve(false);\r\n } else if (error) {\r\n saveDialog(\r\n 'Save as',\r\n this.saveItemAs,\r\n `'${title}' could not be saved.\\nError: ${this.getMessageForErrorCode(error.code)}`\r\n ).then(resolve);\r\n } else {\r\n resolve(true);\r\n }\r\n });\r\n });\r\n case 1:\r\n return Promise.resolve(false);\r\n case 2:\r\n return Promise.resolve(true);\r\n }\r\n };\r\n\r\n return saveDialog(\r\n 'Save',\r\n this.saveItem,\r\n `'${title}' has changes, do you want to save them?`\r\n );\r\n }\r\n\r\n // Public: Save the active item.\r\n saveActiveItem(nextAction?: () => any) {\r\n return this.saveItem(this.getActiveItem(), nextAction);\r\n }\r\n\r\n // Public: Prompt the user for a location and save the active item with the\r\n // path they select.\r\n //\r\n // * `nextAction` (optional) {Function} which will be called after the item is\r\n // successfully saved.\r\n //\r\n // Returns a {Promise} that resolves when the save is complete\r\n saveActiveItemAs(nextAction?: () => any) {\r\n return this.saveItemAs(this.getActiveItem(), nextAction);\r\n }\r\n\r\n // Public: Save the given item.\r\n //\r\n // * `item` The item to save.\r\n // * `nextAction` (optional) {Function} which will be called with no argument\r\n // after the item is successfully saved, or with the error if it failed.\r\n // The return value will be that of `nextAction` or `undefined` if it was not\r\n // provided\r\n //\r\n // Returns a {Promise} that resolves when the save is complete\r\n saveItem(item, nextAction) {\r\n if (!item) { return Promise.resolve(); }\r\n\r\n let itemURI;\r\n if (typeof item.getURI === 'function') {\r\n itemURI = item.getURI();\r\n } else if (typeof item.getUri === 'function') {\r\n itemURI = item.getUri();\r\n }\r\n\r\n if (itemURI != null) {\r\n if (typeof item.save === 'function') {\r\n return promisify(() => item.save())\r\n .then(() => {\r\n if (nextAction) { nextAction(); }\r\n })\r\n .catch(error => {\r\n if (nextAction) {\r\n nextAction(error);\r\n } else {\r\n this.handleSaveError(error, item);\r\n }\r\n });\r\n } else if (nextAction) {\r\n nextAction();\r\n return Promise.resolve();\r\n }\r\n } else {\r\n return this.saveItemAs(item, nextAction);\r\n }\r\n }\r\n\r\n // Public: Prompt the user for a location and save the active item with the\r\n // path they select.\r\n //\r\n // * `item` The item to save.\r\n // * `nextAction` (optional) {Function} which will be called with no argument\r\n // after the item is successfully saved, or with the error if it failed.\r\n // The return value will be that of `nextAction` or `undefined` if it was not\r\n // provided\r\n saveItemAs(item, nextAction) {\r\n }\r\n\r\n // Public: Save all items.\r\n saveItems() {\r\n }\r\n\r\n // Public: Return the first item that matches the given URI or undefined if\r\n // none exists.\r\n //\r\n // * `uri` {String} containing a URI.\r\n itemForURI(uri) {\r\n return this.items.find(item => {\r\n if (typeof item.getURI === 'function') {\r\n return item.getURI() === uri;\r\n } else if (typeof item.getUri === 'function') {\r\n return item.getUri() === uri;\r\n }\r\n });\r\n }\r\n\r\n // Public: Activate the first item that matches the given URI.\r\n //\r\n // * `uri` {String} containing a URI.\r\n //\r\n // Returns a {Boolean} indicating whether an item matching the URI was found.\r\n activateItemForURI(uri) {\r\n const item = this.itemForURI(uri);\r\n if (item) {\r\n this.activateItem(item);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n copyActiveItem() {\r\n if (this.activeItem && typeof this.activeItem.copy === 'function') {\r\n return this.activeItem.copy();\r\n }\r\n }\r\n\r\n /*\r\n Section: Lifecycle\r\n */\r\n\r\n // Public: Determine whether the pane is active.\r\n //\r\n // Returns a {Boolean}.\r\n isActive() {\r\n return this.container && this.container.getActivePane() === this;\r\n }\r\n\r\n // Public: Makes this pane the *active* pane, causing it to gain focus.\r\n activate() {\r\n }\r\n\r\n // Public: Close the pane and destroy all its items.\r\n //\r\n // If this is the last pane, all the items will be destroyed but the pane\r\n // itself will not be destroyed.\r\n destroy() {\r\n }\r\n\r\n isAlive() { return this.alive; }\r\n\r\n // Public: Determine whether this pane has been destroyed.\r\n //\r\n // Returns a {Boolean}.\r\n isDestroyed() { return !this.isAlive(); }\r\n\r\n /*\r\n Section: Splitting\r\n */\r\n\r\n // Public: Create a new pane to the left of this pane.\r\n //\r\n // * `params` (optional) {Object} with the following keys:\r\n // * `items` (optional) {Array} of items to add to the new pane.\r\n // * `copyActiveItem` (optional) {Boolean} true will copy the active item into the new split pane\r\n //\r\n // Returns the new {Pane}.\r\n splitLeft(params) {\r\n return this.split('horizontal', 'before', params);\r\n }\r\n\r\n // Public: Create a new pane to the right of this pane.\r\n //\r\n // * `params` (optional) {Object} with the following keys:\r\n // * `items` (optional) {Array} of items to add to the new pane.\r\n // * `copyActiveItem` (optional) {Boolean} true will copy the active item into the new split pane\r\n //\r\n // Returns the new {Pane}.\r\n splitRight(params) {\r\n return this.split('horizontal', 'after', params);\r\n }\r\n\r\n // Public: Creates a new pane above the receiver.\r\n //\r\n // * `params` (optional) {Object} with the following keys:\r\n // * `items` (optional) {Array} of items to add to the new pane.\r\n // * `copyActiveItem` (optional) {Boolean} true will copy the active item into the new split pane\r\n //\r\n // Returns the new {Pane}.\r\n splitUp(params) {\r\n return this.split('vertical', 'before', params);\r\n }\r\n\r\n // Public: Creates a new pane below the receiver.\r\n //\r\n // * `params` (optional) {Object} with the following keys:\r\n // * `items` (optional) {Array} of items to add to the new pane.\r\n // * `copyActiveItem` (optional) {Boolean} true will copy the active item into the new split pane\r\n //\r\n // Returns the new {Pane}.\r\n splitDown(params) {\r\n return this.split('vertical', 'after', params);\r\n }\r\n\r\n split(orientation, side, params) {\r\n if (params && params.copyActiveItem) {\r\n if (!params.items) { params.items = []; }\r\n params.items.push(this.copyActiveItem());\r\n }\r\n\r\n if (this.parent.orientation !== orientation) {\r\n this.parent.replaceChild(this, new PaneAxis({\r\n container: this.container,\r\n orientation,\r\n children: [this],\r\n flexScale: this.flexScale\r\n },\r\n this.viewRegistry\r\n ));\r\n this.setFlexScale(1);\r\n }\r\n\r\n const newPane = new Pane(Object.assign({\r\n applicationDelegate: this.applicationDelegate,\r\n notificationManager: this.notificationManager,\r\n deserializerManager: this.deserializerManager,\r\n config: this.config,\r\n viewRegistry: this.viewRegistry\r\n }, params));\r\n\r\n switch (side) {\r\n case 'before': this.parent.insertChildBefore(this, newPane); break;\r\n case 'after': this.parent.insertChildAfter(this, newPane); break;\r\n }\r\n\r\n if (params && params.moveActiveItem && this.activeItem) {\r\n this.moveItemToPane(this.activeItem, newPane);\r\n }\r\n\r\n newPane.activate();\r\n return newPane;\r\n }\r\n\r\n // If the parent is a horizontal axis, returns its first child if it is a pane;\r\n // otherwise returns this pane.\r\n findLeftmostSibling() {\r\n if (this.parent.orientation === 'horizontal') {\r\n const [leftmostSibling] = this.parent.children;\r\n if (leftmostSibling instanceof PaneAxis) {\r\n return this;\r\n } else {\r\n return leftmostSibling;\r\n }\r\n } else {\r\n return this;\r\n }\r\n }\r\n\r\n findRightmostSibling() {\r\n if (this.parent.orientation === 'horizontal') {\r\n const rightmostSibling = this.parent.children[this.parent.children.length - 1];\r\n if (rightmostSibling instanceof PaneAxis) {\r\n return this;\r\n } else {\r\n return rightmostSibling;\r\n }\r\n } else {\r\n return this;\r\n }\r\n }\r\n\r\n // If the parent is a horizontal axis, returns its last child if it is a pane;\r\n // otherwise returns a new pane created by splitting this pane rightward.\r\n findOrCreateRightmostSibling() {\r\n const rightmostSibling = this.findRightmostSibling();\r\n if (rightmostSibling === this) {\r\n return this.splitRight({});\r\n } else {\r\n return rightmostSibling;\r\n }\r\n }\r\n\r\n // If the parent is a vertical axis, returns its first child if it is a pane;\r\n // otherwise returns this pane.\r\n findTopmostSibling() {\r\n if (this.parent.orientation === 'vertical') {\r\n const [topmostSibling] = this.parent.children;\r\n if (topmostSibling instanceof PaneAxis) {\r\n return this;\r\n } else {\r\n return topmostSibling;\r\n }\r\n } else {\r\n return this;\r\n }\r\n }\r\n\r\n findBottommostSibling() {\r\n if (this.parent.orientation === 'vertical') {\r\n const bottommostSibling = this.parent.children[this.parent.children.length - 1];\r\n if (bottommostSibling instanceof PaneAxis) {\r\n return this;\r\n } else {\r\n return bottommostSibling;\r\n }\r\n } else {\r\n return this;\r\n }\r\n }\r\n\r\n // If the parent is a vertical axis, returns its last child if it is a pane;\r\n // otherwise returns a new pane created by splitting this pane bottomward.\r\n findOrCreateBottommostSibling() {\r\n const bottommostSibling = this.findBottommostSibling();\r\n if (bottommostSibling === this) {\r\n return this.splitDown({});\r\n } else {\r\n return bottommostSibling;\r\n }\r\n }\r\n\r\n // Private: Close the pane unless the user cancels the action via a dialog.\r\n //\r\n // Returns a {Promise} that resolves once the pane is either closed, or the\r\n // closing has been cancelled.\r\n close() {\r\n return Promise.all(this.getItems().map(item => this.promptToSaveItem(item)))\r\n .then(results => {\r\n if (!results.find(item => item === false)) { return this.destroy(); }\r\n });\r\n }\r\n\r\n handleSaveError(error, item) {\r\n }\r\n\r\n getMessageForErrorCode(errorCode) {\r\n switch (errorCode) {\r\n case 'EACCES': return 'Permission denied';\r\n case 'ECONNRESET': return 'Connection reset';\r\n case 'EINTR': return 'Interrupted system call';\r\n case 'EIO': return 'I/O error writing file';\r\n case 'ENOSPC': return 'No space left on device';\r\n case 'ENOTSUP': return 'Operation not supported on socket';\r\n case 'ENXIO': return 'No such device or address';\r\n case 'EROFS': return 'Read-only file system';\r\n case 'ESPIPE': return 'Invalid seek';\r\n case 'ETIMEDOUT': return 'Connection timed out';\r\n }\r\n }\r\n}\r\n\r\nfunction promisify(callback) {\r\n try {\r\n return Promise.resolve(callback());\r\n } catch (error) {\r\n return Promise.reject(error);\r\n }\r\n}\r\n","export class ItemRegistry {\r\n items: WeakSet<any>;\r\n constructor() {\r\n this.items = new WeakSet();\r\n }\r\n\r\n addItem(item: any) {\r\n if (this.hasItem(item)) {\r\n throw new Error(`The workspace can only contain one instance of item ${item}`);\r\n }\r\n this.items.add(item);\r\n }\r\n\r\n removeItem(item: any) {\r\n this.items.delete(item);\r\n }\r\n\r\n hasItem(item) {\r\n return this.items.has(item);\r\n }\r\n}\r\n","import { Pane } from './pane';\r\nimport { ItemRegistry } from './item-registry';\r\n\r\nconst SERIALIZATION_VERSION = 1;\r\n\r\nexport class PaneContainer {\r\n itemRegistry: any;\r\n alive: boolean;\r\n viewRegistry: any;\r\n location: any;\r\n activePane: any;\r\n root: any;\r\n config: any;\r\n\r\n constructor(params) {\r\n let applicationDelegate, deserializerManager, notificationManager;\r\n ({\r\n config: this.config,\r\n applicationDelegate,\r\n notificationManager,\r\n deserializerManager,\r\n viewRegistry: this.viewRegistry,\r\n location: this.location\r\n } = params);\r\n\r\n this.itemRegistry = new ItemRegistry();\r\n this.alive = true;\r\n\r\n\r\n this.setRoot(new Pane({\r\n container: this,\r\n config: this.config,\r\n applicationDelegate,\r\n notificationManager,\r\n deserializerManager,\r\n viewRegistry: this.viewRegistry\r\n }));\r\n this.didActivatePane(this.getRoot());\r\n }\r\n\r\n getLocation() { return this.location; }\r\n\r\n getElement() {\r\n }\r\n\r\n destroy() {\r\n this.alive = false;\r\n for (const pane of this.getRoot().getPanes()) { pane.destroy(); }\r\n\r\n }\r\n\r\n isAlive() { return this.alive; }\r\n\r\n isDestroyed() { return !this.isAlive(); }\r\n\r\n serialize(...params) {\r\n return {\r\n deserializer: 'PaneContainer',\r\n version: SERIALIZATION_VERSION,\r\n root: this.root ? this.root.serialize() : null,\r\n activePaneId: this.activePane.id\r\n };\r\n }\r\n\r\n deserialize(state, deserializerManager) {\r\n if (state.version !== SERIALIZATION_VERSION) { return; }\r\n this.setRoot(deserializerManager.deserialize(state.root));\r\n this.activePane = this.getRoot().getPanes().find(pane => pane.id === state.activePaneId) || this.getPanes()[0];\r\n if (this.config && this.config.get && this.config.get('core.destroyEmptyPanes')) {\r\n this.destroyEmptyPanes();\r\n }\r\n }\r\n\r\n onDidChangeRoot(fn) {\r\n }\r\n\r\n observeRoot(fn) {\r\n fn(this.getRoot());\r\n return this.onDidChangeRoot(fn);\r\n }\r\n\r\n onDidAddPane(fn) {\r\n }\r\n\r\n observePanes(fn) {\r\n for (const pane of this.getPanes()) { fn(pane); }\r\n return this.onDidAddPane(({ pane }) => fn(pane));\r\n }\r\n\r\n onDidDestroyPane(fn) {\r\n }\r\n\r\n onWillDestroyPane(fn) {\r\n }\r\n\r\n onDidChangeActivePane(fn) {\r\n }\r\n\r\n onDidActivatePane(fn) {\r\n }\r\n\r\n observeActivePane(fn) {\r\n fn(this.getActivePane());\r\n return this.onDidChangeActivePane(fn);\r\n }\r\n\r\n onDidAddPaneItem(fn) {\r\n }\r\n\r\n observePaneItems(fn) {\r\n for (const item of this.getPaneItems()) { fn(item); }\r\n return this.onDidAddPaneItem(({ item }) => fn(item));\r\n }\r\n\r\n onDidChangeActivePaneItem(fn) {\r\n }\r\n\r\n onDidStopChangingActivePaneItem(fn) {\r\n }\r\n\r\n observeActivePaneItem(fn) {\r\n fn(this.getActivePaneItem());\r\n return this.onDidChangeActivePaneItem(fn);\r\n }\r\n\r\n onWillDestroyPaneItem(fn) {\r\n }\r\n\r\n onDidDestroyPaneItem(fn) {\r\n }\r\n\r\n getRoot() { return this.root; }\r\n\r\n setRoot(root) {\r\n this.root = root;\r\n this.root.setParent(this);\r\n this.root.setContainer(this);\r\n if ((this.getActivePane() == null) && this.root instanceof Pane) {\r\n this.didActivatePane(this.root);\r\n }\r\n }\r\n\r\n replaceChild(oldChild, newChild) {\r\n if (oldChild !== this.root) { throw new Error('Replacing non-existent child'); }\r\n this.setRoot(newChild);\r\n }\r\n\r\n getPanes(): Pane[] {\r\n if (this.alive) {\r\n return this.getRoot().getPanes();\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n getPaneItems(): any[] {\r\n return this.getRoot().getItems();\r\n }\r\n\r\n getActivePane(): Pane {\r\n return this.activePane;\r\n }\r\n\r\n getActivePaneItem(): any {\r\n return this.getActivePane().getActiveItem();\r\n }\r\n\r\n paneForURI(uri): Pane {\r\n return this.getPanes().find(pane => pane.itemForURI(uri) != null);\r\n }\r\n\r\n paneForItem(item): Pane {\r\n return this.getPanes().find(pane => pane.getItems().find(it => it === item));\r\n }\r\n\r\n saveAll() {\r\n for (const pane of this.getPanes()) { pane.saveItems(); }\r\n }\r\n\r\n confirmClose(options) {\r\n const promises = [];\r\n for (const pane of this.getPanes()) {\r\n for (const item of pane.getItems()) {\r\n promises.push(pane.promptToSaveItem(item, options));\r\n }\r\n }\r\n return Promise.all(promises).then((results: boolean[]) => !results.find(item => item === false));\r\n }\r\n\r\n activateNextPane() {\r\n const panes = this.getPanes();\r\n if (panes.length > 1) {\r\n const currentIndex = panes.indexOf(this.activePane);\r\n const nextIndex = (currentIndex + 1) % panes.length;\r\n panes[nextIndex].activate();\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n activatePreviousPane() {\r\n const panes = this.getPanes();\r\n if (panes.length > 1) {\r\n const currentIndex = panes.indexOf(this.activePane);\r\n let previousIndex = currentIndex - 1;\r\n if (previousIndex < 0) { previousIndex = panes.length - 1; }\r\n panes[previousIndex].activate();\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n moveActiveItemToPane(destPane) {\r\n const item = this.activePane.getActiveItem();\r\n\r\n if (!destPane.isItemAllowed(item)) { return; }\r\n\r\n this.activePane.moveItemToPane(item, destPane);\r\n destPane.setActiveItem(item);\r\n }\r\n\r\n copyActiveItemToPane(destPane) {\r\n const item = this.activePane.copyActiveItem();\r\n\r\n if (item && destPane.isItemAllowed(item)) {\r\n destPane.activateItem(item);\r\n }\r\n }\r\n\r\n destroyEmptyPanes() {\r\n for (const pane of this.getPanes()) { if (pane.items.length === 0) { pane.destroy(); } }\r\n }\r\n\r\n didAddPane(event) {\r\n const items = event.pane.getItems();\r\n for (let i = 0, length = items.length; i < length; i++) {\r\n const item = items[i];\r\n this.didAddPaneItem(item, event.pane, i);\r\n }\r\n }\r\n\r\n willDestroyPane(event) {\r\n }\r\n\r\n didDestroyPane(event) {\r\n }\r\n\r\n didActivatePane(activePane) {\r\n if (activePane !== this.activePane) {\r\n if (!this.getPanes().find(item => item === activePane)) {\r\n throw new Error('Setting active pane that is not present in pane container');\r\n }\r\n\r\n this.activePane = activePane;\r\n this.didChangeActiveItemOnPane(this.activePane, this.activePane.getActiveItem());\r\n }\r\n return this.activePane;\r\n }\r\n\r\n didAddPaneItem(item, pane, index) {\r\n this.itemRegistry.addItem(item);\r\n }\r\n\r\n willDestroyPaneItem(event) {\r\n }\r\n\r\n didDestroyPaneItem(event) {\r\n this.itemRegistry.removeItem(event.item);\r\n // this.emitter.emit('did-destroy-pane-item', event);\r\n }\r\n\r\n didChangeActiveItemOnPane(pane, activeItem) {\r\n if (pane === this.getActivePane()) {\r\n\r\n this.cancelStoppedChangingActivePaneItemTimeout();\r\n // `setTimeout()` isn't available during the snapshotting phase, but that's okay.\r\n\r\n }\r\n }\r\n\r\n cancelStoppedChangingActivePaneItemTimeout() {\r\n\r\n }\r\n}\r\n","import { PaneContainer } from './pane-container';\r\nimport { Pane } from './pane';\r\nimport { ViewRegistry } from './view-registry';\r\nimport { Emitter, Disposable } from './event-kit';\r\n\r\nexport enum DockStyle {\r\n none,\r\n left,\r\n right,\r\n top,\r\n bottom\r\n}\r\n\r\nexport class Dock {\r\n private location: any;\r\n private widthOrHeight: any;\r\n private viewRegistry: ViewRegistry;\r\n private didActivate: boolean;\r\n private paneContainer: PaneContainer;\r\n private state: any;\r\n private emitter: Emitter;\r\n\r\n\r\n constructor(params) {\r\n this.handleResizeHandleDragStart = this.handleResizeHandleDragStart.bind(this);\r\n this.handleResizeToFit = this.handleResizeToFit.bind(this);\r\n this.handleMouseMove = this.handleMouseMove.bind(this);\r\n this.handleMouseUp = this.handleMouseUp.bind(this);\r\n\r\n this.location = params.location;\r\n this.widthOrHeight = getWidthOrHeight(this.location);\r\n this.viewRegistry = params.viewRegistry;\r\n this.didActivate = params.didActivate;\r\n\r\n this.emitter = new Emitter();\r\n\r\n this.paneContainer = new PaneContainer({\r\n location: this.location,\r\n viewRegistry: this.viewRegistry\r\n });\r\n\r\n this.state = {\r\n size: null,\r\n visible: false,\r\n shouldAnimate: false\r\n };\r\n\r\n }\r\n\r\n // This method is called explicitly by the object which adds the Dock to the document.\r\n elementAttached() {\r\n // Re-render when the dock is attached to make sure we remeasure sizes defined in CSS.\r\n this.render(this.state);\r\n }\r\n\r\n getElement() {\r\n\r\n }\r\n\r\n getLocation() {\r\n return this.location;\r\n }\r\n\r\n destroy() {\r\n this.paneContainer.destroy();\r\n // window.removeEventListener('mousemove', this.handleMouseMove);\r\n // window.removeEventListener('mouseup', this.handleMouseUp);\r\n // window.removeEventListener('drag', this.handleDrag);\r\n // window.removeEventListener('dragend', this.handleDragEnd);\r\n }\r\n\r\n setHovered(hovered) {\r\n if (hovered === this.state.hovered) {\r\n return;\r\n }\r\n this.setState({ hovered });\r\n }\r\n\r\n setDraggingItem(draggingItem) {\r\n if (draggingItem === this.state.draggingItem) { return; }\r\n this.setState({ draggingItem });\r\n }\r\n\r\n // Extended: Show the dock and focus its active {Pane}.\r\n activate() {\r\n this.getActivePane().activate();\r\n }\r\n\r\n // Extended: Show the dock without focusing it.\r\n show() {\r\n this.setState({ visible: true });\r\n }\r\n\r\n // Extended: Hide the dock and activate the {WorkspaceCenter} if the dock was\r\n // was previously focused.\r\n hide() {\r\n this.setState({ visible: false });\r\n }\r\n\r\n // Extended: Toggle the dock's visibility without changing the {Workspace}'s\r\n // active pane container.\r\n toggle() {\r\n // const state = { visible: !this.state.visible };\r\n // if (!state.visible) { state.hovered = false; }\r\n // this.setState(state);\r\n }\r\n\r\n // Extended: Check if the dock is visible.\r\n //\r\n // Returns a {Boolean}.\r\n isVisible() {\r\n return this.state.visible;\r\n }\r\n\r\n setState(newState) {\r\n const prevState = this.state;\r\n const nextState = Object.assign({}, prevState, newState);\r\n\r\n // Update the `shouldAnimate` state. This needs to be written to the DOM before updating the\r\n // class that changes the animated property. Normally we'd have to defer the class change a\r\n // frame to ensure the property is animated (or not) appropriately, however we luck out in this\r\n // case because the drag start always happens before the item is dragged into the toggle button.\r\n if (nextState.visible !== prevState.visible) {\r\n // Never animate toggling visibility...\r\n nextState.shouldAnimate = false;\r\n } else if (!nextState.visible && nextState.draggingItem && !prevState.draggingItem) {\r\n // ...but do animate if you start dragging while the panel is hidden.\r\n nextState.shouldAnimate = true;\r\n }\r\n\r\n this.state = nextState;\r\n this.render(this.state);\r\n\r\n const { visible } = this.state;\r\n // if (visible !== prevState.visible) {\r\n // this.emitter.emit('did-change-visible', visible);\r\n // }\r\n }\r\n\r\n render(state) {\r\n\r\n }\r\n\r\n handleDidAddPaneItem() {\r\n if (this.state.size == null) {\r\n this.setState({ size: this.getInitialSize() });\r\n }\r\n }\r\n\r\n handleDidRemovePaneItem() {\r\n // Hide the dock if you remove the last item.\r\n if (this.paneContainer.getPaneItems().length === 0) {\r\n this.setState({ visible: false, hovered: false, size: null });\r\n }\r\n }\r\n\r\n handleResizeHandleDragStart() {\r\n window.addEventListener('mousemove', this.handleMouseMove);\r\n window.addEventListener('mouseup', this.handleMouseUp);\r\n this.setState({ resizing: true });\r\n }\r\n\r\n handleResizeToFit() {\r\n const item = this.getActivePaneItem();\r\n if (item) {\r\n const size = getPreferredSize(item, this.getLocation());\r\n if (size != null) { this.setState({ size }); }\r\n }\r\n }\r\n\r\n handleMouseMove(event) {\r\n if (event.buttons === 0) { // We missed the mouseup event. For some reason it happens on Windows\r\n this.handleMouseUp(event);\r\n return;\r\n }\r\n\r\n const size = 0;\r\n // switch (this.location) {\r\n // case 'left':\r\n // size = event.pageX - this.element.getBoundingClientRect().left;\r\n // break;\r\n // case 'bottom':\r\n // size = this.element.getBoundingClientRect().bottom - event.pageY;\r\n // break;\r\n // case 'right':\r\n // size = this.element.getBoundingClientRect().right - event.pageX;\r\n // break;\r\n // }\r\n this.setState({ size });\r\n }\r\n\r\n handleMouseUp(event) {\r\n window.removeEventListener('mousemove', this.handleMouseMove);\r\n window.removeEventListener('mouseup', this.handleMouseUp);\r\n this.setState({ resizing: false });\r\n }\r\n\r\n // Determine whether the cursor is within the dock hover area. This isn't as simple as just using\r\n // mouseenter/leave because we want to be a little more forgiving. For example, if the cursor is\r\n // over the footer, we want to show the bottom dock's toggle button. Also note that our criteria\r\n // for detecting entry are different than detecting exit but, in order for us to avoid jitter, the\r\n // area considered when detecting exit MUST fully encompass the area considered when detecting\r\n // entry.\r\n pointWithinHoverArea (point, detectingExit) {\r\n }\r\n\r\n getInitialSize() {\r\n // The item may not have been activated yet. If that's the case, just use the first item.\r\n const activePaneItem = this.paneContainer.getActivePaneItem() || this.paneContainer.getPaneItems()[0];\r\n // If there are items, we should have an explicit width; if not, we shouldn't.\r\n return activePaneItem\r\n ? getPreferredSize(activePaneItem, this.location)\r\n : null;\r\n }\r\n\r\n serialize() {\r\n return {\r\n deserializer: 'Dock',\r\n size: this.state.size,\r\n paneContainer: this.paneContainer.serialize({}),\r\n visible: this.state.visible\r\n };\r\n }\r\n\r\n deserialize(serialized, deserializerManager) {\r\n this.paneContainer.deserialize(serialized.paneContainer, deserializerManager);\r\n this.setState({\r\n size: serialized.size || this.getInitialSize(),\r\n // If no items could be deserialized, we don't want to show the dock (even if it was visible last time)\r\n visible: serialized.visible && (this.paneContainer.getPaneItems().length > 0)\r\n });\r\n }\r\n\r\n /*\r\n Section: Event Subscription\r\n */\r\n\r\n // Essential: Invoke the given callback when the visibility of the dock changes.\r\n //\r\n // * `callback` {Function} to be called when the visibility changes.\r\n // * `visible` {Boolean} Is the dock now visible?\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidChangeVisible(callback) {\r\n }\r\n\r\n // Essential: Invoke the given callback with the current and all future visibilities of the dock.\r\n //\r\n // * `callback` {Function} to be called when the visibility changes.\r\n // * `visible` {Boolean} Is the dock now visible?\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n observeVisible(callback) {\r\n callback(this.isVisible());\r\n return this.onDidChangeVisible(callback);\r\n }\r\n\r\n // Essential: Invoke the given callback with all current and future panes items\r\n // in the dock.\r\n //\r\n // * `callback` {Function} to be called with current and future pane items.\r\n // * `item` An item that is present in {::getPaneItems} at the time of\r\n // subscription or that is added at some later time.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n observePaneItems(callback) {\r\n return this.paneContainer.observePaneItems(callback);\r\n }\r\n\r\n // Essential: Invoke the given callback when the active pane item changes.\r\n //\r\n // Because observers are invoked synchronously, it's important not to perform\r\n // any expensive operations via this method. Consider\r\n // {::onDidStopChangingActivePaneItem} to delay operations until after changes\r\n // stop occurring.\r\n //\r\n // * `callback` {Function} to be called when the active pane item changes.\r\n // * `item` The active pane item.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidChangeActivePaneItem(callback) {\r\n return this.paneContainer.onDidChangeActivePaneItem(callback);\r\n }\r\n\r\n // Essential: Invoke the given callback when the active pane item stops\r\n // changing.\r\n //\r\n // Observers are called asynchronously 100ms after the last active pane item\r\n // change. Handling changes here rather than in the synchronous\r\n // {::onDidChangeActivePaneItem} prevents unneeded work if the user is quickly\r\n // changing or closing tabs and ensures critical UI feedback, like changing the\r\n // highlighted tab, gets priority over work that can be done asynchronously.\r\n //\r\n // * `callback` {Function} to be called when the active pane item stopts\r\n // changing.\r\n // * `item` The active pane item.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidStopChangingActivePaneItem(callback) {\r\n return this.paneContainer.onDidStopChangingActivePaneItem(callback);\r\n }\r\n\r\n // Essential: Invoke the given callback with the current active pane item and\r\n // with all future active pane items in the dock.\r\n //\r\n // * `callback` {Function} to be called when the active pane item changes.\r\n // * `item` The current active pane item.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n observeActivePaneItem(callback) {\r\n return this.paneContainer.observeActivePaneItem(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback when a pane is added to the dock.\r\n //\r\n // * `callback` {Function} to be called panes are added.\r\n // * `event` {Object} with the following keys:\r\n // * `pane` The added pane.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidAddPane(callback) {\r\n return this.paneContainer.onDidAddPane(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback before a pane is destroyed in the\r\n // dock.\r\n //\r\n // * `callback` {Function} to be called before panes are destroyed.\r\n // * `event` {Object} with the following keys:\r\n // * `pane` The pane to be destroyed.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onWillDestroyPane(callback) {\r\n return this.paneContainer.onWillDestroyPane(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback when a pane is destroyed in the dock.\r\n //\r\n // * `callback` {Function} to be called panes are destroyed.\r\n // * `event` {Object} with the following keys:\r\n // * `pane` The destroyed pane.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidDestroyPane(callback) {\r\n return this.paneContainer.onDidDestroyPane(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback with all current and future panes in the\r\n // dock.\r\n //\r\n // * `callback` {Function} to be called with current and future panes.\r\n // * `pane` A {Pane} that is present in {::getPanes} at the time of\r\n // subscription or that is added at some later time.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n observePanes(callback) {\r\n return this.paneContainer.observePanes(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback when the active pane changes.\r\n //\r\n // * `callback` {Function} to be called when the active pane changes.\r\n // * `pane` A {Pane} that is the current return value of {::getActivePane}.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidChangeActivePane(callback) {\r\n return this.paneContainer.onDidChangeActivePane(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback with the current active pane and when\r\n // the active pane changes.\r\n //\r\n // * `callback` {Function} to be called with the current and future active#\r\n // panes.\r\n // * `pane` A {Pane} that is the current return value of {::getActivePane}.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n observeActivePane(callback) {\r\n return this.paneContainer.observeActivePane(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback when a pane item is added to the dock.\r\n //\r\n // * `callback` {Function} to be called when pane items are added.\r\n // * `event` {Object} with the following keys:\r\n // * `item` The added pane item.\r\n // * `pane` {Pane} containing the added item.\r\n // * `index` {Number} indicating the index of the added item in its pane.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidAddPaneItem(callback) {\r\n return this.paneContainer.onDidAddPaneItem(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback when a pane item is about to be\r\n // destroyed, before the user is prompted to save it.\r\n //\r\n // * `callback` {Function} to be called before pane items are destroyed.\r\n // * `event` {Object} with the following keys:\r\n // * `item` The item to be destroyed.\r\n // * `pane` {Pane} containing the item to be destroyed.\r\n // * `index` {Number} indicating the index of the item to be destroyed in\r\n // its pane.\r\n //\r\n // Returns a {Disposable} on which `.dispose` can be called to unsubscribe.\r\n onWillDestroyPaneItem(callback) {\r\n return this.paneContainer.onWillDestroyPaneItem(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback when a pane item is destroyed.\r\n //\r\n // * `callback` {Function} to be called when pane items are destroyed.\r\n // * `event` {Object} with the following keys:\r\n // * `item` The destroyed item.\r\n // * `pane` {Pane} containing the destroyed item.\r\n // * `index` {Number} indicating the index of the destroyed item in its\r\n // pane.\r\n //\r\n // Returns a {Disposable} on which `.dispose` can be called to unsubscribe.\r\n onDidDestroyPaneItem(callback) {\r\n return this.paneContainer.onDidDestroyPaneItem(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback when the hovered state of the dock changes.\r\n //\r\n // * `callback` {Function} to be called when the hovered state changes.\r\n // * `hovered` {Boolean} Is the dock now hovered?\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidChangeHovered (callback): Disposable {\r\n return this.emitter.on('did-change-hovered', callback);\r\n }\r\n\r\n /*\r\n Section: Pane Items\r\n */\r\n\r\n // Essential: Get all pane items in the dock.\r\n //\r\n // Returns an {Array} of items.\r\n getPaneItems() {\r\n return this.paneContainer.getPaneItems();\r\n }\r\n\r\n // Essential: Get the active {Pane}'s active item.\r\n //\r\n // Returns an pane item {Object}.\r\n getActivePaneItem() {\r\n return this.paneContainer.getActivePaneItem();\r\n }\r\n\r\n // Save all pane items.\r\n saveAll() {\r\n this.paneContainer.saveAll();\r\n }\r\n\r\n confirmClose(options) {\r\n return this.paneContainer.confirmClose(options);\r\n }\r\n\r\n /*\r\n Section: Panes\r\n */\r\n\r\n // Extended: Get all panes in the dock.\r\n //\r\n // Returns an {Array} of {Pane}s.\r\n getPanes(): Pane[] {\r\n return this.paneContainer.getPanes();\r\n }\r\n\r\n // Extended: Get the active {Pane}.\r\n //\r\n // Returns a {Pane}.\r\n getActivePane() {\r\n return this.paneContainer.getActivePane();\r\n }\r\n\r\n // Extended: Make the next pane active.\r\n activateNextPane() {\r\n return this.paneContainer.activateNextPane();\r\n }\r\n\r\n // Extended: Make the previous pane active.\r\n activatePreviousPane() {\r\n return this.paneContainer.activatePreviousPane();\r\n }\r\n\r\n paneForURI(uri) {\r\n return this.paneContainer.paneForURI(uri);\r\n }\r\n\r\n paneForItem(item) {\r\n return this.paneContainer.paneForItem(item);\r\n }\r\n\r\n // Destroy (close) the active pane.\r\n destroyActivePane() {\r\n const activePane = this.getActivePane();\r\n if (activePane != null) {\r\n activePane.destroy();\r\n }\r\n }\r\n}\r\n\r\n\r\nfunction getWidthOrHeight(location) {\r\n return location === 'left' || location === 'right' ? 'width' : 'height';\r\n}\r\n\r\nfunction getPreferredSize(item, location) {\r\n switch (location) {\r\n case 'left':\r\n case 'right':\r\n return typeof item.getPreferredWidth === 'function'\r\n ? item.getPreferredWidth()\r\n : null;\r\n default:\r\n return typeof item.getPreferredHeight === 'function'\r\n ? item.getPreferredHeight()\r\n : null;\r\n }\r\n}\r\n\r\nfunction getIconName(location, visible) {\r\n switch (location) {\r\n case 'right': return visible ? 'icon-chevron-right' : 'icon-chevron-left';\r\n case 'bottom': return visible ? 'icon-chevron-down' : 'icon-chevron-up';\r\n case 'left': return visible ? 'icon-chevron-left' : 'icon-chevron-right';\r\n default: throw new Error(`Invalid location: ${location}`);\r\n }\r\n}\r\n\r\nfunction rectContainsPoint(rect, point) {\r\n return (\r\n point.x >= rect.left &&\r\n point.y >= rect.top &&\r\n point.x <= rect.right &&\r\n point.y <= rect.bottom\r\n );\r\n}\r\n\r\n// Is the item allowed in the given location?\r\nfunction isItemAllowed(item, location) {\r\n if (typeof item.getAllowedLocations !== 'function') {\r\n return true;\r\n }\r\n return item.getAllowedLocations().includes(location);\r\n}\r\n","import { CacheStoragesEnum } from '../../enums/cache.storages.enum';\r\nimport { StorageValueInterface } from '../../interfaces/storage.value.interface';\r\n\r\n/**\r\n * Abstract cache storage\r\n */\r\nexport abstract class CacheStorageAbstract {\r\n\r\n /**\r\n * Get item from storage\r\n * @param key\r\n */\r\n public abstract getItem(key: string): StorageValueInterface;\r\n\r\n /**\r\n * Set item to storage\r\n * @param key\r\n * @param value\r\n */\r\n public abstract setItem(key: string, value: StorageValueInterface): boolean;\r\n\r\n /**\r\n * Remove item from storage\r\n * @param key\r\n */\r\n public abstract removeItem(key: string): void;\r\n\r\n /**\r\n * Clear item in storage\r\n */\r\n public abstract clear(): void;\r\n\r\n /**\r\n * Get current storage type\r\n */\r\n public abstract type(): CacheStoragesEnum;\r\n\r\n /**\r\n * Check if storage is enabled\r\n */\r\n public abstract isEnabled(): boolean;\r\n\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CacheStorageAbstract } from '../cache.storage.abstract.service';\r\nimport { CacheStoragesEnum } from '../../../enums/cache.storages.enum';\r\nimport { StorageValueInterface } from '../../../interfaces/storage.value.interface';\r\n\r\n/**\r\n * Service for storing data in session storage\r\n */\r\n@Injectable()\r\nexport class CacheSessionStorage extends CacheStorageAbstract {\r\n\r\n public getItem(key: string) {\r\n const value = sessionStorage.getItem(key);\r\n return value ? JSON.parse(value) : null;\r\n }\r\n\r\n public setItem(key: string, value: StorageValueInterface) {\r\n try {\r\n sessionStorage.setItem(key, JSON.stringify(value));\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n public removeItem(key: string) {\r\n sessionStorage.removeItem(key);\r\n }\r\n\r\n public clear() {\r\n sessionStorage.clear();\r\n }\r\n\r\n public type() {\r\n return CacheStoragesEnum.SESSION_STORAGE;\r\n }\r\n\r\n public isEnabled() {\r\n try {\r\n sessionStorage.setItem('test', 'test');\r\n sessionStorage.removeItem('test');\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CacheStorageAbstract } from '../cache.storage.abstract.service';\r\nimport { CacheStoragesEnum } from '../../../enums/cache.storages.enum';\r\nimport { StorageValueInterface } from '../../../interfaces/storage.value.interface';\r\n\r\n/**\r\n * Service for storing data in local storage\r\n */\r\n@Injectable()\r\nexport class CacheLocalStorage extends CacheStorageAbstract {\r\n\r\n public getItem(key: string) {\r\n const value = localStorage.getItem(key);\r\n return value ? JSON.parse(value) : null;\r\n }\r\n\r\n public setItem(key: string, value: StorageValueInterface) {\r\n try {\r\n localStorage.setItem(key, JSON.stringify(value));\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n public removeItem(key: string) {\r\n localStorage.removeItem(key);\r\n }\r\n\r\n public clear() {\r\n localStorage.clear();\r\n }\r\n\r\n public type() {\r\n return CacheStoragesEnum.LOCAL_STORAGE;\r\n }\r\n\r\n public isEnabled() {\r\n try {\r\n localStorage.setItem('test', 'test');\r\n localStorage.removeItem('test');\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { CacheStorageAbstract } from '../cache.storage.abstract.service';\r\nimport { CacheStoragesEnum } from '../../../enums/cache.storages.enum';\r\nimport { StorageValueInterface } from '../../../interfaces/storage.value.interface';\r\n\r\n/**\r\n * Service for storing data in local storage\r\n */\r\n@Injectable()\r\nexport class CacheMemoryStorage extends CacheStorageAbstract {\r\n\r\n private _data: {[key: string]: any} = {};\r\n\r\n public getItem(key: string) {\r\n return this._data[key] ? this._data[key] : null;\r\n }\r\n\r\n public setItem(key: string, value: StorageValueInterface) {\r\n this._data[key] = value;\r\n return true;\r\n }\r\n\r\n public removeItem(key: string) {\r\n delete this._data[key];\r\n }\r\n\r\n public clear() {\r\n this._data = [];\r\n }\r\n\r\n public type() {\r\n return CacheStoragesEnum.MEMORY;\r\n }\r\n\r\n public isEnabled() {\r\n return true;\r\n }\r\n}\r\n","import { Injectable, Optional } from '@angular/core';\r\nimport { CacheOptionsInterface } from '../interfaces/cache.options.interface';\r\nimport { CacheStoragesEnum } from '../enums/cache.storages.enum';\r\nimport { CacheStorageAbstract } from './storage/cache.storage.abstract.service';\r\nimport { CacheSessionStorage } from './storage/sessionstorage/cache.sessionstorage.service';\r\nimport { CacheLocalStorage } from './storage/localstorage/cache.localstorage.service';\r\nimport { CacheMemoryStorage } from './storage/memory/cache.memory.service';\r\nimport { StorageValueInterface } from '../interfaces/storage.value.interface';\r\n\r\nconst CACHE_PREFIX = 'CacheService';\r\n\r\nconst DEFAULT_STORAGE = CacheStoragesEnum.MEMORY;\r\nconst DEFAULT_ENABLED_STORAGE = CacheStoragesEnum.SESSION_STORAGE;\r\n\r\n@Injectable()\r\nexport class CacheService {\r\n\r\n /**\r\n * Default cache options\r\n */\r\n private _defaultOptions: CacheOptionsInterface = {\r\n expires: Number.MAX_VALUE,\r\n maxAge : Number.MAX_VALUE\r\n };\r\n\r\n /**\r\n * Cache prefix\r\n */\r\n private _prefix: string = CACHE_PREFIX;\r\n\r\n public constructor(@Optional() private _storage: CacheStorageAbstract) {\r\n this._validateStorage();\r\n }\r\n\r\n /**\r\n * Set data to cache\r\n * @param key key\r\n * @param value value\r\n * @param options options\r\n */\r\n public set(key: string, value: any, options?: CacheOptionsInterface) {\r\n const storageKey = this._toStorageKey(key);\r\n options = options ? options : this._defaultOptions;\r\n if (this._storage.setItem(storageKey, this._toStorageValue(value, options))) {\r\n if (!this._isSystemKey(key) && options.tag) {\r\n this._saveTag(options.tag, storageKey);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n\r\n /**\r\n * Get data from cache\r\n * @param key key\r\n * @returns result\r\n */\r\n public get(key: string): any {\r\n const storageValue = this._storage.getItem(this._toStorageKey(key));\r\n let value: any = null;\r\n if (storageValue) {\r\n if (this._validateStorageValue(storageValue)) {\r\n value = storageValue.value;\r\n } else {\r\n this.remove(key);\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n /**\r\n * Check if value exists\r\n * @param key key\r\n * @returns result\r\n */\r\n public exists(key: string): boolean {\r\n return !!this.get(key);\r\n }\r\n\r\n /**\r\n * Remove item from cache\r\n * @param key key\r\n */\r\n public remove(key: string) {\r\n this._storage.removeItem(this._toStorageKey(key));\r\n this._removeFromTag(this._toStorageKey(key));\r\n }\r\n\r\n /**\r\n * Remove all from cache\r\n */\r\n public removeAll() {\r\n this._storage.clear();\r\n }\r\n\r\n /**\r\n * Get all tag data\r\n * @param tag tag\r\n * @returns result\r\n */\r\n public getTagData(tag: string) {\r\n const tags = this.get(this._tagsStorageKey()) || {};\r\n const result: {[key: string]: any} = {};\r\n if (tags[tag]) {\r\n tags[tag].forEach((key: string) => {\r\n const data = this.get(this._fromStorageKey(key));\r\n if (data) {\r\n result[this._fromStorageKey(key)] = data;\r\n }\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Create a new instance of cache with needed storage\r\n * @param type type\r\n * @returns result\r\n */\r\n public useStorage(type: CacheStoragesEnum) {\r\n const service = new CacheService(this._initStorage(type));\r\n service.setGlobalPrefix(this._getCachePrefix());\r\n return service;\r\n }\r\n\r\n /**\r\n * Remove all by tag\r\n * @param tag tag\r\n */\r\n public removeTag(tag: string) {\r\n const tags = this.get(this._tagsStorageKey()) || {};\r\n if (tags[tag]) {\r\n tags[tag].forEach((key: string) => {\r\n this._storage.removeItem(key);\r\n });\r\n delete tags[tag];\r\n this.set(this._tagsStorageKey(), tags);\r\n }\r\n }\r\n\r\n /**\r\n * Set global cache key prefix\r\n * @param prefix prefix\r\n */\r\n public setGlobalPrefix(prefix: string) {\r\n this._prefix = prefix;\r\n }\r\n\r\n /**\r\n * Validate cache storage\r\n */\r\n private _validateStorage() {\r\n if (!this._storage) {\r\n this._storage = this._initStorage(DEFAULT_STORAGE);\r\n }\r\n if (!this._storage.isEnabled()) {\r\n this._storage = this._initStorage(DEFAULT_ENABLED_STORAGE);\r\n }\r\n }\r\n\r\n /**\r\n * Remove key from tags keys list\r\n * @param key key\r\n */\r\n private _removeFromTag(key: string) {\r\n // tslint:disable-next-line:prefer-const\r\n let tags = this.get(this._tagsStorageKey()) || {};\r\n let index: number;\r\n // tslint:disable-next-line:forin\r\n for (const tag in tags) {\r\n index = tags[tag].indexOf(key);\r\n if (index !== -1) {\r\n tags[tag].splice(index, 1);\r\n this.set(this._tagsStorageKey(), tags);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Init storage by type\r\n * @param type type\r\n */\r\n private _initStorage(type: CacheStoragesEnum) {\r\n let storage: CacheStorageAbstract;\r\n switch (type) {\r\n case CacheStoragesEnum.SESSION_STORAGE:\r\n storage = new CacheSessionStorage();\r\n break;\r\n case CacheStoragesEnum.LOCAL_STORAGE:\r\n storage = new CacheLocalStorage();\r\n break;\r\n default: storage = new CacheMemoryStorage();\r\n }\r\n return storage;\r\n }\r\n\r\n private _toStorageKey(key: string) {\r\n return this._getCachePrefix() + key;\r\n }\r\n\r\n private _fromStorageKey(key: string) {\r\n return key.replace(this._getCachePrefix(), '');\r\n }\r\n\r\n /**\r\n * Prepare value to set to storage\r\n * @param value value\r\n * @param options options\r\n * @returns result\r\n */\r\n private _toStorageValue(value: any, options: CacheOptionsInterface): StorageValueInterface {\r\n return {\r\n value,\r\n options: this._toStorageOptions(options)\r\n };\r\n }\r\n\r\n /**\r\n * Prepare options to set to storage\r\n * @param options options\r\n * @returns result\r\n */\r\n private _toStorageOptions(options: CacheOptionsInterface): CacheOptionsInterface {\r\n const storageOptions: CacheOptionsInterface = {};\r\n storageOptions.expires = options.expires ? options.expires :\r\n (options.maxAge ? Date.now() + (options.maxAge * 1000) : this._defaultOptions.expires);\r\n storageOptions.maxAge = options.maxAge ? options.maxAge : this._defaultOptions.maxAge;\r\n return storageOptions;\r\n }\r\n\r\n /**\r\n * Validate storage value\r\n * @param value value\r\n * @returns result\r\n */\r\n private _validateStorageValue(value: StorageValueInterface) {\r\n return !!value.options.expires && value.options.expires > Date.now();\r\n }\r\n\r\n /**\r\n * check if its system cache key\r\n * @param key key\r\n * @returns result\r\n */\r\n private _isSystemKey(key: string) {\r\n return [this._tagsStorageKey()].indexOf(key) !== -1;\r\n }\r\n\r\n /**\r\n * Save tag to list of tags\r\n * @param tag tag\r\n * @param key key\r\n */\r\n private _saveTag(tag: string, key: string) {\r\n const tags = this.get(this._tagsStorageKey()) || {};\r\n if (!tags[tag]) {\r\n tags[tag] = [key];\r\n } else {\r\n tags[tag].push(key);\r\n }\r\n this.set(this._tagsStorageKey(), tags);\r\n }\r\n\r\n /**\r\n * Get global cache prefix\r\n * @returns result\r\n */\r\n private _getCachePrefix() {\r\n return this._prefix;\r\n }\r\n\r\n private _tagsStorageKey() {\r\n return 'CacheService_tags';\r\n }\r\n\r\n}\r\n","// tslint:disable: forin\r\nimport { Emitter, Disposable, CompositeDisposable } from './event-kit';\r\n// import { calculateSpecificity, validateSelector } from 'clear-cut';\r\n// const _ = require('underscore-plus')\r\n\r\nlet SequenceCount = 0;\r\n\r\n// Public: Associates listener functions with commands in a\r\n// context-sensitive way using CSS selectors. You can access a global instance of\r\n// this class via `atom.commands`, and commands registered there will be\r\n// presented in the command palette.\r\n//\r\n// The global command registry facilitates a style of event handling known as\r\n// *event delegation* that was popularized by jQuery. Atom commands are expressed\r\n// as custom DOM events that can be invoked on the currently focused element via\r\n// a key binding or manually via the command palette. Rather than binding\r\n// listeners for command events directly to DOM nodes, you instead register\r\n// command event listeners globally on `atom.commands` and constrain them to\r\n// specific kinds of elements with CSS selectors.\r\n//\r\n// Command names must follow the `namespace:action` pattern, where `namespace`\r\n// will typically be the name of your package, and `action` describes the\r\n// behavior of your command. If either part consists of multiple words, these\r\n// must be separated by hyphens. E.g. `awesome-package:turn-it-up-to-eleven`.\r\n// All words should be lowercased.\r\n//\r\n// As the event bubbles upward through the DOM, all registered event listeners\r\n// with matching selectors are invoked in order of specificity. In the event of a\r\n// specificity tie, the most recently registered listener is invoked first. This\r\n// mirrors the \"cascade\" semantics of CSS. Event listeners are invoked in the\r\n// context of the current DOM node, meaning `this` always points at\r\n// `event.currentTarget`. As is normally the case with DOM events,\r\n// `stopPropagation` and `stopImmediatePropagation` can be used to terminate the\r\n// bubbling process and prevent invocation of additional listeners.\r\n//\r\n// ## Example\r\n//\r\n// Here is a command that inserts the current date in an editor:\r\n//\r\n// ```coffee\r\n// atom.commands.add 'atom-text-editor',\r\n// 'user:insert-date': (event) ->\r\n// editor = @getModel()\r\n// editor.insertText(new Date().toLocaleString())\r\n// ```\r\nexport class CommandRegistry {\r\n private rootNode: any;\r\n private registeredCommands: any;\r\n private selectorBasedListenersByCommandName: any;\r\n private inlineListenersByCommandName: any;\r\n private emitter: Emitter;\r\n\r\n constructor() {\r\n this.handleCommandEvent = this.handleCommandEvent.bind(this);\r\n this.rootNode = null;\r\n this.clear();\r\n }\r\n\r\n clear() {\r\n this.registeredCommands = {};\r\n this.selectorBasedListenersByCommandName = {};\r\n this.inlineListenersByCommandName = {};\r\n this.emitter = new Emitter();\r\n }\r\n\r\n attach(rootNode) {\r\n this.rootNode = rootNode;\r\n for (const command in this.selectorBasedListenersByCommandName) {\r\n this.commandRegistered(command);\r\n }\r\n\r\n for (const command in this.inlineListenersByCommandName) {\r\n this.commandRegistered(command);\r\n }\r\n }\r\n\r\n destroy() {\r\n for (const commandName in this.registeredCommands) {\r\n this.rootNode.removeEventListener(\r\n commandName,\r\n this.handleCommandEvent,\r\n true\r\n );\r\n }\r\n }\r\n\r\n // Public: Add one or more command listeners associated with a selector.\r\n //\r\n // ## Arguments: Registering One Command\r\n //\r\n // * `target` A {String} containing a CSS selector or a DOM element. If you\r\n // pass a selector, the command will be globally associated with all matching\r\n // elements. The `,` combinator is not currently supported. If you pass a\r\n // DOM element, the command will be associated with just that element.\r\n // * `commandName` A {String} containing the name of a command you want to\r\n // handle such as `user:insert-date`.\r\n // * `listener` A listener which handles the event. Either a {Function} to\r\n // call when the given command is invoked on an element matching the\r\n // selector, or an {Object} with a `didDispatch` property which is such a\r\n // function.\r\n //\r\n // The function (`listener` itself if it is a function, or the `didDispatch`\r\n // method if `listener` is an object) will be called with `this` referencing\r\n // the matching DOM node and the following argument:\r\n // * `event`: A standard DOM event instance. Call `stopPropagation` or\r\n // `stopImmediatePropagation` to terminate bubbling early.\r\n //\r\n // Additionally, `listener` may have additional properties which are returned\r\n // to those who query using `atom.commands.findCommands`, as well as several\r\n // meaningful metadata properties:\r\n // * `displayName`: Overrides any generated `displayName` that would\r\n // otherwise be generated from the event name.\r\n // * `description`: Used by consumers to display detailed information about\r\n // the command.\r\n // * `hiddenInCommandPalette`: If `true`, this command will not appear in\r\n // the bundled command palette by default, but can still be shown with.\r\n // the `Command Palette: Show Hidden Commands` command. This is a good\r\n // option when you need to register large numbers of commands that don't\r\n // make sense to be executed from the command palette. Please use this\r\n // option conservatively, as it could reduce the discoverability of your\r\n // package's commands.\r\n //\r\n // ## Arguments: Registering Multiple Commands\r\n //\r\n // * `target` A {String} containing a CSS selector or a DOM element. If you\r\n // pass a selector, the commands will be globally associated with all\r\n // matching elements. The `,` combinator is not currently supported.\r\n // If you pass a DOM element, the command will be associated with just that\r\n // element.\r\n // * `commands` An {Object} mapping command names like `user:insert-date` to\r\n // listener {Function}s.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to remove the\r\n // added command handler(s).\r\n add(target, commandName, listener, throwOnInvalidSelector = true) {\r\n if (typeof commandName === 'object') {\r\n const commands = commandName;\r\n throwOnInvalidSelector = listener;\r\n const disposable = new CompositeDisposable();\r\n for (commandName in commands) {\r\n listener = commands[commandName];\r\n disposable.add(this.add(target, commandName, listener, throwOnInvalidSelector));\r\n }\r\n return disposable;\r\n }\r\n\r\n if (listener == null) {\r\n throw new Error('Cannot register a command with a null listener.');\r\n }\r\n\r\n // type Listener = ((e: CustomEvent) => void) | {\r\n // displayName?: string,\r\n // description?: string,\r\n // didDispatch(e: CustomEvent): void,\r\n // }\r\n if ((typeof listener !== 'function') && (typeof listener.didDispatch !== 'function')) {\r\n throw new Error('Listener must be a callback function or an object with a didDispatch method.');\r\n }\r\n\r\n if (typeof target === 'string') {\r\n if (throwOnInvalidSelector) {\r\n validateSelector(target);\r\n }\r\n return this.addSelectorBasedListener(target, commandName, listener);\r\n } else {\r\n return this.addInlineListener(target, commandName, listener);\r\n }\r\n }\r\n\r\n addSelectorBasedListener(selector, commandName, listener) {\r\n if (this.selectorBasedListenersByCommandName[commandName] == null) {\r\n this.selectorBasedListenersByCommandName[commandName] = [];\r\n }\r\n const listenersForCommand = this.selectorBasedListenersByCommandName[commandName];\r\n const selectorListener = new SelectorBasedListener(selector, commandName, listener);\r\n listenersForCommand.push(selectorListener);\r\n\r\n this.commandRegistered(commandName);\r\n\r\n return new Disposable(() => {\r\n listenersForCommand.splice(listenersForCommand.indexOf(selectorListener), 1);\r\n if (listenersForCommand.length === 0) {\r\n delete this.selectorBasedListenersByCommandName[commandName];\r\n }\r\n });\r\n }\r\n\r\n addInlineListener(element, commandName, listener) {\r\n if (this.inlineListenersByCommandName[commandName] == null) {\r\n this.inlineListenersByCommandName[commandName] = new WeakMap();\r\n }\r\n\r\n const listenersForCommand = this.inlineListenersByCommandName[commandName];\r\n let listenersForElement = listenersForCommand.get(element);\r\n if (!listenersForElement) {\r\n listenersForElement = [];\r\n listenersForCommand.set(element, listenersForElement);\r\n }\r\n const inlineListener = new InlineListener(commandName, listener);\r\n listenersForElement.push(inlineListener);\r\n\r\n this.commandRegistered(commandName);\r\n\r\n return new Disposable(() => {\r\n listenersForElement.splice(listenersForElement.indexOf(inlineListener), 1);\r\n if (listenersForElement.length === 0) {\r\n listenersForCommand.delete(element);\r\n }\r\n });\r\n }\r\n\r\n // Public: Find all registered commands matching a query.\r\n //\r\n // * `params` An {Object} containing one or more of the following keys:\r\n // * `target` A DOM node that is the hypothetical target of a given command.\r\n //\r\n // Returns an {Array} of `CommandDescriptor` {Object}s containing the following keys:\r\n // * `name` The name of the command. For example, `user:insert-date`.\r\n // * `displayName` The display name of the command. For example,\r\n // `User: Insert Date`.\r\n // Additional metadata may also be present in the returned descriptor:\r\n // * `description` a {String} describing the function of the command in more\r\n // detail than the title\r\n // * `tags` an {Array} of {String}s that describe keywords related to the\r\n // command\r\n // Any additional nonstandard metadata provided when the command was `add`ed\r\n // may also be present in the returned descriptor.\r\n findCommands({ target }) {\r\n const commandNames = new Set();\r\n const commands = [];\r\n let currentTarget = target;\r\n while (true) {\r\n let listeners;\r\n for (const name in this.inlineListenersByCommandName) {\r\n listeners = this.inlineListenersByCommandName[name];\r\n if (listeners.has(currentTarget) && !commandNames.has(name)) {\r\n commandNames.add(name);\r\n const targetListeners = listeners.get(currentTarget);\r\n commands.push(\r\n ...targetListeners.map(listener => listener.descriptor)\r\n );\r\n }\r\n }\r\n\r\n for (const commandName in this.selectorBasedListenersByCommandName) {\r\n listeners = this.selectorBasedListenersByCommandName[commandName];\r\n for (const listener of listeners) {\r\n if (listener.matchesTarget(currentTarget)) {\r\n if (!commandNames.has(commandName)) {\r\n commandNames.add(commandName);\r\n commands.push(listener.descriptor);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (currentTarget === window) {\r\n break;\r\n }\r\n currentTarget = currentTarget.parentNode || window;\r\n }\r\n\r\n return commands;\r\n }\r\n\r\n // Public: Simulate the dispatch of a command on a DOM node.\r\n //\r\n // This can be useful for testing when you want to simulate the invocation of a\r\n // command on a detached DOM node. Otherwise, the DOM node in question needs to\r\n // be attached to the document so the event bubbles up to the root node to be\r\n // processed.\r\n //\r\n // * `target` The DOM node at which to start bubbling the command event.\r\n // * `commandName` {String} indicating the name of the command to dispatch.\r\n dispatch(target, commandName, detail) {\r\n const event = new CustomEvent(commandName, { bubbles: true, detail });\r\n Object.defineProperty(event, 'target', { value: target });\r\n return this.handleCommandEvent(event);\r\n }\r\n\r\n // Public: Invoke the given callback before dispatching a command event.\r\n //\r\n // * `callback` {Function} to be called before dispatching each command\r\n // * `event` The Event that will be dispatched\r\n onWillDispatch(callback) {\r\n return this.emitter.on('will-dispatch', callback);\r\n }\r\n\r\n // Public: Invoke the given callback after dispatching a command event.\r\n //\r\n // * `callback` {Function} to be called after dispatching each command\r\n // * `event` The Event that was dispatched\r\n onDidDispatch(callback) {\r\n return this.emitter.on('did-dispatch', callback);\r\n }\r\n\r\n getSnapshot() {\r\n const snapshot = {};\r\n for (const commandName in this.selectorBasedListenersByCommandName) {\r\n const listeners = this.selectorBasedListenersByCommandName[commandName];\r\n snapshot[commandName] = listeners.slice();\r\n }\r\n return snapshot;\r\n }\r\n\r\n restoreSnapshot(snapshot) {\r\n this.selectorBasedListenersByCommandName = {};\r\n for (const commandName in snapshot) {\r\n const listeners = snapshot[commandName];\r\n this.selectorBasedListenersByCommandName[commandName] = listeners.slice();\r\n }\r\n }\r\n\r\n handleCommandEvent(event) {\r\n let propagationStopped = false;\r\n let immediatePropagationStopped = false;\r\n const matched = [];\r\n let currentTarget = event.target;\r\n\r\n const dispatchedEvent = new CustomEvent(event.type, {\r\n bubbles: true,\r\n detail: event.detail\r\n });\r\n Object.defineProperty(dispatchedEvent, 'eventPhase', {\r\n value: Event.BUBBLING_PHASE\r\n });\r\n Object.defineProperty(dispatchedEvent, 'currentTarget', {\r\n get() {\r\n return currentTarget;\r\n }\r\n });\r\n Object.defineProperty(dispatchedEvent, 'target', { value: currentTarget });\r\n Object.defineProperty(dispatchedEvent, 'preventDefault', {\r\n value() {\r\n return event.preventDefault();\r\n }\r\n });\r\n Object.defineProperty(dispatchedEvent, 'stopPropagation', {\r\n value() {\r\n event.stopPropagation();\r\n propagationStopped = true;\r\n }\r\n });\r\n Object.defineProperty(dispatchedEvent, 'stopImmediatePropagation', {\r\n value() {\r\n event.stopImmediatePropagation();\r\n propagationStopped = true;\r\n immediatePropagationStopped = true;\r\n }\r\n });\r\n Object.defineProperty(dispatchedEvent, 'abortKeyBinding', {\r\n value() {\r\n if (typeof event.abortKeyBinding === 'function') {\r\n event.abortKeyBinding();\r\n }\r\n }\r\n });\r\n\r\n for (const key of Object.keys(event)) {\r\n if (!(key in dispatchedEvent)) {\r\n dispatchedEvent[key] = event[key];\r\n }\r\n }\r\n\r\n this.emitter.emit('will-dispatch', dispatchedEvent);\r\n\r\n while (true) {\r\n const commandInlineListeners =\r\n this.inlineListenersByCommandName[event.type]\r\n ? this.inlineListenersByCommandName[event.type].get(currentTarget)\r\n : null;\r\n let listeners = commandInlineListeners || [];\r\n if (currentTarget.webkitMatchesSelector != null) {\r\n const selectorBasedListeners =\r\n (this.selectorBasedListenersByCommandName[event.type] || [])\r\n .filter(listener => listener.matchesTarget(currentTarget))\r\n .sort((a, b) => a.compare(b));\r\n listeners = selectorBasedListeners.concat(listeners);\r\n }\r\n\r\n // Call inline listeners first in reverse registration order,\r\n // and selector-based listeners by specificity and reverse\r\n // registration order.\r\n for (let i = listeners.length - 1; i >= 0; i--) {\r\n const listener = listeners[i];\r\n if (immediatePropagationStopped) {\r\n break;\r\n }\r\n matched.push(listener.didDispatch.call(currentTarget, dispatchedEvent));\r\n }\r\n\r\n if (currentTarget === window) {\r\n break;\r\n }\r\n if (propagationStopped) {\r\n break;\r\n }\r\n currentTarget = currentTarget.parentNode || window;\r\n }\r\n\r\n this.emitter.emit('did-dispatch', dispatchedEvent);\r\n\r\n return (matched.length > 0 ? Promise.all(matched) : null);\r\n }\r\n\r\n commandRegistered(commandName) {\r\n if (this.rootNode != null && !this.registeredCommands[commandName]) {\r\n this.rootNode.addEventListener(commandName, this.handleCommandEvent, true);\r\n return (this.registeredCommands[commandName] = true);\r\n }\r\n }\r\n}\r\n\r\n// type Listener = {\r\n// descriptor: CommandDescriptor,\r\n// extractDidDispatch: (e: CustomEvent) => void,\r\n// };\r\nclass SelectorBasedListener {\r\n private selector: string;\r\n private didDispatch: any;\r\n private descriptor: any;\r\n private specificity: number;\r\n private sequenceNumber: number;\r\n\r\n constructor(selector, commandName, listener) {\r\n this.selector = selector;\r\n this.didDispatch = extractDidDispatch(listener);\r\n this.descriptor = extractDescriptor(commandName, listener);\r\n this.specificity = calculateSpecificity(this.selector);\r\n this.sequenceNumber = SequenceCount++;\r\n }\r\n\r\n compare(other) {\r\n return (\r\n this.specificity - other.specificity ||\r\n this.sequenceNumber - other.sequenceNumber\r\n );\r\n }\r\n\r\n matchesTarget(target) {\r\n return target.webkitMatchesSelector && target.webkitMatchesSelector(this.selector);\r\n }\r\n}\r\n\r\nclass InlineListener {\r\n private didDispatch: any;\r\n private descriptor: any;\r\n constructor(commandName, listener) {\r\n this.didDispatch = extractDidDispatch(listener);\r\n this.descriptor = extractDescriptor(commandName, listener);\r\n }\r\n}\r\n\r\n// type CommandDescriptor = {\r\n// name: string,\r\n// displayName: string,\r\n// };\r\nfunction extractDescriptor(name, listener) {\r\n return Object.assign(\r\n omit(listener, 'didDispatch'),\r\n {\r\n name,\r\n displayName: listener.displayName ? listener.displayName : humanizeEventName(name)\r\n }\r\n );\r\n}\r\n\r\nfunction extractDidDispatch(listener) {\r\n return typeof listener === 'function' ? listener : listener.didDispatch;\r\n}\r\n\r\nfunction validateSelector(selector: string) {\r\n if (!isSelectorValid(selector)) {\r\n const error = new SyntaxError(selector + ' is not a valid selector');\r\n // error.code = 'EBADSELECTOR';\r\n throw error;\r\n }\r\n}\r\n\r\nfunction isSelectorValid(selector: string) {\r\n let valid: boolean;\r\n\r\n try {\r\n document.querySelector(selector);\r\n valid = true;\r\n } catch (error) {\r\n valid = false;\r\n }\r\n\r\n return valid;\r\n}\r\n\r\nfunction calculateSpecificity(selector: string) {\r\n const specificity = calculate(selector);\r\n return specificity;\r\n}\r\nfunction calculate(selector: string) {\r\n const commaIndex = selector.indexOf(',');\r\n if (commaIndex !== -1) {\r\n selector = selector.substring(0, commaIndex);\r\n }\r\n\r\n const types = {\r\n a: 0,\r\n b: 0,\r\n c: 0\r\n };\r\n\r\n // The following regular expressions assume that selectors matching the preceding regular expressions have been removed\r\n const attributeRegex = /(\\[[^\\]]+\\])/g;\r\n const idRegex = /(#[^\\s\\+>~\\.\\[:]+)/g;\r\n const classRegex = /(\\.[^\\s\\+>~\\.\\[:]+)/g;\r\n const pseudoElementRegex = /(::[^\\s\\+>~\\.\\[:]+|:first-line|:first-letter|:before|:after)/g;\r\n const pseudoClassRegex = /(:[^\\s\\+>~\\.\\[:]+)/g;\r\n const elementRegex = /([^\\s\\+>~\\.\\[:]+)/g;\r\n const notRegex = /:not\\(([^\\)]*)\\)/g;\r\n const ruleRegex = /\\{[^]*/gm;\r\n const separatorRegex = /[\\*\\s\\+>~]/g;\r\n const straysRegex = /[#\\.]/g;\r\n\r\n // Remove the negation psuedo-class (:not) but leave its argument because specificity is calculated on its argument\r\n selector = selector.replace(notRegex, ' $1 ');\r\n\r\n // Remove anything after a left brace in case a user has pasted in a rule, not just a selector\r\n selector = selector.replace(ruleRegex, ' ');\r\n\r\n // Add attribute selectors to parts collection (type b)\r\n selector = findMatch(attributeRegex, 'b', types, selector);\r\n\r\n // Add ID selectors to parts collection (type a)\r\n selector = findMatch(idRegex, 'a', types, selector);\r\n\r\n // Add class selectors to parts collection (type b)\r\n selector = findMatch(classRegex, 'b', types, selector);\r\n\r\n // Add pseudo-element selectors to parts collection (type c)\r\n selector = findMatch(pseudoElementRegex, 'c', types, selector);\r\n\r\n // Add pseudo-class selectors to parts collection (type b)\r\n selector = findMatch(pseudoClassRegex, 'b', types, selector);\r\n\r\n // Remove universal selector and separator characters\r\n selector = selector.replace(separatorRegex, ' ');\r\n\r\n // Remove any stray dots or hashes which aren't attached to words\r\n // These may be present if the user is live-editing this selector\r\n selector = selector.replace(straysRegex, ' ');\r\n\r\n // The only things left should be element selectors (type c)\r\n findMatch(elementRegex, 'c', types, selector);\r\n\r\n return (types.a * 100) + (types.b * 10) + (types.c * 1);\r\n}\r\n\r\nfunction findMatch(regex, type, types, selector) {\r\n const matches = selector.match(regex);\r\n if (matches) {\r\n for (const match of matches) {\r\n types[type]++;\r\n // Replace this simple selector with whitespace so it won't be counted in further simple selectors\r\n selector = selector.replace(match, ' ');\r\n }\r\n }\r\n\r\n return selector;\r\n}\r\n\r\nfunction omit(obj: any, ...props: string[]) {\r\n // const iteratee = (value, key) => !props.find(key);\r\n\r\n const result = {};\r\n if (!obj) {\r\n return result;\r\n }\r\n Object.keys(obj).forEach(key => {\r\n if (!props.find(prop => prop === key)) {\r\n return;\r\n }\r\n result[key] = obj[key];\r\n });\r\n return result;\r\n}\r\n\r\nfunction humanizeEventName(eventName, eventDoc = null) {\r\n const ref = eventName.split(':');\r\n const [namespace, event] = ref;\r\n if (event == null) {\r\n return undash(namespace);\r\n }\r\n const namespaceDoc = undash(namespace);\r\n if (eventDoc == null) {\r\n eventDoc = undash(event);\r\n }\r\n return '' + namespaceDoc + ': ' + eventDoc;\r\n}\r\n\r\nfunction undash(str) {\r\n if (str) {\r\n return str.split('-').join(' ');\r\n } else {\r\n return '';\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\n\r\n@Injectable()\r\nexport class Util {\r\n newGuid() {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n // tslint:disable: no-bitwise\r\n const r = Math.random() * 16 | 0;\r\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n /**\r\n * 向url添加QueryParam\r\n * @param url 原始url\r\n * @param paramName 参数名\r\n * @param paramValue 参数值\r\n * @param override 是否覆盖。为True时,如果参数已存在,将覆盖已有参数,否则放弃处理。默认为False。\r\n */\r\n setUrlParam(url: string, paramName: string, paramValue: string, override?: boolean) {\r\n const [path, search] = url.split('?');\r\n const params = new URLSearchParams(search);\r\n if (params.has(paramName) && !override) {\r\n return url;\r\n }\r\n\r\n params.set(paramName, paramValue);\r\n return path + '?' + params.toString();\r\n }\r\n}\r\n","import { Disposable } from './event-kit';\r\nimport { ComponentRef } from '@angular/core';\r\n\r\n// Essential: `ViewRegistry` handles the association between model and view\r\n// types in Atom. We call this association a View Provider. As in, for a given\r\n// model, this class can provide a view via {::getView}, as long as the\r\n// model/view association was registered via {::addViewProvider}\r\n//\r\n// If you're adding your own kind of pane item, a good strategy for all but the\r\n// simplest items is to separate the model and the view. The model handles\r\n// application logic and is the primary point of API interaction. The view\r\n// just handles presentation.\r\n//\r\n// Note: Models can be any object, but must implement a `getTitle()` function\r\n// if they are to be displayed in a {Pane}\r\n//\r\n// View providers inform the workspace how your model objects should be\r\n// presented in the DOM. A view provider must always return a DOM node, which\r\n// makes [HTML 5 custom elements](http://www.html5rocks.com/en/tutorials/webcomponents/customelements/)\r\n// an ideal tool for implementing views in Atom.\r\n//\r\n// You can access the `ViewRegistry` object via `atom.views`.\r\nexport class ViewRegistry {\r\n // private animationFrameRequest: any;\r\n // private documentReadInProgress: boolean;\r\n private gspEnvironment: any;\r\n private views: WeakMap<object, ComponentRef<any>>;\r\n private providers: any[];\r\n // private documentWriters: any;\r\n // private documentReaders: any;\r\n // private nextUpdatePromise: any;\r\n // private resolveNextUpdatePromise: (value?: {} | PromiseLike<{}>) => void;\r\n constructor (gspEnvironment) {\r\n // this.animationFrameRequest = null\r\n // this.documentReadInProgress = false\r\n // this.performDocumentUpdate = this.performDocumentUpdate.bind(this);\r\n this.gspEnvironment = gspEnvironment;\r\n this.clear();\r\n }\r\n\r\n clear () {\r\n this.views = new WeakMap();\r\n this.providers = [];\r\n this.clearDocumentRequests();\r\n }\r\n\r\n // Essential: Add a provider that will be used to construct views in the\r\n // workspace's view layer based on model objects in its model layer.\r\n //\r\n // ## Examples\r\n //\r\n // Text editors are divided into a model and a view layer, so when you interact\r\n // with methods like `atom.workspace.getActiveTextEditor()` you're only going\r\n // to get the model object. We display text editors on screen by teaching the\r\n // workspace what view constructor it should use to represent them:\r\n //\r\n // ```coffee\r\n // atom.views.addViewProvider TextEditor, (textEditor) ->\r\n // textEditorElement = new TextEditorElement\r\n // textEditorElement.initialize(textEditor)\r\n // textEditorElement\r\n // ```\r\n //\r\n // * `modelConstructor` (optional) Constructor {Function} for your model. If\r\n // a constructor is given, the `createView` function will only be used\r\n // for model objects inheriting from that constructor. Otherwise, it will\r\n // will be called for any object.\r\n // * `createView` Factory {Function} that is passed an instance of your model\r\n // and must return a subclass of `HTMLElement` or `undefined`. If it returns\r\n // `undefined`, then the registry will continue to search for other view\r\n // providers.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to remove the\r\n // added provider.\r\n addViewProvider (modelConstructor, createView) {\r\n let provider;\r\n if (arguments.length === 1) {\r\n switch (typeof modelConstructor) {\r\n case 'function':\r\n provider = {createView: modelConstructor, modelConstructor: null};\r\n break;\r\n case 'object':\r\n provider = modelConstructor;\r\n break;\r\n default:\r\n throw new TypeError('Arguments to addViewProvider must be functions');\r\n }\r\n } else {\r\n provider = {modelConstructor, createView};\r\n }\r\n\r\n this.providers.push(provider);\r\n return new Disposable(() => {\r\n this.providers = this.providers.filter(p => p !== provider);\r\n });\r\n }\r\n\r\n getViewProviderCount () {\r\n return this.providers.length;\r\n }\r\n\r\n // Essential: Get the view associated with an object in the workspace.\r\n //\r\n // If you're just *using* the workspace, you shouldn't need to access the view\r\n // layer, but view layer access may be necessary if you want to perform DOM\r\n // manipulation that isn't supported via the model API.\r\n //\r\n // ## View Resolution Algorithm\r\n //\r\n // The view associated with the object is resolved using the following\r\n // sequence\r\n //\r\n // 1. Is the object an instance of `HTMLElement`? If true, return the object.\r\n // 2. Does the object have a method named `getElement` that returns an\r\n // instance of `HTMLElement`? If true, return that value.\r\n // 3. Does the object have a property named `element` with a value which is\r\n // an instance of `HTMLElement`? If true, return the property value.\r\n // 4. Is the object a jQuery object, indicated by the presence of a `jquery`\r\n // property? If true, return the root DOM element (i.e. `object[0]`).\r\n // 5. Has a view provider been registered for the object? If true, use the\r\n // provider to create a view associated with the object, and return the\r\n // view.\r\n //\r\n // If no associated view is returned by the sequence an error is thrown.\r\n //\r\n // Returns a DOM element.\r\n getView (object): ComponentRef<any> {\r\n if (object == null) { return; }\r\n\r\n let view = this.views.get(object);\r\n if (!view) {\r\n view = this.createView(object);\r\n this.views.set(object, view);\r\n }\r\n return view;\r\n }\r\n\r\n createView (object): ComponentRef<any> {\r\n if (object instanceof ComponentRef) { return object; }\r\n\r\n let element;\r\n if (object && (typeof object.getElement === 'function')) {\r\n element = object.getElement();\r\n if (element instanceof ComponentRef) {\r\n return element;\r\n }\r\n }\r\n\r\n if (object && object.element instanceof ComponentRef) {\r\n return object.element;\r\n }\r\n\r\n // if (object && object.jquery) {\r\n // return object[0];\r\n // }\r\n\r\n for (const provider of this.providers) {\r\n if (provider.modelConstructor === null) {\r\n element = provider.createView(object, this.gspEnvironment);\r\n if (element) { return element; }\r\n continue;\r\n }\r\n\r\n if (object instanceof provider.modelConstructor) {\r\n element = provider.createView && provider.createView(object, this.gspEnvironment);\r\n if (element) { return element; }\r\n\r\n const ViewConstructor = provider.viewConstructor;\r\n if (ViewConstructor) {\r\n element = new ViewConstructor();\r\n if (element.initialize) {\r\n element.initialize(object);\r\n } else if (element.setModel) {\r\n element.setModel(object);\r\n }\r\n return element;\r\n }\r\n }\r\n }\r\n\r\n if (object && object.getViewClass) {\r\n const ViewConstructor = object.getViewClass();\r\n if (ViewConstructor) {\r\n const view = new ViewConstructor(object);\r\n return view;\r\n }\r\n }\r\n\r\n throw new Error(`Can't create a view for ${object.constructor.name} instance. Please register a view provider.`);\r\n }\r\n\r\n updateDocument (fn) {\r\n // this.documentWriters.push(fn)\r\n // if (!this.documentReadInProgress) { this.requestDocumentUpdate() }\r\n // return new Disposable(() => {\r\n // this.documentWriters = this.documentWriters.filter(writer => writer !== fn)\r\n // })\r\n }\r\n\r\n readDocument (fn) {\r\n // this.documentReaders.push(fn)\r\n // this.requestDocumentUpdate()\r\n // return new Disposable(() => {\r\n // this.documentReaders = this.documentReaders.filter(reader => reader !== fn)\r\n // })\r\n }\r\n\r\n getNextUpdatePromise () {\r\n // if (this.nextUpdatePromise == null) {\r\n // this.nextUpdatePromise = new Promise(resolve => {\r\n // this.resolveNextUpdatePromise = resolve\r\n // })\r\n // }\r\n\r\n // return this.nextUpdatePromise\r\n }\r\n\r\n clearDocumentRequests () {\r\n // this.documentReaders = []\r\n // this.documentWriters = []\r\n // this.nextUpdatePromise = null\r\n // this.resolveNextUpdatePromise = null\r\n // if (this.animationFrameRequest != null) {\r\n // cancelAnimationFrame(this.animationFrameRequest)\r\n // this.animationFrameRequest = null\r\n // }\r\n }\r\n\r\n requestDocumentUpdate () {\r\n // if (this.animationFrameRequest == null) {\r\n // this.animationFrameRequest = requestAnimationFrame(this.performDocumentUpdate)\r\n // }\r\n }\r\n\r\n performDocumentUpdate () {\r\n // const { resolveNextUpdatePromise } = this\r\n // this.animationFrameRequest = null\r\n // this.nextUpdatePromise = null\r\n // this.resolveNextUpdatePromise = null\r\n\r\n // var writer = this.documentWriters.shift()\r\n // while (writer) {\r\n // writer()\r\n // writer = this.documentWriters.shift()\r\n // }\r\n\r\n // var reader = this.documentReaders.shift()\r\n // this.documentReadInProgress = true\r\n // while (reader) {\r\n // reader()\r\n // reader = this.documentReaders.shift()\r\n // }\r\n // this.documentReadInProgress = false\r\n\r\n // // process updates requested as a result of reads\r\n // writer = this.documentWriters.shift()\r\n // while (writer) {\r\n // writer()\r\n // writer = this.documentWriters.shift()\r\n // }\r\n\r\n // if (resolveNextUpdatePromise) { resolveNextUpdatePromise() }\r\n }\r\n}\r\n","import { Panel } from './panel';\r\nimport { Dock } from './dock';\r\nimport { PanelLocation } from './types';\r\nimport { ViewRegistry } from './view-registry';\r\nimport { CompositeDisposable, Emitter, Disposable } from './event-kit';\r\n\r\nexport class PanelContainer {\r\n private emitter: Emitter;\r\n private subscriptions: CompositeDisposable;\r\n\r\n panels: Panel[] = [];\r\n\r\n constructor(\r\n private viewRegistry: ViewRegistry,\r\n private location: PanelLocation,\r\n private dock: Dock = null) {\r\n this.emitter = new Emitter();\r\n this.subscriptions = new CompositeDisposable();\r\n }\r\n\r\n destroy() {\r\n for (const panel of this.getPanels()) {\r\n panel.destroy();\r\n }\r\n }\r\n\r\n getElement() {\r\n }\r\n\r\n /*\r\n Section: Event Subscription\r\n */\r\n\r\n onDidAddPanel(callback): Disposable {\r\n return this.emitter.on('did-add-panel', callback);\r\n }\r\n\r\n onDidRemovePanel(callback): Disposable {\r\n return this.emitter.on('did-remove-panel', callback);\r\n }\r\n\r\n onDidDestroy(callback): Disposable {\r\n return this.emitter.once('did-destroy', callback);\r\n }\r\n\r\n getLocation(): PanelLocation {\r\n return this.location;\r\n }\r\n\r\n isModal() { return this.location === 'modal'; }\r\n\r\n getPanels(): Panel[] { return this.panels.slice(); }\r\n\r\n addPanel(panel: Panel): Panel {\r\n this.subscriptions.add(panel.onDidDestroy(this.panelDestroyed.bind(this)));\r\n\r\n const index = this.getPanelIndex(panel);\r\n if (index === this.panels.length) {\r\n this.panels.push(panel);\r\n } else {\r\n this.panels.splice(index, 0, panel);\r\n }\r\n\r\n this.emitter.emit('did-add-panel', {panel, index});\r\n return panel;\r\n }\r\n\r\n panelForItem(item) {\r\n for (const panel of this.panels) {\r\n if (panel.getItem() === item) {\r\n return panel;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n panelDestroyed(panel) {\r\n const index = this.panels.indexOf(panel);\r\n if (index > -1) {\r\n this.panels.splice(index, 1);\r\n this.emitter.emit('did-remove-panel', {panel, index});\r\n }\r\n }\r\n\r\n getPanelIndex(panel) {\r\n const priority = panel.getPriority();\r\n if (['bottom', 'right'].find(item => item === this.location)) {\r\n for (let i = this.panels.length - 1; i >= 0; i--) {\r\n const p = this.panels[i];\r\n if (priority < p.getPriority()) { return i + 1; }\r\n }\r\n return 0;\r\n } else {\r\n for (let i = 0; i < this.panels.length; i++) {\r\n const p = this.panels[i];\r\n if (priority < p.getPriority()) { return i; }\r\n }\r\n return this.panels.length;\r\n }\r\n }\r\n}\r\n","import { ViewRegistry } from './view-registry';\r\nimport { Emitter, Disposable } from './event-kit';\r\n\r\nexport interface PanelOptions {\r\n item: any;\r\n autoFocus?: boolean;\r\n visible?: boolean;\r\n priority?: number;\r\n className?: string;\r\n}\r\n\r\nexport class Panel {\r\n /*\r\n Section: Construction and Destruction\r\n */\r\n destroyed: boolean;\r\n item: any;\r\n autoFocus: boolean;\r\n visible: boolean;\r\n priority: number;\r\n className: string;\r\n viewRegistry: any;\r\n private emitter: Emitter;\r\n\r\n constructor(options: PanelOptions, viewRegistry: ViewRegistry) {\r\n this.destroyed = false;\r\n this.item = options.item;\r\n this.autoFocus = options.autoFocus == null ? false : options.autoFocus;\r\n this.visible = options.visible == null ? true : options.visible;\r\n this.priority = options.priority == null ? 100 : options.priority;\r\n this.className = options.className;\r\n this.viewRegistry = viewRegistry;\r\n this.emitter = new Emitter();\r\n }\r\n\r\n // Public: Destroy and remove this panel from the UI.\r\n destroy() {\r\n if (this.destroyed) {\r\n return;\r\n }\r\n this.destroyed = true;\r\n this.hide();\r\n this.emitter.emit('did-destroy', this);\r\n return this.emitter.dispose();\r\n }\r\n\r\n getElement() {\r\n return this.item.getElement(); // 直接返回item的视图,不再包装一层Panel\r\n }\r\n\r\n /*\r\n Section: Event Subscription\r\n */\r\n\r\n // Public: Invoke the given callback when the pane hidden or shown.\r\n //\r\n // * `callback` {Function} to be called when the pane is destroyed.\r\n // * `visible` {Boolean} true when the panel has been shown\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidChangeVisible(callback) {\r\n return this.emitter.on('did-change-visible', callback);\r\n }\r\n\r\n // Public: Invoke the given callback when the pane is destroyed.\r\n //\r\n // * `callback` {Function} to be called when the pane is destroyed.\r\n // * `panel` {Panel} this panel\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidDestroy(callback): Disposable {\r\n return this.emitter.once('did-destroy', callback);\r\n }\r\n\r\n /*\r\n Section: Panel Details\r\n */\r\n\r\n // Public: Returns the panel's item.\r\n getItem() {\r\n return this.item;\r\n }\r\n\r\n // Public: Returns a {Number} indicating this panel's priority.\r\n getPriority() {\r\n return this.priority;\r\n }\r\n\r\n getClassName() {\r\n return this.className;\r\n }\r\n\r\n // Public: Returns a {Boolean} true when the panel is visible.\r\n isVisible() {\r\n return this.visible;\r\n }\r\n\r\n // Public: Hide this panel\r\n hide() {\r\n const wasVisible = this.visible;\r\n this.visible = false;\r\n if (wasVisible) {\r\n this.emitter.emit('did-change-visible', this.visible);\r\n }\r\n }\r\n\r\n // Public: Show this panel\r\n show() {\r\n const wasVisible = this.visible;\r\n this.visible = true;\r\n if (!wasVisible) {\r\n this.emitter.emit('did-change-visible', this.visible);\r\n }\r\n }\r\n}\r\n","import { PaneContainer } from './pane-container';\r\nimport { Pane } from './pane';\r\n\r\n// Essential: Represents the workspace at the center of the entire window.\r\nexport class WorkspaceCenter {\r\n paneContainer: PaneContainer;\r\n didActivate: any;\r\n\r\n constructor(params) {\r\n params.location = 'center';\r\n this.paneContainer = new PaneContainer(params);\r\n this.didActivate = params.didActivate;\r\n this.paneContainer.onDidActivatePane(() => this.didActivate(this));\r\n this.paneContainer.onDidChangeActivePane((pane) => {\r\n params.didChangeActivePane(this, pane);\r\n });\r\n this.paneContainer.onDidChangeActivePaneItem((item) => {\r\n params.didChangeActivePaneItem(this, item);\r\n });\r\n this.paneContainer.onDidDestroyPaneItem((item) => params.didDestroyPaneItem(item));\r\n }\r\n\r\n destroy() {\r\n this.paneContainer.destroy();\r\n }\r\n\r\n serialize() {\r\n return this.paneContainer.serialize();\r\n }\r\n\r\n deserialize(state, deserializerManager) {\r\n this.paneContainer.deserialize(state, deserializerManager);\r\n }\r\n\r\n activate() {\r\n this.getActivePane().activate();\r\n }\r\n\r\n getLocation() {\r\n return 'center';\r\n }\r\n\r\n setDraggingItem() {\r\n // No-op\r\n }\r\n\r\n // Essential: Invoke the given callback with all current and future panes items\r\n // in the workspace center.\r\n //\r\n // * `callback` {Function} to be called with current and future pane items.\r\n // * `item` An item that is present in {::getPaneItems} at the time of\r\n // subscription or that is added at some later time.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n observePaneItems(callback) { return this.paneContainer.observePaneItems(callback); }\r\n\r\n // Essential: Invoke the given callback when the active pane item changes.\r\n //\r\n // Because observers are invoked synchronously, it's important not to perform\r\n // any expensive operations via this method. Consider\r\n // {::onDidStopChangingActivePaneItem} to delay operations until after changes\r\n // stop occurring.\r\n //\r\n // * `callback` {Function} to be called when the active pane item changes.\r\n // * `item` The active pane item.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidChangeActivePaneItem(callback) {\r\n return this.paneContainer.onDidChangeActivePaneItem(callback);\r\n }\r\n\r\n // Essential: Invoke the given callback when the active pane item stops\r\n // changing.\r\n //\r\n // Observers are called asynchronously 100ms after the last active pane item\r\n // change. Handling changes here rather than in the synchronous\r\n // {::onDidChangeActivePaneItem} prevents unneeded work if the user is quickly\r\n // changing or closing tabs and ensures critical UI feedback, like changing the\r\n // highlighted tab, gets priority over work that can be done asynchronously.\r\n //\r\n // * `callback` {Function} to be called when the active pane item stopts\r\n // changing.\r\n // * `item` The active pane item.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidStopChangingActivePaneItem(callback) {\r\n return this.paneContainer.onDidStopChangingActivePaneItem(callback);\r\n }\r\n\r\n // Essential: Invoke the given callback with the current active pane item and\r\n // with all future active pane items in the workspace center.\r\n //\r\n // * `callback` {Function} to be called when the active pane item changes.\r\n // * `item` The current active pane item.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n observeActivePaneItem(callback) {\r\n return this.paneContainer.observeActivePaneItem(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback when a pane is added to the workspace\r\n // center.\r\n //\r\n // * `callback` {Function} to be called panes are added.\r\n // * `event` {Object} with the following keys:\r\n // * `pane` The added pane.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidAddPane(callback) {\r\n return this.paneContainer.onDidAddPane(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback before a pane is destroyed in the\r\n // workspace center.\r\n //\r\n // * `callback` {Function} to be called before panes are destroyed.\r\n // * `event` {Object} with the following keys:\r\n // * `pane` The pane to be destroyed.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onWillDestroyPane(callback) {\r\n return this.paneContainer.onWillDestroyPane(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback when a pane is destroyed in the\r\n // workspace center.\r\n //\r\n // * `callback` {Function} to be called panes are destroyed.\r\n // * `event` {Object} with the following keys:\r\n // * `pane` The destroyed pane.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidDestroyPane(callback) {\r\n return this.paneContainer.onDidDestroyPane(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback with all current and future panes in the\r\n // workspace center.\r\n //\r\n // * `callback` {Function} to be called with current and future panes.\r\n // * `pane` A {Pane} that is present in {::getPanes} at the time of\r\n // subscription or that is added at some later time.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n observePanes(callback) {\r\n return this.paneContainer.observePanes(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback when the active pane changes.\r\n //\r\n // * `callback` {Function} to be called when the active pane changes.\r\n // * `pane` A {Pane} that is the current return value of {::getActivePane}.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidChangeActivePane(callback) {\r\n return this.paneContainer.onDidChangeActivePane(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback with the current active pane and when\r\n // the active pane changes.\r\n //\r\n // * `callback` {Function} to be called with the current and future active#\r\n // panes.\r\n // * `pane` A {Pane} that is the current return value of {::getActivePane}.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n observeActivePane(callback) {\r\n return this.paneContainer.observeActivePane(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback when a pane item is added to the\r\n // workspace center.\r\n //\r\n // * `callback` {Function} to be called when pane items are added.\r\n // * `event` {Object} with the following keys:\r\n // * `item` The added pane item.\r\n // * `pane` {Pane} containing the added item.\r\n // * `index` {Number} indicating the index of the added item in its pane.\r\n //\r\n // Returns a {Disposable} on which `.dispose()` can be called to unsubscribe.\r\n onDidAddPaneItem(callback) {\r\n return this.paneContainer.onDidAddPaneItem(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback when a pane item is about to be\r\n // destroyed, before the user is prompted to save it.\r\n //\r\n // * `callback` {Function} to be called before pane items are destroyed.\r\n // * `event` {Object} with the following keys:\r\n // * `item` The item to be destroyed.\r\n // * `pane` {Pane} containing the item to be destroyed.\r\n // * `index` {Number} indicating the index of the item to be destroyed in\r\n // its pane.\r\n //\r\n // Returns a {Disposable} on which `.dispose` can be called to unsubscribe.\r\n onWillDestroyPaneItem(callback) {\r\n return this.paneContainer.onWillDestroyPaneItem(callback);\r\n }\r\n\r\n // Extended: Invoke the given callback when a pane item is destroyed.\r\n //\r\n // * `callback` {Function} to be called when pane items are destroyed.\r\n // * `event` {Object} with the following keys:\r\n // * `item` The destroyed item.\r\n // * `pane` {Pane} containing the destroyed item.\r\n // * `index` {Number} indicating the index of the destroyed item in its\r\n // pane.\r\n //\r\n // Returns a {Disposable} on which `.dispose` can be called to unsubscribe.\r\n onDidDestroyPaneItem(callback) {\r\n return this.paneContainer.onDidDestroyPaneItem(callback);\r\n }\r\n\r\n /*\r\n Section: Pane Items\r\n */\r\n\r\n // Essential: Get all pane items in the workspace center.\r\n //\r\n // Returns an {Array} of items.\r\n getPaneItems() {\r\n return this.paneContainer.getPaneItems();\r\n }\r\n\r\n // Essential: Get the active {Pane}'s active item.\r\n //\r\n // Returns an pane item {Object}.\r\n getActivePaneItem() {\r\n return this.paneContainer.getActivePaneItem();\r\n }\r\n\r\n // Save all pane items.\r\n saveAll() {\r\n this.paneContainer.saveAll();\r\n }\r\n\r\n confirmClose(options) {\r\n return this.paneContainer.confirmClose(options);\r\n }\r\n\r\n /*\r\n Section: Panes\r\n */\r\n\r\n // Extended: Get all panes in the workspace center.\r\n //\r\n // Returns an {Array} of {Pane}s.\r\n getPanes(): Pane[] {\r\n return this.paneContainer.getPanes();\r\n }\r\n\r\n // Extended: Get the active {Pane}.\r\n //\r\n // Returns a {Pane}.\r\n getActivePane(): Pane {\r\n return this.paneContainer.getActivePane();\r\n }\r\n\r\n // Extended: Make the next pane active.\r\n activateNextPane() {\r\n return this.paneContainer.activateNextPane();\r\n }\r\n\r\n // Extended: Make the previous pane active.\r\n activatePreviousPane() {\r\n return this.paneContainer.activatePreviousPane();\r\n }\r\n\r\n paneForURI(uri): Pane {\r\n return this.paneContainer.paneForURI(uri);\r\n }\r\n\r\n paneForItem(item): Pane {\r\n return this.paneContainer.paneForItem(item);\r\n }\r\n\r\n // Destroy (close) the active pane.\r\n destroyActivePane() {\r\n const activePane = this.getActivePane();\r\n if (activePane != null) {\r\n activePane.destroy();\r\n }\r\n }\r\n}\r\n","import { PanelContainer } from './panel-container';\r\nimport { Panel, PanelOptions } from './panel';\r\nimport { Dock } from './dock';\r\nimport { WorkspaceCenter } from './workspace-center';\r\nimport { ViewRegistry } from './view-registry';\r\nimport { PanelLocation } from './types';\r\nimport { PaneContainer } from './pane-container';\r\nimport { Pane } from './pane';\r\n\r\nexport interface PaneContainers {\r\n center: WorkspaceCenter;\r\n left: Dock;\r\n right: Dock;\r\n bottom: Dock;\r\n}\r\n\r\nexport interface PanelContainers {\r\n // top: PanelContainer;\r\n // left: PanelContainer;\r\n // right: PanelContainer;\r\n // bottom: PanelContainer;\r\n // header: PanelContainer;\r\n // footer: PanelContainer;\r\n // modal: PanelContainer;\r\n [location: string]: PanelContainer;\r\n}\r\nconst gsp: any = {};\r\nconst ALL_LOCATIONS = ['center', 'left', 'right', 'bottom'];\r\nexport class Workspace {\r\n private paneContainers: PaneContainers;\r\n private panelContainers: PanelContainers;\r\n private activePaneContainer: Dock | WorkspaceCenter;\r\n private viewRegistry: ViewRegistry;\r\n private packageManager: any;\r\n private openers: any[];\r\n private frmOpeners: any[];\r\n private useFrmOpener: boolean;\r\n private notificationManager: any;\r\n private config: any;\r\n private destroyedItemURIs: any[];\r\n private project: any;\r\n\r\n constructor(params) {\r\n this.initOptions(params);\r\n this.initWorkspace();\r\n this.openers = [];\r\n this.frmOpeners = [];\r\n this.useFrmOpener = false;\r\n this.viewRegistry = params.viewRegistry;\r\n // this.subscribeToEvents();\r\n }\r\n\r\n private initOptions(params) {\r\n this.config = params.config || {};\r\n }\r\n\r\n private initWorkspace() {\r\n // 创建工作区停靠面板容器。\r\n this.paneContainers = {\r\n // 创建主区域。\r\n center: this.createCenter(),\r\n // 创建左侧面板。\r\n left: this.createDock('left'),\r\n // 创建右侧面板。\r\n right: this.createDock('right'),\r\n // 创建底部面板。\r\n bottom: this.createDock('bottom')\r\n };\r\n this.activePaneContainer = this.paneContainers.center;\r\n // 创建面板容器\r\n this.panelContainers = {\r\n top: new PanelContainer(this.viewRegistry, 'top'),\r\n left: new PanelContainer(this.viewRegistry, 'left', this.paneContainers.left),\r\n right: new PanelContainer(this.viewRegistry, 'right', this.paneContainers.right),\r\n bottom: new PanelContainer(this.viewRegistry, 'bottom', this.paneContainers.bottom),\r\n header: new PanelContainer(this.viewRegistry, 'header'),\r\n footer: new PanelContainer(this.viewRegistry, 'footer'),\r\n modal: new PanelContainer(this.viewRegistry, 'modal')\r\n };\r\n }\r\n\r\n get paneContainer(): PaneContainer {\r\n return this.paneContainers.center.paneContainer;\r\n }\r\n /**\r\n * 返回工作区元素\r\n */\r\n getElement() {\r\n }\r\n /**\r\n * 创建主面板\r\n */\r\n createCenter() {\r\n return new WorkspaceCenter({ viewRegistry: this.viewRegistry });\r\n }\r\n /**\r\n * 创建停靠面板\r\n * @param location 停靠面板位置\r\n */\r\n createDock(location) {\r\n return new Dock({\r\n location,\r\n viewRegistry: this.viewRegistry\r\n });\r\n }\r\n /**\r\n * 重置工作区\r\n * @param packageManager 包管理器\r\n */\r\n reset(packageManager) {\r\n this.packageManager = packageManager;\r\n\r\n this.destroyed();\r\n\r\n this.initWorkspace();\r\n }\r\n\r\n // Called by the Serializable mixin during serialization.\r\n /**\r\n * 序列化工作区配置\r\n */\r\n serialize() {\r\n }\r\n /**\r\n * 反序列化工作区配置\r\n * @param state state\r\n * @param deserializerManager dm\r\n */\r\n deserialize(state, deserializerManager) {\r\n }\r\n\r\n // Updates the application's title and proxy icon based on whichever file is\r\n // open.\r\n updateWindowTitle() {\r\n\r\n }\r\n\r\n open(itemOrURI, options: any = {}) {\r\n let uri, item;\r\n if (typeof itemOrURI === 'string') {\r\n uri = itemOrURI; // this.project.resolvePath(itemOrURI);\r\n } else if (itemOrURI) {\r\n item = itemOrURI;\r\n if (typeof item.getURI === 'function') { uri = item.getURI(); }\r\n }\r\n\r\n if (!this.config.get('core.allowPendingPaneItems')) {\r\n options.pending = false;\r\n }\r\n\r\n // Avoid adding URLs as recent documents to work-around this Spotlight crash:\r\n // https://github.com/atom/atom/issues/10071\r\n // if (uri && (!url.parse(uri).protocol || process.platform === 'win32')) {\r\n // this.applicationDelegate.addRecentDocument(uri);\r\n // }\r\n\r\n let pane, itemExistsInWorkspace;\r\n\r\n // Try to find an existing item in the workspace.\r\n if (item || uri) {\r\n if (options.pane) {\r\n pane = options.pane;\r\n } else if (options.searchAllPanes) {\r\n pane = item ? this.paneForItem(item) : this.paneForURI(uri);\r\n } else {\r\n // If an item with the given URI is already in the workspace, assume\r\n // that item's pane container is the preferred location for that URI.\r\n let container;\r\n if (uri) { container = this.paneContainerForURI(uri); }\r\n if (!container) { container = this.getActivePaneContainer(); }\r\n\r\n // The `split` option affects where we search for the item.\r\n pane = container.getActivePane();\r\n switch (options.split) {\r\n case 'left':\r\n pane = pane.findLeftmostSibling();\r\n break;\r\n case 'right':\r\n pane = pane.findRightmostSibling();\r\n break;\r\n case 'up':\r\n pane = pane.findTopmostSibling();\r\n break;\r\n case 'down':\r\n pane = pane.findBottommostSibling();\r\n break;\r\n }\r\n }\r\n\r\n if (pane) {\r\n if (item) {\r\n itemExistsInWorkspace = pane.getItems().includes(item);\r\n } else {\r\n item = pane.itemForURI(uri);\r\n itemExistsInWorkspace = item != null;\r\n }\r\n }\r\n }\r\n\r\n // If we already have an item at this stage, we won't need to do an async\r\n // lookup of the URI, so we yield the event loop to ensure this method\r\n // is consistently asynchronous.\r\n if (item) {\r\n Promise.resolve();\r\n }\r\n\r\n if (!itemExistsInWorkspace) {\r\n item = item || this.createItemForURI(uri, options);\r\n if (!item) { return; }\r\n\r\n if (options.pane) {\r\n pane = options.pane;\r\n } else {\r\n let location = options.location;\r\n // if (!location && !options.split && uri && this.enablePersistence) {\r\n // // location = await;\r\n // this.itemLocationStore.load(uri);\r\n // }\r\n if (!location && typeof item.getDefaultLocation === 'function') {\r\n location = item.getDefaultLocation();\r\n }\r\n\r\n const allowedLocations = typeof item.getAllowedLocations === 'function' ? item.getAllowedLocations() : ALL_LOCATIONS;\r\n location = allowedLocations.includes(location) ? location : allowedLocations[0];\r\n\r\n const container = this.paneContainers[location] || this.getCenter();\r\n pane = container.getActivePane();\r\n switch (options.split) {\r\n case 'left':\r\n pane = pane.findLeftmostSibling();\r\n break;\r\n case 'right':\r\n pane = pane.findOrCreateRightmostSibling();\r\n break;\r\n case 'up':\r\n pane = pane.findTopmostSibling();\r\n break;\r\n case 'down':\r\n pane = pane.findOrCreateBottommostSibling();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (!options.pending && (pane.getPendingItem() === item)) {\r\n pane.clearPendingItem();\r\n }\r\n\r\n this.itemOpened(item);\r\n\r\n if (options.activateItem === false) {\r\n pane.addItem(item, { pending: options.pending });\r\n } else {\r\n pane.activateItem(item, { pending: options.pending });\r\n }\r\n\r\n if (options.activatePane !== false) {\r\n pane.activate();\r\n }\r\n\r\n let initialColumn = 0;\r\n let initialLine = 0;\r\n if (!Number.isNaN(options.initialLine)) {\r\n initialLine = options.initialLine;\r\n }\r\n if (!Number.isNaN(options.initialColumn)) {\r\n initialColumn = options.initialColumn;\r\n }\r\n if (initialLine >= 0 || initialColumn >= 0) {\r\n if (typeof item.setCursorBufferPosition === 'function') {\r\n item.setCursorBufferPosition([initialLine, initialColumn]);\r\n }\r\n }\r\n\r\n const index = pane.getActiveItemIndex();\r\n return item;\r\n }\r\n\r\n hide(itemOrURI) {\r\n let foundItems = false;\r\n\r\n // If any visible item has the given URI, hide it\r\n for (const container of this.getPaneContainers()) {\r\n const isCenter = container === this.getCenter();\r\n if (isCenter || (container as Dock).isVisible()) {\r\n for (const pane of container.getPanes()) {\r\n const activeItem = pane.getActiveItem();\r\n const foundItem = (\r\n activeItem != null && (\r\n activeItem === itemOrURI ||\r\n typeof activeItem.getURI === 'function' && activeItem.getURI() === itemOrURI\r\n )\r\n );\r\n if (foundItem) {\r\n foundItems = true;\r\n // We can't really hide the center so we just destroy the item.\r\n if (isCenter) {\r\n pane.destroyItem(activeItem);\r\n } else {\r\n (container as Dock).hide();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return foundItems;\r\n }\r\n\r\n toggle(itemOrURI) {\r\n if (this.hide(itemOrURI)) {\r\n return Promise.resolve();\r\n } else {\r\n return this.open(itemOrURI, { searchAllPanes: true });\r\n }\r\n }\r\n\r\n openSync(fileUri = '', options = { initialColumn: '', initialLine: '', activateItem: '', activatePane: '' }) {\r\n const { initialLine, initialColumn } = options;\r\n const activatePane = options.activatePane != null ? options.activatePane : true;\r\n const activateItem = options.activateItem != null ? options.activateItem : true;\r\n\r\n const uri = fileUri; // this.project.resolvePath(uri_);\r\n let item = this.getActivePane().itemForURI(uri);\r\n if (uri && (item == null)) {\r\n for (const opener of this.getOpeners()) {\r\n item = opener(uri, options);\r\n if (item) { break; }\r\n }\r\n }\r\n if (item == null) {\r\n item = this.project.openSync(uri, { initialLine, initialColumn });\r\n }\r\n\r\n if (activateItem) {\r\n this.getActivePane().activateItem(item);\r\n }\r\n this.itemOpened(item);\r\n if (activatePane) {\r\n this.getActivePane().activate();\r\n }\r\n return item;\r\n }\r\n\r\n openURIInPane(uri, pane) {\r\n return this.open(uri, { pane });\r\n }\r\n\r\n createItemForURI(uri, options) {\r\n if (uri != null) {\r\n for (const opener of this.getOpeners()) {\r\n const item = opener(uri, options);\r\n if (item != null) {\r\n if (!item.getURI || typeof item.getURI !== 'function' || !item.getUri || typeof item.getURI !== 'function') {\r\n item.getUri = () => uri;\r\n }\r\n return item;\r\n }\r\n }\r\n }\r\n\r\n try {\r\n // return this.openTextFile(uri, options);\r\n } catch (error) {\r\n // switch (error.code) {\r\n // case 'CANCELLED':\r\n // return Promise.resolve();\r\n // case 'EACCES':\r\n // this.notificationManager.addWarning(`Permission denied '${error.path}'`);\r\n // return Promise.resolve();\r\n // case 'EPERM':\r\n // case 'EBUSY':\r\n // case 'ENXIO':\r\n // case 'EIO':\r\n // case 'ENOTCONN':\r\n // case 'UNKNOWN':\r\n // case 'ECONNRESET':\r\n // case 'EINVAL':\r\n // case 'EMFILE':\r\n // case 'ENOTDIR':\r\n // case 'EAGAIN':\r\n // this.notificationManager.addWarning(\r\n // `Unable to open '${error.path != null ? error.path : uri}'`,\r\n // { detail: error.message }\r\n // );\r\n // return Promise.resolve();\r\n // default:\r\n // throw error;\r\n // }\r\n }\r\n }\r\n\r\n reopenItem() {\r\n const uri = this.destroyedItemURIs.pop();\r\n if (uri) {\r\n return this.open(uri);\r\n } else {\r\n return Promise.resolve();\r\n }\r\n }\r\n\r\n addOpener(opener) {\r\n this.openers.push(opener);\r\n // return new Disposable(() => { _.remove(this.openers, opener); });\r\n }\r\n\r\n addFrmOpener(opener) {\r\n if (!this.useFrmOpener) {\r\n this.useFrmOpener = true;\r\n }\r\n this.frmOpeners.push(opener);\r\n }\r\n\r\n getOpeners() {\r\n return this.useFrmOpener ? this.frmOpeners : this.openers;\r\n }\r\n\r\n getPaneItems() {\r\n return new Array().concat(this.getPaneContainers().map(container => container.getPaneItems()));\r\n }\r\n\r\n getActivePaneItem() {\r\n return this.getActivePaneContainer().getActivePaneItem();\r\n }\r\n\r\n saveAll() {\r\n this.getPaneContainers().forEach(container => {\r\n container.saveAll();\r\n });\r\n }\r\n\r\n confirmClose(options) {\r\n return Promise.all(this.getPaneContainers().map(container =>\r\n container.confirmClose(options)\r\n )).then((results) => !results.find(item => item === false));\r\n }\r\n\r\n saveActivePaneItem() {\r\n return this.getCenter().getActivePane().saveActiveItem();\r\n }\r\n\r\n saveActivePaneItemAs() {\r\n this.getCenter().getActivePane().saveActiveItemAs();\r\n }\r\n\r\n destroyActivePaneItem() {\r\n return this.getActivePane().destroyActiveItem();\r\n }\r\n\r\n getActivePaneContainer() {\r\n return this.activePaneContainer;\r\n }\r\n\r\n getPanes() {\r\n return new Array().concat(this.getPaneContainers().map(container => container.getPanes()));\r\n }\r\n\r\n getVisiblePanes() {\r\n return new Array().concat(this.getVisiblePaneContainers().map(container => container.getPanes()));\r\n }\r\n\r\n getActivePane() {\r\n return this.getActivePaneContainer().getActivePane();\r\n }\r\n\r\n activateNextPane() {\r\n return this.getActivePaneContainer().activateNextPane();\r\n }\r\n\r\n activatePreviousPane() {\r\n return this.getActivePaneContainer().activatePreviousPane();\r\n }\r\n\r\n paneContainerForURI(uri) {\r\n return this.getPaneContainers().find(container => !!container.paneForURI(uri));\r\n }\r\n\r\n paneContainerForItem(uri) {\r\n return this.getPaneContainers().find(container => !!container.paneForItem(uri));\r\n }\r\n\r\n paneForURI(uri): Pane {\r\n for (const location of this.getPaneContainers()) {\r\n const pane = location.paneForURI(uri);\r\n if (pane != null) {\r\n return pane;\r\n }\r\n }\r\n }\r\n\r\n paneForItem(item): Pane {\r\n for (const location of this.getPaneContainers()) {\r\n const pane = location.paneForItem(item);\r\n if (pane != null) {\r\n return pane;\r\n }\r\n }\r\n }\r\n\r\n destroyActivePane() {\r\n const activePane = this.getActivePane();\r\n if (activePane != null) {\r\n activePane.destroy();\r\n }\r\n }\r\n\r\n\r\n closeActivePaneItemOrEmptyPaneOrWindow() {\r\n if (this.getCenter().getActivePaneItem() != null) {\r\n this.getCenter().getActivePane().destroyActiveItem();\r\n } else if (this.getCenter().getPanes().length > 1) {\r\n this.getCenter().destroyActivePane();\r\n } else if (this.config.get('core.closeEmptyWindows')) {\r\n // 原为关闭atom应用窗口。ide中暂不关闭整个窗口。\r\n // atom.close();\r\n }\r\n }\r\n\r\n itemOpened(item) {\r\n }\r\n\r\n\r\n destroyed() {\r\n this.paneContainers.center.destroy();\r\n this.paneContainers.left.destroy();\r\n this.paneContainers.right.destroy();\r\n this.paneContainers.bottom.destroy();\r\n\r\n for (const panelLocation in this.panelContainers) {\r\n if (this.panelContainers.hasOwnProperty(panelLocation)) {\r\n const panelContainer = this.panelContainers[panelLocation];\r\n this.paneContainer.destroy();\r\n }\r\n }\r\n }\r\n\r\n getCenter(): WorkspaceCenter {\r\n return this.paneContainers.center;\r\n }\r\n\r\n getLeftDock() {\r\n return this.paneContainers.left;\r\n }\r\n\r\n getRightDock() {\r\n return this.paneContainers.right;\r\n }\r\n\r\n getBottomDock() {\r\n return this.paneContainers.bottom;\r\n }\r\n\r\n getPaneContainers() {\r\n return [\r\n this.paneContainers.center,\r\n this.paneContainers.left,\r\n this.paneContainers.right,\r\n this.paneContainers.bottom\r\n ];\r\n }\r\n\r\n getVisiblePaneContainers() {\r\n const center = this.getCenter();\r\n return this.getPaneContainers()\r\n .filter(container => container === center || (container as Dock).isVisible());\r\n }\r\n\r\n getBottomPanels() {\r\n return this.getPanels('bottom');\r\n }\r\n\r\n addBottomPanel(options: PanelOptions): Panel {\r\n return this.addPanel('bottom', options);\r\n }\r\n\r\n getLeftPanels() {\r\n return this.getPanels('left');\r\n }\r\n\r\n addLeftPanel(options: PanelOptions): Panel {\r\n return this.addPanel('left', options);\r\n }\r\n\r\n getRightPanels() {\r\n return this.getPanels('right');\r\n }\r\n\r\n addRightPanel(options: PanelOptions): Panel {\r\n return this.addPanel('right', options);\r\n }\r\n\r\n getTopPanels() {\r\n return this.getPanels('top');\r\n }\r\n\r\n addTopPanel(options: PanelOptions): Panel {\r\n return this.addPanel('top', options);\r\n }\r\n\r\n getHeaderPanels() {\r\n return this.getPanels('header');\r\n }\r\n\r\n addHeaderPanel(options: PanelOptions): Panel {\r\n return this.addPanel('header', options);\r\n }\r\n\r\n getFooterPanels() {\r\n return this.getPanels('footer');\r\n }\r\n\r\n addFooterPanel(options: PanelOptions): Panel {\r\n return this.addPanel('footer', options);\r\n }\r\n\r\n getModalPanels() {\r\n return this.getPanels('modal');\r\n }\r\n\r\n addModalPanel(options: PanelOptions): Panel {\r\n return this.addPanel('modal', options);\r\n }\r\n\r\n panelForItem(item): Panel {\r\n for (const location in this.panelContainers) {\r\n if (this.panelContainers.hasOwnProperty(location)) {\r\n const panel = this.panelContainers[location].panelForItem(item);\r\n if (panel != null) {\r\n return panel;\r\n }\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getPanelContainer(location: PanelLocation): PanelContainer {\r\n return this.panelContainers[location];\r\n }\r\n\r\n getPanels(location: PanelLocation): Panel[] {\r\n return this.panelContainers[location].getPanels();\r\n }\r\n\r\n addPanel(location: PanelLocation, options: PanelOptions): Panel {\r\n const panel = new Panel(options, this.viewRegistry);\r\n return this.panelContainers[location].addPanel(panel);\r\n }\r\n}\r\n","import { EventBus, IDisposable } from '../eventbus';\r\nimport { Observable, of } from 'rxjs';\r\nimport { Type } from '@angular/core';\r\n\r\nexport class GspEventBus extends EventBus {\r\n private commands: any[] = [];\r\n\r\n on(target: string, tokenValue: string, eventName: string, caller: object, handler: (value: any) => void) {\r\n // 如果有对应激活命令,监听事件时立即执行回调函数\r\n const command = this.commands.find(item => item.name === eventName);\r\n if (command) {\r\n handler.call(caller, command.eventeParams);\r\n }\r\n return super.on(target, tokenValue, eventName, caller, handler);\r\n }\r\n\r\n post(emitterType: Type<any> | string, tokenValue: string, eventName: string, eventArgs: any): void {\r\n this.dispatchCommand(eventName, eventArgs);\r\n super.post(emitterType, tokenValue, eventName, eventArgs);\r\n }\r\n\r\n registryActivateCommand(commandName: string, plugin: any, activateFn: (arg0: any) => void) {\r\n this.commands.push({\r\n name: commandName,\r\n plugin,\r\n activateFn\r\n });\r\n }\r\n\r\n private dispatchCommand(commandName: string, args: any) {\r\n const command = this.commands.find(item => item.name === commandName);\r\n if (command) {\r\n command.activateFn(command.plugin);\r\n command.eventParams = args;\r\n }\r\n }\r\n}\r\n","export class ModalFrm {\r\n\r\n add(options: any) {\r\n\r\n }\r\n\r\n show(id: string) {\r\n\r\n }\r\n\r\n hide(id: string) {\r\n\r\n }\r\n\r\n close(id: string) {\r\n \r\n }\r\n}\r\n","import { Messager } from './messager';\r\nimport { ModalFrm } from './modal-frm';\r\nimport { NotifyOptions } from '@farris/ui-notify';\r\n\r\n\r\n\r\n/**\r\n * 提供ide运行所需的方法,供插件使用\r\n */\r\n\r\nexport class Ide {\r\n private frameId: string;\r\n private events: Map<string, any[]>;\r\n private modal: ModalFrm;\r\n private commandData: Map<string, any>;\r\n private msgr: Messager;\r\n private get isTop(): boolean {\r\n return window.top === window;\r\n }\r\n private get parentInstance() {\r\n let instance = this;\r\n const top = window.top;\r\n if (top && top['gsp']) {\r\n instance = top['gsp'].ide;\r\n }\r\n return instance;\r\n }\r\n\r\n get messager(): Messager {\r\n return this.msgr;\r\n }\r\n\r\n constructor(parent?: Ide) {\r\n this.events = new Map<string, any[]>();\r\n this.modal = new ModalFrm();\r\n this.frameId = this.getParam('frameID');\r\n if (this.isTop) {\r\n this.commandData = new Map<string, any>();\r\n }\r\n if (parent) {\r\n this.msgr = parent.messager;\r\n }\r\n }\r\n\r\n /* #region frame util */\r\n getParam(key: string) {\r\n const params = new URLSearchParams(window.location.search);\r\n return unescape(params.get(key));\r\n }\r\n\r\n getInitCommandData(frameId?: string): any {\r\n if (!this.isTop) {\r\n frameId = frameId || this.frameId;\r\n return this.parentInstance.getInitCommandData(frameId);\r\n } else {\r\n return this.commandData.get(frameId);\r\n }\r\n }\r\n\r\n setInitCommandData(frameId: string, data: any) {\r\n if (!this.isTop) {\r\n this.parentInstance.setInitCommandData(frameId, data);\r\n } else {\r\n this.commandData.set(frameId, data);\r\n }\r\n }\r\n\r\n setMessager(messager: Messager) {\r\n this.msgr = messager;\r\n }\r\n /* #endregion */\r\n\r\n /* #region event */\r\n onPanelAdded(cb: (options: any, location?: string) => any) {\r\n this.on('panel-added', cb);\r\n }\r\n\r\n onPanelRemoved(cb: (id: string, lacation: string) => any) {\r\n this.on('panel-removed', cb);\r\n }\r\n\r\n onPanelShown(cb: (id: string) => any) {\r\n this.on('panel-shown', cb);\r\n }\r\n\r\n onPanelHidden(cb: (id: string) => any) {\r\n this.on('panel-hidden', cb);\r\n }\r\n\r\n onModalConfirming(cb: (id: string) => boolean) {\r\n if (this.parentInstance !== this) {\r\n this.parentInstance.onModalConfirming(cb);\r\n } else {\r\n this.on('confirm-modal', cb);\r\n }\r\n }\r\n\r\n onModalCancelling(cb: (id: string) => boolean) {\r\n this.on('cancel-modal', cb);\r\n }\r\n\r\n onLeftActivated(cb: (id: string) => any) {\r\n if (this.isTop) {\r\n this.on('activate-left', cb);\r\n } else {\r\n this.parentInstance.onLeftActivated(cb);\r\n }\r\n }\r\n\r\n onNotifyShown(cb: (level: 'error' | 'warning' | 'info', content: string | NotifyOptions) => any) {\r\n this.on('show-notify', cb);\r\n }\r\n\r\n onLoadingShown(cb: () => any) {\r\n this.on('show-loading', cb);\r\n }\r\n\r\n onLoadingHidden(cb: () => any) {\r\n this.on('hide-loading', cb);\r\n }\r\n /* #endregion */\r\n\r\n\r\n /* #region panel */\r\n addPanel(options: any) {\r\n this.emit('panel-added', options);\r\n }\r\n /* #endregion */\r\n\r\n /* #region modal */\r\n addModal(options: any) {\r\n this.emit('panel-added', options, 'modal');\r\n }\r\n\r\n closeModal(id?: string) {\r\n if (this.parentInstance !== this) {\r\n this.parentInstance.closeModal(id);\r\n }\r\n this.emit('panel-removed', id, 'modal');\r\n }\r\n\r\n confirmModal(id: string): boolean {\r\n let result = true;\r\n // if (this.parentInstance !== this) {\r\n // result = this.parentInstance.confirmModal(id);\r\n // }\r\n result = result && this.emit('confirm-modal', id);\r\n return result;\r\n }\r\n\r\n cancelModal(id: string): boolean {\r\n let result = true;\r\n if (this.parentInstance !== this) {\r\n result = this.parentInstance.cancelModal(id);\r\n }\r\n result = result && this.emit('cancel-modal', id);\r\n return result;\r\n }\r\n\r\n // addLeft registryOpener....\r\n /* #endregion */\r\n\r\n /* #region left rigion */\r\n\r\n activateLeft(frameId?: string) {\r\n frameId = frameId || this.frameId;\r\n if (this.isTop) {\r\n this.emit('activate-left', frameId);\r\n } else {\r\n this.parentInstance.activateLeft(frameId);\r\n }\r\n }\r\n /* #endregion */\r\n\r\n notify(level: 'error' | 'warning' | 'info', content: string | NotifyOptions) {\r\n if (this.isTop) {\r\n this.emit('show-notify', level, content);\r\n } else {\r\n this.parentInstance.notify(level, content);\r\n }\r\n }\r\n\r\n loading(): void {\r\n if (this.isTop) {\r\n this.emit('show-loading');\r\n } else {\r\n this.parentInstance.loading();\r\n }\r\n }\r\n\r\n loaded(): void {\r\n if (this.isTop) {\r\n this.emit('hide-loading');\r\n } else {\r\n this.parentInstance.loaded();\r\n }\r\n }\r\n\r\n /* #region private method */\r\n private on(name: string, cb: any) {\r\n let callbacks = this.events.get(name);\r\n if (!callbacks) {\r\n callbacks = [cb];\r\n this.events.set(name, callbacks);\r\n } else {\r\n callbacks.push(cb);\r\n }\r\n }\r\n\r\n private emit(name: string, ...params: any[]): boolean {\r\n const callbacks = this.events.get(name);\r\n\r\n if (!callbacks || !callbacks.length) { return; }\r\n\r\n let result = true;\r\n for (const cb of callbacks) {\r\n const cbResult = cb(...params);\r\n if (typeof cbResult === 'boolean' && cbResult === false) {\r\n result = false;\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n /* #endregion */\r\n}\r\n\r\n","import { CacheService } from './../../services/cache/services/cache.service';\r\nimport { CommandRegistry } from './command-registry';\r\nimport { EventBus } from '../eventbus/event-bus';\r\nimport { Util } from '../util/util';\r\nimport { ViewRegistry } from './view-registry';\r\nimport { Workspace } from './workspace';\r\nimport { GspEventBus } from './gsp-event-bus';\r\nimport { Ide } from './ide/ide';\r\n\r\nexport class GSP {\r\n private pEventBus: EventBus;\r\n private pUtil: Util;\r\n private pWorkspace: Workspace;\r\n private pConfig: any;\r\n private pViews: ViewRegistry;\r\n private pCommands: CommandRegistry;\r\n private pIde: Ide;\r\n private pCache: CacheService;\r\n\r\n get eventBus(): EventBus { return this.pEventBus; }\r\n get util(): Util { return this.pUtil; }\r\n get workspace(): Workspace { return this.pWorkspace; }\r\n get views(): ViewRegistry { return this.pViews; }\r\n get commands(): CommandRegistry { return this.pCommands; }\r\n get ide(): Ide { return this.pIde; }\r\n get cache(): CacheService { return this.pCache; }\r\n\r\n constructor(parent?: GSP) {\r\n this.pConfig = {\r\n get(key) {\r\n return this[key];\r\n }\r\n };\r\n let ide: Ide;\r\n if (parent) {\r\n this.pViews = parent.views;\r\n this.pCommands = parent.commands;\r\n this.pEventBus = parent.eventBus;\r\n this.pUtil = parent.util;\r\n this.pWorkspace = parent.workspace;\r\n this.pCache = parent.cache;\r\n ide = parent.ide;\r\n } else {\r\n this.pViews = new ViewRegistry(this);\r\n this.pCommands = new CommandRegistry();\r\n this.pEventBus = new GspEventBus();\r\n this.pUtil = new Util();\r\n this.pWorkspace = new Workspace({\r\n config: this.pConfig,\r\n viewRegistry: this.pViews\r\n });\r\n this.pCache = new CacheService(null);\r\n }\r\n this.pIde = new Ide(ide);\r\n }\r\n\r\n /**\r\n * @deprecated 由子模块独自创建gsp实例,传入父实例作为参数。\r\n * 每个iframe持有一个独有的gsp实例,其中eventbus共享,ide不共享\r\n */\r\n createChild() {\r\n const child = new GSP(this);\r\n // child.pEventBus = this.pEventBus;\r\n // child.pViews = this.pViews;\r\n // child.pWorkspace = this.pWorkspace;\r\n return child;\r\n }\r\n}\r\n","import { Observable } from 'rxjs';\r\n\r\nexport class Messager {\r\n info(message: string, callback?: () => void): void {\r\n\r\n }\r\n\r\n question(message: string, okCallback: () => void, cancelCallback?: () => void): void {\r\n\r\n }\r\n\r\n confirm(message: string): Observable<boolean> {\r\n return null;\r\n }\r\n\r\n error(message: string): void {\r\n\r\n }\r\n\r\n warning(message: string): void {\r\n\r\n }\r\n}\r\n","import { ComponentRef } from '@angular/core';\r\n\r\nexport class PackageView {\r\n protected element: ComponentRef<any>;\r\n\r\n constructor(serializedState: any) {\r\n\r\n }\r\n\r\n getElement() {\r\n return this.element;\r\n }\r\n\r\n /**\r\n * Returns an object that can be retrieved when package is activated.\r\n */\r\n serialize() { }\r\n\r\n destroy() {\r\n }\r\n}\r\n","import { Type } from '@angular/core';\r\nimport { GSP } from '../gsp/gsp';\r\nimport { PackageView } from './package-view';\r\n\r\nexport class Package {\r\n protected packageView: PackageView;\r\n // leftPanel: any;\r\n // modelPanel: any;\r\n protected subscriptions: any = [];\r\n protected packageId: string;\r\n public data: any;\r\n\r\n get id(): string {\r\n return this.packageId;\r\n }\r\n set id(value: string) {\r\n this.packageId = value;\r\n }\r\n\r\n get view(): PackageView {\r\n return this.packageView;\r\n }\r\n\r\n constructor(protected gsp: GSP) {\r\n this.packageId = gsp.util.newGuid();\r\n }\r\n\r\n activate(state) {\r\n this.packageView = new PackageView(state.sagipackageViewState);\r\n // /*this.leftPanel = */this.ws.addLeftPanel({\r\n // title: 'test',\r\n // item: this.packageView.getComponent(),\r\n // visible: false\r\n // });\r\n }\r\n\r\n initialize() { }\r\n\r\n deactivate() {\r\n this.packageView.destroy();\r\n }\r\n\r\n serialize(): any {\r\n return {\r\n sagipackageViewState: this.packageView.serialize()\r\n };\r\n }\r\n\r\n toggle() {\r\n // return (\r\n // this.modelPanel.isVisible() ?\r\n // this.modelPanel.hide() :\r\n // this.modelPanel.show()\r\n // );\r\n }\r\n\r\n getComponent(): Type<any> {\r\n return null;\r\n }\r\n}\r\n","import { GSP } from '../gsp/gsp';\r\nimport { Package } from './package';\r\n\r\n\r\nexport class PackageModule {\r\n\r\n protected package: Package;\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n getPackage(gsp: GSP) {\r\n if (!this.package) {\r\n this.initPackage(gsp);\r\n // ng7升级后,插件包是iframe的形式,初始化方式改变。\r\n if (this.package) {\r\n this.package.initialize();\r\n }\r\n }\r\n return this.package;\r\n }\r\n\r\n protected initPackage(gsp: GSP) {\r\n this.package = new Package(gsp);\r\n }\r\n}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { CacheLocalStorage } from './services/storage/localstorage/cache.localstorage.service';\r\nimport { CacheMemoryStorage } from './services/storage/memory/cache.memory.service';\r\nimport { CacheSessionStorage } from './services/storage/sessionstorage/cache.sessionstorage.service';\r\nimport { CacheService } from './services/cache.service';\r\n\r\n@NgModule({\r\n declarations: []\r\n})\r\nexport class CacheModule {\r\n static forRoot(): ModuleWithProviders {\r\n return {\r\n ngModule: CacheModule,\r\n providers: [\r\n CacheLocalStorage,\r\n CacheMemoryStorage,\r\n CacheSessionStorage,\r\n CacheService\r\n ]\r\n };\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { CacheService } from '../cache/services/cache.service';\r\nimport { map } from 'rxjs/operators';\r\nimport { Observable } from 'rxjs/Observable';\r\n\r\n@Injectable()\r\nexport class HttpService {\r\n\r\n constructor(private http: HttpClient, private cache: CacheService) {\r\n }\r\n\r\n get(url: string): Observable<any> {\r\n return this.request('Get', url, this.setHeader({}));\r\n }\r\n\r\n post(url: string, body: any): Observable<any> {\r\n return this.request('Post', url, this.setHeader({body}));\r\n }\r\n put(url: string, body: any): Observable<any> {\r\n return this.request('Put', url, this.setHeader({body}));\r\n }\r\n delete(url: string, body: any): Observable<any> {\r\n return this.request('Delete', url, this.setHeader({body}));\r\n }\r\n patch(url: string, body: any): Observable<any> {\r\n return this.request('Patch', url, this.setHeader({body}));\r\n }\r\n\r\n setHeader(options: any) {\r\n\r\n options.headers = {\r\n 'Content-Type': 'application/json',\r\n 'Access-Control-Allow-Origin': '*'\r\n };\r\n if (this.cache.exists('sessionId') && this.cache.get('sessionId')) {\r\n options.headers['SessionId'] = this.cache.get('sessionId');\r\n }\r\n return options;\r\n }\r\n request(method: string, url: string, options: any): Observable<any> {\r\n if (options.body) {\r\n if (typeof options.body !== 'string') {\r\n options.body = JSON.stringify(options.body);\r\n }\r\n }\r\n\r\n\r\n return this.http.request(method, url, options)\r\n .pipe(map((data) => {\r\n console.log(data);\r\n return data;\r\n }));\r\n }\r\n}\r\n","import { HttpClientModule } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { HttpService } from './http.service';\r\n\r\n@NgModule({\r\n imports: [\r\n HttpClientModule\r\n ],\r\n providers: [ HttpService ]\r\n})\r\nexport class GSPHttpModule {\r\n\r\n}\r\n"],"names":["tslib_1.__decorate","document","Event","window","BsModalService","isBs3","merge","nextId","NGB_TABSET_DIRECTIVES","last","nextInstanceId"],"mappings":"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"}