blob: 14f977232d5065d5e81bf62683f45e1b827ca573 [file] [log] [blame]
{"version":3,"file":"server.es5.js","sources":["../../../src/lib/server/module.ts","../../../src/lib/server/server-provider.ts","../../../src/lib/server/server-match-media.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {NgModule} from '@angular/core';\n\nimport {SERVER_PROVIDERS} from './server-provider';\n\n@NgModule({\n providers: [SERVER_PROVIDERS]\n})\nexport class FlexLayoutServerModule {}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {InjectionToken} from '@angular/core';\nimport {DOCUMENT} from '@angular/common';\nimport {BEFORE_APP_SERIALIZED} from '@angular/platform-server';\nimport {\n BREAKPOINTS,\n CLASS_NAME,\n SERVER_TOKEN,\n BreakPoint,\n ɵMatchMedia as MatchMedia,\n StylesheetMap,\n sortAscendingPriority\n} from '@angular/flex-layout/core';\n\nimport {ServerMatchMedia} from './server-match-media';\n\n/**\n * Activate all of the registered breakpoints in sequence, and then\n * retrieve the associated stylings from the virtual stylesheet\n * @param serverSheet the virtual stylesheet that stores styles for each\n * element\n * @param mediaController the MatchMedia service to activate/deactivate breakpoints\n * @param breakpoints the registered breakpoints to activate/deactivate\n * @param layoutConfig the library config, and specifically the breakpoints to activate\n */\nexport function generateStaticFlexLayoutStyles(serverSheet: StylesheetMap,\n mediaController: ServerMatchMedia,\n breakpoints: BreakPoint[]) {\n // Store the custom classes in the following map, that way only\n // one class gets allocated per HTMLElement, and each class can\n // be referenced in the static media queries\n const classMap = new Map<HTMLElement, string>();\n\n // Get the initial stylings for all of the directives,\n // and initialize the fallback block of stylings\n const defaultStyles = new Map(serverSheet.stylesheet);\n // Reset the class counter, otherwise class numbers will\n // increase with each server render\n nextId = 0;\n let styleText = generateCss(defaultStyles, 'all', classMap);\n\n [...breakpoints].sort(sortAscendingPriority).forEach((bp, i) => {\n serverSheet.clearStyles();\n mediaController.activateBreakpoint(bp);\n const stylesheet = new Map(serverSheet.stylesheet);\n if (stylesheet.size > 0) {\n styleText += generateCss(stylesheet, bp.mediaQuery, classMap);\n }\n mediaController.deactivateBreakpoint(breakpoints[i]);\n });\n\n\n\n return styleText;\n}\n\n/**\n * Create a style tag populated with the dynamic stylings from Flex\n * components and attach it to the head of the DOM\n */\nexport function FLEX_SSR_SERIALIZER_FACTORY(serverSheet: StylesheetMap,\n mediaController: ServerMatchMedia,\n _document: Document,\n breakpoints: BreakPoint[]) {\n return () => {\n // This is the style tag that gets inserted into the head of the DOM,\n // populated with the manual media queries\n const styleTag = _document.createElement('style');\n const styleText = generateStaticFlexLayoutStyles(serverSheet, mediaController, breakpoints);\n styleTag.classList.add(`${CLASS_NAME}ssr`);\n styleTag.textContent = styleText;\n _document.head!.appendChild(styleTag);\n };\n}\n\n/**\n * Provider to set static styles on the server\n */\nexport const SERVER_PROVIDERS = [\n {\n provide: <InjectionToken<() => void>>BEFORE_APP_SERIALIZED,\n useFactory: FLEX_SSR_SERIALIZER_FACTORY,\n deps: [\n StylesheetMap,\n MatchMedia,\n DOCUMENT,\n BREAKPOINTS\n ],\n multi: true\n },\n {\n provide: SERVER_TOKEN,\n useValue: true\n },\n {\n provide: MatchMedia,\n useClass: ServerMatchMedia\n }\n];\n\n\nlet nextId = 0;\nconst IS_DEBUG_MODE = false;\n\nexport type StyleSheet = Map<HTMLElement, Map<string, string|number>>;\nexport type ClassMap = Map<HTMLElement, string>;\n\n/**\n * create @media queries based on a virtual stylesheet\n * * Adds a unique class to each element and stores it\n * in a shared classMap for later reuse\n * @param stylesheet the virtual stylesheet that stores styles for each\n * element\n * @param mediaQuery the given @media CSS selector for the current breakpoint\n * @param classMap the map of HTML elements to class names to avoid duplications\n */\nfunction generateCss(stylesheet: StyleSheet, mediaQuery: string, classMap: ClassMap) {\n let css = '';\n stylesheet.forEach((styles, el) => {\n let keyVals = '';\n let className = getClassName(el, classMap);\n\n styles.forEach((v, k) => {\n keyVals += v ? format(`${k}:${v};`) : '';\n });\n\n // Build list of CSS styles; each with a className\n css += format(`.${className} {`, keyVals, '}');\n });\n\n // Group 1 or more styles (each with className) in a specific mediaQuery\n return format(`@media ${mediaQuery} {`, css, '}');\n}\n\n/**\n * For debugging purposes, prefix css segment with linefeed(s) for easy\n * debugging purposes.\n */\nfunction format(...list: string[]): string {\n let result = '';\n list.forEach((css, i) => {\n result += IS_DEBUG_MODE ? formatSegment(css, i !== 0) : css;\n });\n return result;\n}\n\nfunction formatSegment(css: string, asPrefix: boolean = true): string {\n return asPrefix ? `\\n${css}` : `${css}\\n`;\n}\n\n/**\n * Get className associated with CSS styling\n * If not found, generate global className and set\n * association.\n */\nfunction getClassName(element: HTMLElement, classMap: Map<HTMLElement, string>) {\n let className = classMap.get(element);\n if (!className) {\n className = `${CLASS_NAME}${nextId++}`;\n classMap.set(element, className);\n }\n element.classList.add(className);\n\n return className;\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {DOCUMENT} from '@angular/common';\nimport {Inject, Injectable, NgZone, PLATFORM_ID} from '@angular/core';\nimport {\n BreakPoint,\n ɵMatchMedia as MatchMedia,\n BREAKPOINTS,\n LAYOUT_CONFIG,\n LayoutConfigOptions\n} from '@angular/flex-layout/core';\n\n/**\n * Special server-only class to simulate a MediaQueryList and\n * - supports manual activation to simulate mediaQuery matching\n * - manages listeners\n */\nexport class ServerMediaQueryList implements MediaQueryList {\n private _listeners: MediaQueryListListener[] = [];\n\n get matches(): boolean {\n return this._isActive;\n }\n\n get media(): string {\n return this._mediaQuery;\n }\n\n constructor(private _mediaQuery: string, private _isActive = false) {}\n\n /**\n * Destroy the current list by deactivating the\n * listeners and clearing the internal list\n */\n destroy() {\n this.deactivate();\n this._listeners = [];\n }\n\n /** Notify all listeners that 'matches === TRUE' */\n activate(): ServerMediaQueryList {\n if (!this._isActive) {\n this._isActive = true;\n this._listeners.forEach((callback) => {\n const cb: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) = callback!;\n cb.call(this, {matches: this.matches, media: this.media} as MediaQueryListEvent);\n });\n }\n return this;\n }\n\n /** Notify all listeners that 'matches === false' */\n deactivate(): ServerMediaQueryList {\n if (this._isActive) {\n this._isActive = false;\n this._listeners.forEach((callback) => {\n const cb: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) = callback!;\n cb.call(this, {matches: this.matches, media: this.media} as MediaQueryListEvent);\n });\n }\n return this;\n }\n\n /** Add a listener to our internal list to activate later */\n addListener(listener: MediaQueryListListener) {\n if (this._listeners.indexOf(listener) === -1) {\n this._listeners.push(listener);\n }\n if (this._isActive) {\n const cb: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) = listener!;\n cb.call(this, {matches: this.matches, media: this.media} as MediaQueryListEvent);\n }\n }\n\n /** Don't need to remove listeners in the server environment */\n removeListener(_: MediaQueryListListener | null) {\n }\n\n addEventListener<K extends keyof\n MediaQueryListEventMap>(_: K,\n __: (this: MediaQueryList,\n ev: MediaQueryListEventMap[K]) => any,\n ___?: boolean | AddEventListenerOptions): void;\n addEventListener(_: string,\n __: EventListenerOrEventListenerObject,\n ___?: boolean | AddEventListenerOptions) {\n }\n\n removeEventListener<K extends keyof\n MediaQueryListEventMap>(_: K,\n __: (this: MediaQueryList,\n ev: MediaQueryListEventMap[K]) => any,\n ___?: boolean | EventListenerOptions): void;\n removeEventListener(_: string,\n __: EventListenerOrEventListenerObject,\n ___?: boolean | EventListenerOptions) {\n }\n\n dispatchEvent(_: Event): boolean {\n return false;\n }\n\n onchange: MediaQueryListListener = null;\n}\n\n/**\n * Special server-only implementation of MatchMedia that uses the above\n * ServerMediaQueryList as its internal representation\n *\n * Also contains methods to activate and deactivate breakpoints\n */\n@Injectable()\nexport class ServerMatchMedia extends MatchMedia {\n private _activeBreakpoints: BreakPoint[] = [];\n\n constructor(protected _zone: NgZone,\n @Inject(PLATFORM_ID) protected _platformId: Object,\n @Inject(DOCUMENT) protected _document: any,\n @Inject(BREAKPOINTS) protected breakpoints: BreakPoint[],\n @Inject(LAYOUT_CONFIG) protected layoutConfig: LayoutConfigOptions) {\n super(_zone, _platformId, _document);\n\n const serverBps = layoutConfig.ssrObserveBreakpoints;\n if (serverBps) {\n this._activeBreakpoints = serverBps\n .reduce((acc: BreakPoint[], serverBp: string) => {\n const foundBp = breakpoints.find(bp => serverBp === bp.alias);\n if (!foundBp) {\n console.warn(`FlexLayoutServerModule: unknown breakpoint alias \"${serverBp}\"`);\n } else {\n acc.push(foundBp);\n }\n return acc;\n }, []);\n }\n }\n\n /** Activate the specified breakpoint if we're on the server, no-op otherwise */\n activateBreakpoint(bp: BreakPoint) {\n const lookupBreakpoint = this.registry.get(bp.mediaQuery) as ServerMediaQueryList;\n if (lookupBreakpoint) {\n lookupBreakpoint.activate();\n }\n }\n\n /** Deactivate the specified breakpoint if we're on the server, no-op otherwise */\n deactivateBreakpoint(bp: BreakPoint) {\n const lookupBreakpoint = this.registry.get(bp.mediaQuery) as ServerMediaQueryList;\n if (lookupBreakpoint) {\n lookupBreakpoint.deactivate();\n }\n }\n\n /**\n * Call window.matchMedia() to build a MediaQueryList; which\n * supports 0..n listeners for activation/deactivation\n */\n protected buildMQL(query: string): ServerMediaQueryList {\n const isActive = this._activeBreakpoints.some(ab => ab.mediaQuery === query);\n\n return new ServerMediaQueryList(query, isActive);\n }\n}\n\ntype MediaQueryListListener = ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null;\n"],"names":["MatchMedia"],"mappings":"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"}