UNPKG

17.9 kBSource Map (JSON)View Raw
1{"version":3,"file":"mdl-menu.component.js","sourceRoot":"","sources":["../../../src/lib/components/menu/mdl-menu.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n OnInit,\n AfterViewInit,\n ViewChild,\n ElementRef,\n ContentChildren,\n QueryList,\n Renderer,\n ViewEncapsulation, Injectable, OnDestroy\n} from '@angular/core';\nimport { MdlButtonComponent } from '../button/mdl-button.component';\nimport { MdlMenuItemComponent } from './mdl-menu-item.component';\nimport { MdlError } from '../common/mdl-error';\n\nconst BOTTOM_LEFT = 'bottom-left';\nconst BOTTOM_RIGHT = 'bottom-right';\nconst TOP_LEFT = 'top-left';\nconst TOP_RIGHT = 'top-right';\nconst UNALIGNED = 'unaligned';\n\n// Total duration of the menu animation.\nconst TRANSITION_DURATION_SECONDS = 0.3;\n// The fraction of the total duration we want to use for menu item animations.\nconst TRANSITION_DURATION_FRACTION = 0.8;\n// How long the menu stays open after choosing an option (so the user can see\n// the ripple).\nconst CLOSE_TIMEOUT = 175;\n\nconst CSS_ALIGN_MAP = {};\nCSS_ALIGN_MAP[BOTTOM_LEFT] = 'mdl-menu--bottom-left';\nCSS_ALIGN_MAP[BOTTOM_RIGHT] = 'mdl-menu--bottom-right';\nCSS_ALIGN_MAP[TOP_LEFT] = 'mdl-menu--top-left';\nCSS_ALIGN_MAP[TOP_RIGHT] = 'mdl-menu--top-right';\nCSS_ALIGN_MAP[UNALIGNED] = 'mdl-menu--unaligned';\n\n\nexport class MdlMenuError extends MdlError {\n}\n\n\nexport class MdlMenuRegisty {\n\n private menuComponents: any[] = [];\n\n public add(menuComponent: MdlMenuComponent) {\n this.menuComponents.push(menuComponent);\n }\n\n public remove(menuComponent: MdlMenuComponent) {\n this.menuComponents.slice(this.menuComponents.indexOf(menuComponent), 1);\n }\n\n public hideAllExcept(menuComponent: MdlMenuComponent) {\n\n this.menuComponents.forEach( (component) => {\n if (component !== menuComponent) {\n component.hide();\n }\n });\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/** @nocollapse */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\n\n\nexport class MdlMenuComponent implements OnInit, AfterViewInit, OnDestroy {\n public position: string;\n\n public containerChild: ElementRef;\n private container: HTMLElement;\n\n public menuElementChild: ElementRef;\n private menuElement: HTMLElement;\n\n public outlineChild: ElementRef;\n private outline: HTMLElement;\n\n public menuItemComponents: QueryList<MdlMenuItemComponent>;\n\n public cssPosition = 'mdl-menu--bottom-left';\n\n private isVisible = false;\n\n constructor(private renderer: Renderer, private menuRegistry: MdlMenuRegisty) {\n this.menuRegistry.add(this);\n }\n\n public ngOnInit() {\n this.cssPosition = CSS_ALIGN_MAP[this.position] || BOTTOM_LEFT;\n }\n\n public ngAfterViewInit() {\n this.container = this.containerChild.nativeElement;\n this.menuElement = this.menuElementChild.nativeElement;\n this.outline = this.outlineChild.nativeElement;\n\n // Add a click listener to the document, to close the menu.\n var callback = () => {\n if (this.isVisible) {\n this.hide();\n }\n };\n this.renderer.listenGlobal('window', 'click', callback);\n this.renderer.listenGlobal('window', 'touchstart', callback);\n }\n\n\n public toggle(event: Event , mdlButton: MdlButtonComponent) {\n if (!mdlButton) {\n throw new MdlMenuError(`MdlButtonComponent is required`);\n }\n if (this.isVisible) {\n this.hide();\n } else {\n this.show(event, mdlButton);\n }\n }\n\n public hideOnItemClicked() {\n // Wait some time before closing menu, so the user can see the ripple.\n setTimeout( () => {\n this.hide();\n }, CLOSE_TIMEOUT);\n }\n\n public hide() {\n // Remove all transition delays; menu items fade out concurrently.\n this.menuItemComponents.toArray().forEach(mi => {\n mi.element.style.removeProperty('transition-delay');\n });\n\n // Measure the inner element.\n var rect = this.menuElement.getBoundingClientRect();\n var height = rect.height;\n var width = rect.width;\n\n // Turn on animation, and apply the final clip. Also make invisible.\n // This triggers the transitions.\n this.renderer.setElementClass(this.menuElement, 'is-animating', true);\n this.applyClip(height, width);\n this.renderer.setElementClass(this.container, 'is-visible', false);\n\n // Clean up after the animation is complete.\n this.addAnimationEndListener();\n\n this.isVisible = false;\n }\n\n public show(event, mdlButton) {\n\n this.menuRegistry.hideAllExcept(this);\n\n event.stopPropagation();\n\n var forElement = mdlButton.element;\n var rect = forElement.getBoundingClientRect();\n var forRect = forElement.parentElement.getBoundingClientRect();\n\n if (this.position == UNALIGNED) {\n // Do not position the menu automatically. Requires the developer to\n // manually specify position.\n } else if ( this.position == BOTTOM_RIGHT ) {\n // Position below the \"for\" element, aligned to its right.\n this.container.style.right = (forRect.right - rect.right) + 'px';\n this.container.style.top = forElement.offsetTop + forElement.offsetHeight + 'px';\n } else if ( this.position == TOP_LEFT ) {\n // Position above the \"for\" element, aligned to its left.\n this.container.style.left = forElement.offsetLeft + 'px';\n this.container.style.bottom = (forRect.bottom - rect.top) + 'px';\n } else if ( this.position == TOP_RIGHT ) {\n // Position above the \"for\" element, aligned to its right.\n this.container.style.right = (forRect.right - rect.right) + 'px';\n this.container.style.bottom = (forRect.bottom - rect.top) + 'px';\n } else {\n // Default: position below the \"for\" element, aligned to its left.\n this.container.style.left = forElement.offsetLeft + 'px';\n this.container.style.top = forElement.offsetTop + forElement.offsetHeight + 'px';\n }\n\n // Measure the inner element.\n var height = this.menuElement.getBoundingClientRect().height;\n var width = this.menuElement.getBoundingClientRect().width;\n\n this.container.style.width = width + 'px';\n this.container.style.height = height + 'px';\n this.outline.style.width = width + 'px';\n this.outline.style.height = height + 'px';\n\n var transitionDuration = TRANSITION_DURATION_SECONDS * TRANSITION_DURATION_FRACTION;\n this.menuItemComponents.toArray().forEach(mi => {\n var itemDelay = null;\n if (( this.position == TOP_LEFT ) || this.position == TOP_RIGHT ) {\n itemDelay = ((height - mi.element.offsetTop - mi.element.offsetHeight) / height * transitionDuration) + 's';\n } else {\n itemDelay = (mi.element.offsetTop / height * transitionDuration) + 's';\n }\n mi.element.style.transitionDelay = itemDelay;\n });\n\n // Apply the initial clip to the text before we start animating.\n this.applyClip(height, width);\n\n this.renderer.setElementClass(this.container, 'is-visible', true);\n this.menuElement.style.clip = 'rect(0 ' + width + 'px ' + height + 'px 0)';\n this.renderer.setElementClass(this.menuElement, 'is-animating', true);\n\n this.addAnimationEndListener();\n\n this.isVisible = true;\n }\n\n\n private addAnimationEndListener() {\n this.renderer.listen(this.menuElement, 'transitionend', () => {\n this.renderer.setElementClass(this.menuElement, 'is-animating', false);\n });\n }\n\n private applyClip(height, width) {\n if (this.position == UNALIGNED) {\n // Do not clip.\n this.menuElement.style.clip = '';\n } else if (this.position == BOTTOM_RIGHT ) {\n // Clip to the top right corner of the menu.\n this.menuElement.style.clip = 'rect(0 ' + width + 'px ' + '0 ' + width + 'px)';\n } else if (this.position == TOP_LEFT) {\n // Clip to the bottom left corner of the menu.\n this.menuElement.style.clip = 'rect(' + height + 'px 0 ' + height + 'px 0)';\n } else if (this.position == TOP_RIGHT) {\n // Clip to the bottom right corner of the menu.\n this.menuElement.style.clip = 'rect(' + height + 'px ' + width + 'px ' + height + 'px ' + width + 'px)';\n } else {\n // Default: do not clip (same as clipping to the top left corner).\n this.menuElement.style.clip = '';\n }\n }\n\n public ngOnDestroy() {\n this.menuRegistry.remove(this);\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n selector: 'mdl-menu',\n host: {\n },\n exportAs: 'mdlMenu',\n template: `\n <div #container class=\"mdl-menu__container is-upgraded\">\n <div #outline class=\"mdl-menu__outline\"\n [ngClass]=\"cssPosition\"\n ></div>\n <div class=\"mdl-menu\" #menuElement>\n <ng-content></ng-content>\n </div>\n </div>\n `,\n encapsulation: ViewEncapsulation.None\n}, ] },\n];\n/** @nocollapse */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: Renderer, },\n{type: MdlMenuRegisty, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'position': [{ type: Input, args: ['mdl-menu-position', ] },],\n'containerChild': [{ type: ViewChild, args: ['container', ] },],\n'menuElementChild': [{ type: ViewChild, args: ['menuElement', ] },],\n'outlineChild': [{ type: ViewChild, args: ['outline', ] },],\n'menuItemComponents': [{ type: ContentChildren, args: [MdlMenuItemComponent, ] },],\n};\n}\n\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n"]}
\No newline at end of file