aboutsummaryrefslogtreecommitdiff
path: root/node_modules/vue-style-loader/lib/addStylesShadow.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/vue-style-loader/lib/addStylesShadow.js')
-rw-r--r--node_modules/vue-style-loader/lib/addStylesShadow.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/node_modules/vue-style-loader/lib/addStylesShadow.js b/node_modules/vue-style-loader/lib/addStylesShadow.js
new file mode 100644
index 00000000..72947108
--- /dev/null
+++ b/node_modules/vue-style-loader/lib/addStylesShadow.js
@@ -0,0 +1,70 @@
+import listToStyles from './listToStyles'
+
+export default function addStylesToShadowDOM (parentId, list, shadowRoot) {
+ var styles = listToStyles(parentId, list)
+ addStyles(styles, shadowRoot)
+}
+
+/*
+type StyleObject = {
+ id: number;
+ parts: Array<StyleObjectPart>
+}
+
+type StyleObjectPart = {
+ css: string;
+ media: string;
+ sourceMap: ?string
+}
+*/
+
+function addStyles (styles /* Array<StyleObject> */, shadowRoot) {
+ const injectedStyles =
+ shadowRoot._injectedStyles ||
+ (shadowRoot._injectedStyles = {})
+ for (var i = 0; i < styles.length; i++) {
+ var item = styles[i]
+ var style = injectedStyles[item.id]
+ if (!style) {
+ for (var j = 0; j < item.parts.length; j++) {
+ addStyle(item.parts[j], shadowRoot)
+ }
+ injectedStyles[item.id] = true
+ }
+ }
+}
+
+function createStyleElement (shadowRoot) {
+ var styleElement = document.createElement('style')
+ styleElement.type = 'text/css'
+ shadowRoot.appendChild(styleElement)
+ return styleElement
+}
+
+function addStyle (obj /* StyleObjectPart */, shadowRoot) {
+ var styleElement = createStyleElement(shadowRoot)
+ var css = obj.css
+ var media = obj.media
+ var sourceMap = obj.sourceMap
+
+ if (media) {
+ styleElement.setAttribute('media', media)
+ }
+
+ if (sourceMap) {
+ // https://developer.chrome.com/devtools/docs/javascript-debugging
+ // this makes source maps inside style tags work properly in Chrome
+ css += '\n/*# sourceURL=' + sourceMap.sources[0] + ' */'
+ // http://stackoverflow.com/a/26603875
+ css += '\n/*# sourceMappingURL=data:application/json;base64,' + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + ' */'
+ }
+
+ if (styleElement.styleSheet) {
+ styleElement.styleSheet.cssText = css
+ } else {
+ while (styleElement.firstChild) {
+ styleElement.removeChild(styleElement.firstChild)
+ }
+ styleElement.appendChild(document.createTextNode(css))
+ }
+}