You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					81 lines
				
				2.1 KiB
			
		
		
			
		
	
	
					81 lines
				
				2.1 KiB
			| 
								 
											4 years ago
										 
									 | 
							
								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
							 | 
						||
| 
								 | 
							
								}
							 |