1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import listToStyles from './listToStyles'
- export default function addStylesServer (parentId, list, isProduction, context) {
- if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
- context = __VUE_SSR_CONTEXT__
- }
- if (context) {
- if (!context.hasOwnProperty('styles')) {
- Object.defineProperty(context, 'styles', {
- enumerable: true,
- get: function() {
- return renderStyles(context._styles)
- }
- })
- // expose renderStyles for vue-server-renderer (vuejs/#6353)
- context._renderStyles = renderStyles
- }
- var styles = context._styles || (context._styles = {})
- list = listToStyles(parentId, list)
- if (isProduction) {
- addStyleProd(styles, list)
- } else {
- addStyleDev(styles, list)
- }
- }
- }
- // In production, render as few style tags as possible.
- // (mostly because IE9 has a limit on number of style tags)
- function addStyleProd (styles, list) {
- for (var i = 0; i < list.length; i++) {
- var parts = list[i].parts
- for (var j = 0; j < parts.length; j++) {
- var part = parts[j]
- // group style tags by media types.
- var id = part.media || 'default'
- var style = styles[id]
- if (style) {
- if (style.ids.indexOf(part.id) < 0) {
- style.ids.push(part.id)
- style.css += '\n' + part.css
- }
- } else {
- styles[id] = {
- ids: [part.id],
- css: part.css,
- media: part.media
- }
- }
- }
- }
- }
- // In dev we use individual style tag for each module for hot-reload
- // and source maps.
- function addStyleDev (styles, list) {
- for (var i = 0; i < list.length; i++) {
- var parts = list[i].parts
- for (var j = 0; j < parts.length; j++) {
- var part = parts[j]
- styles[part.id] = {
- ids: [part.id],
- css: part.css,
- media: part.media
- }
- }
- }
- }
- function renderStyles (styles) {
- var css = ''
- for (var key in styles) {
- var style = styles[key]
- css += '<style data-vue-ssr-id="' + style.ids.join(' ') + '"' +
- (style.media ? ( ' media="' + style.media + '"' ) : '') + '>' +
- style.css + '</style>'
- }
- return css
- }
|